Собственный DNS-сервер пригодится, если провайдер не предоставляет такую услугу или вам не подходят существующие решения. Проще всего настроить его через панель управления. Но можно обойтись и без нее, используя терминал и Linux DNS Server BIND 9.
Допустим, вы заказали виртуальный сервер на timeweb.cloud и хотите использовать свои DNS servers. Для этого нужно выполнить два условия:
Обновите список пакетов:
apt update
Разрешите в брандмауэре входящие пакеты на порт 53 UDP:
iptables -I INPUT -p udp --dport 53 -j ACCEPT
Сохраните параметры:
iptables-save
Установите обновления:
yum update
Установите утилиту для синхронизации времени:
yum install chrony
Настройте временную зону. В данном случае — московское время:
timedatectl set-timezone Europe/Moscow
Разрешите и запустите сервис синхронизации:
systemctl enable chronyd --now
Откройте порт 53:
firewall-cmd --permanent --add-port=53/udp
Примените обновленные параметры:
firewall-cmd --reload
В этом руководстве для создания IP DNS будет использован BIND 9.
Установите необходимое ПО:
apt-get install bind9 dnsutils
Добавьте его в список автозагрузки:
systemctl enable bind9
Запустите сервис:
systemctl start bind9
Проверьте, что все работает:
systemctl status bind9
В выводе будет указано состояние active
.
Установите утилиту для организации ДНС:
yum install bind
Разрешите автозапуск:
systemctl enable named
Запустите установленный сервис:
systemctl start named
Проверьте, что он работает:
systemctl status named
В выводе будет указано состояние active
.
Параметры нужно указать в файле конфигурации.
Откройте файл конфигурации:
vi /etc/bind/named.conf.options
В строке listen-on
укажите сети, которые необходимо обслуживать. Например:
listen-on {
10.10.10.0/24;
10.1.0.0/16;
...
};
Если нужно, чтобы ДНС работал по всем адресам, не указывайте параметр или задайте ему значение any
.
В строке allow-query
укажите, кому разрешено выполнять запросы. Можно разрешить всем, вписав any
, или добавить конкретные адреса и сети:
allow-query { any; };
Перезапустите службу, чтобы новая конфигурация заработала:
systemctl restart bind9
Откройте файл конфигурации:
vi /etc/named.conf
Найдите строки:
listen-on port 53 { 127.0.0.1; localhost; 192.172.160.14; };
...
allow-query { any; };
В строке listen-on port 53
после localhost
укажите ДНС-адрес. Это IP, на котором хост будет принимать запросы. Если нужно, чтобы ДНС работал по всем адресам, не указывайте параметр или задайте ему any
.
В строке allow-query
настраиваются разрешения. Значение any
разрешает выполнять запросы всем. Можно установить ограничение для конкретной сети, указав, например, 192.172.160.0/24.
Примените конфигурацию:
systemctl restart named
Для базовой настройки достаточно указать в файле конфигурации несколько опций. Но есть другие глобальные параметры, которые помогают тонко настроить состояние и поведение хоста.
Аргумент |
Что настраивает |
directory |
Рабочая директория. Можно не указывать явно, в таком случае будет использован каталог по умолчанию — /var/named |
forwarders |
На них перенаправляются обращения, не обработанные вашим DNS. Например, можно указать гугловские:
|
forward |
Доступны два состояния — FIRST и ONLY. Если выставить FIRST, то сначала обращение будет перенаправлено, только после неуспешной обработки начнется проверка внутренней базы. При ONLY сервер не ищет совпадения в локальных зонах |
listen-on |
Интерфейсы, на которых слушает BIND. В нашем случае это порт 53 UDP |
allow-transfer |
Хосты, на которые разрешаются зонные передачи |
allow-query |
Серверы, с которых можно отправлять запросы |
allow-notify |
Хосты, которым можно отправлять уведомления, если настройки зоны изменятся |
allow-recursion |
Хосты, которые могут делать рекурсивные запросы. По умолчанию рекурсия разрешена без ограничений |
Чтобы убедиться в том, что ДНС-серверы принимают обращения от клиентов, используйте утилиту nslookup
.
Отправьте запрос с другого компьютера. Например:
nslookup site-example.com 192.172.160.14
Цель этой команды — узнать IP-адрес сайта site-example.com через ДНС 192.172.160.14.
Можно также использовать утилиту dig
. Синтаксис очень похожий:
dig @192.172.160.14 site-example.com
Здесь проверка DNS выполняется аналогичным образом. Отличается только синтаксис команды.
Базовая настройка сервера завершена. Но использовать его можно по-разному. Для этого настраиваются зоны:
Управление зонами также выполняется в файле конфигурации. Это отдельная большая тема. Создание собственной зоны позволит назначить понятные имена для каждого хоста. Это актуально, когда узлов становится много и обращаться к ним по IP-адресам становится неудобно.
Спасибо, полезно!