Собственный 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-адресам становится неудобно.
От qwert
Рекомендуемые комментарии
Комментариев нет
Создайте учетную запись или войдите, чтобы комментировать
Вы должны быть пользователем, чтобы оставить комментарий
Создать аккаунт
Зарегистрируйтесь для получения аккаунта. Это просто!
Зарегистрировать аккаунтВойти
Уже зарегистрированы? Войдите здесь.
Войти