Собственный DNS-сервер пригодится, если провайдер не предоставляет такую услугу или вам не подходят существующие решения.
Подготовка сервера
Допустим, вы заказали виртуальный сервер и хотите использовать свои DNS servers. Для этого нужно выполнить два условия:
- Заказать дополнительный IP-адрес. Для настройки DNS требуется как минимум два айпи.
- Открыть DNS-порт 53, который нужен для работы сервера имен.
Ubuntu/Debian
Обновите список пакетов:
apt update
Разрешите в брандмауэре входящие пакеты на порт 53 UDP:
iptables -I INPUT -p udp --dport 53 -j ACCEPT
Сохраните параметры:
iptables-save
CentOS
Установите обновления:
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
Установка DNS-сервера
В этом руководстве для создания IP DNS будет использован BIND 9.
Ubuntu/Debian
Установите необходимое ПО:
apt-get install bind9 dnsutils
Добавьте его в список автозагрузки:
systemctl enable bind9
Запустите сервис:
systemctl start bind9
Проверьте, что все работает:
systemctl status bind9
В выводе будет указано состояние active.
CentOS
Установите утилиту для организации ДНС:
yum install bind
Разрешите автозапуск:
systemctl enable named
Запустите установленный сервис:
systemctl start named
Проверьте, что он работает:
systemctl status named
В выводе будет указано состояние active.
Базовая настройка DNS-сервера
Параметры нужно указать в файле конфигурации.
Ubuntu/Debian
Откройте файл конфигурации:
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
CentOS
Откройте файл конфигурации:
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. Например, можно указать гугловские:
-
forwarders { 8.8.8.8; 8.8.4.4; };
Аргумент: 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 выполняется аналогичным образом. Отличается только синтаксис команды.
Зоны BIND
Базовая настройка сервера завершена. Но использовать его можно по-разному. Для этого настраиваются зоны:
- Первичная — вы пополняете и редактируете базу доменов на текущем хосте.
- Вторичная — есть сервер с первичной зоной, этот хост забирает с него настройки.
- Заглушка — хранятся только записи NS, которые используются для перенаправления на хосты.
- Кеширующая — не хранятся записи, есть только результаты обработанных запросов, которые ускоряют работу при повторных обращениях.
Управление зонами также выполняется в файле конфигурации. Это отдельная большая тема. Создание собственной зоны позволит назначить понятные имена для каждого хоста. Это актуально, когда узлов становится много и обращаться к ним по IP-адресам становится неудобно.
Рекомендованные комментарии
Нет комментариев для отображения
Создайте аккаунт или войдите в него для комментирования
Вы должны быть пользователем, чтобы оставить комментарий
Создать аккаунт
Зарегистрируйтесь для получения аккаунта. Это просто!
Зарегистрировать аккаунтВойти
Уже зарегистрированы? Войдите здесь.
Войти сейчас