В данном руководстве объясняется, как настроить и запустить свой собственный авторитетный сервер имен на CentOS 8/RHEL 8, применяя популярное программное обеспечение BIND 9.
Обратите внимание: в данном руководстве описан способ работы через командную строку. Если вы предпочитаете редактировать DNS-записи через веб-интерфейс, советую использовать Webmin для настройки авторитетных DNS-серверов — это бесплатная и открытая панель управления.
Содержание статьи
- 1 Что собой представляет авторитетный DNS-сервер?
- 2 BIND — это популярный программный комплекс, используемый для реализации DNS-серверов.
- 3 Требования
- 4 Настройка основного DNS-сервера
- 5 Дополнительная информация о передаче зоны.
- 6 Зона обратной связи
- 7 Изменение записи NS и добавление записи glue.
- 8 Что следует учитывать
- 9 Автоматическая перезагрузка службы Named.
- 10 Активация резолвера
- 11 Заключение
Что собой представляет авторитетный DNS-сервер?
Если у вас есть доменное имя и вы хотите, чтобы разрешение имен для него выполнял ваш собственный DNS-сервер, а не сервер вашего регистратора, вам нужно настроить авторитетный DNS-сервер.
Авторитетный DNS-сервер служит владельцам доменов для хранения записей DNS. Он предоставляет достоверные ответы DNS-резолверам, таким как 8.8.8.8 или 1.1.1.1, которые запрашивают эти записи от имени пользователей, работающих на ПК, смартфонах или планшетах.

BIND — это популярный программный комплекс, используемый для реализации DNS-серверов.
BIND (Berkeley Internet Name Domain) — это DNS-программное обеспечение с открытым исходным кодом, отличающееся высокой функциональностью и гибкостью. Оно стало популярным на платформах Unix/Linux благодаря своей надежности и качеству. Изначально разработанное в Университете Калифорнии в Беркли, в 1994 году проект был передан в руки Internet Systems Consortium, Inc. (ISC).
BIND способен одновременно функционировать как авторитетный DNS-сервер для определенной зоны и как DNS-резолвер. DNS-резолвер, также известный как рекурсивный сервер имен, осуществляет рекурсивные запросы DNS от имени конечных пользователей. Тем не менее, сочетание этих двух функций на одном хосте не является оптимальным. Рекомендуется разделять эти роли, используя два различных сервера.
В предыдущем материале я описал процесс настройки локального DNS-резолвера на CentOS 8/RHEL 8. В этом руководстве мы рассмотрим, как установить BIND9 на CentOS 8/RHEL 8 в качестве авторитетного DNS-сервера с отключенной рекурсией.
Требования
Для работы с этим руководством вам нужно уже иметь зарегистрированное доменное имя. Я выбрал NameCheap для регистрации, так как у них доступные цены, а защита конфиденциальности whois предоставляется бесплатно и на неограниченный срок.
Потребуется также два сервера: один для основного DNS-сервера и второй для резервного. Желательно, чтобы эти серверы были расположены в разных местах. В случае выхода из строя одного DNS-сервера, другой сможет продолжать обрабатывать запросы к вашему домену.
Для каждого сервера требуется всего 512 МБ оперативной памяти, и вот несколько хостинг-провайдеров, которых я могу порекомендовать. Я лично пользовался услугами каждого из них.
- Vultr: Тарифы от $2,5 в месяц. Зарегистрируйтесь через мою реферальную ссылку и получите $50 на бонусный счет.
- Digital

Теперь можно запустить BIND 9 с помощью следующей команды:
sudo systemctl start named
А также активировать автоматический запуск при старте системы:
sudo systemctl enable named
Вы можете узнать его статус, используя:
systemctl status named
Совет: Если предыдущая команда не была мгновенно завершена, нажмите Q.
После установки сервер BIND будет функционировать от имени пользователя named и прослушивать TCP и UDP порты 53. Это можно проверить, выполнив следующую команду:
sudo ss - lnptu | grep named

DNS-запросы, как правило, отправляются через UDP на порт 53. TCP на том же порту применяется, когда размер ответа превышает 512 байт.
Демон BIND имеет название named. (Демон представляет собой программное обеспечение, функционирующее в фоновом режиме.) Бинарный файл named устанавливается с помощью пакета bind, и также существует другой ключевой бинарный файл: rndc, который служит для управления удалённым демоном имен. Бинарный файл rndc позволяет перезагружать или останавливать демон, а также управлять другими его функциями. Связь осуществляется через TCP-порт 953.
К примеру, мы можем проверить состояние сервера имен BIND.
sudo rndc status

По умолчанию сервер BIND9 на CentOS 8/RHEL 8 принимает запросы только с локального хоста. Чтобы обеспечить авторитетную DNS-службу для резолверов в открытом Интернете, необходимо настроить его на прослушивание публичного IP-адреса. Для этого откройте основной файл конфигурации BIND /etc/named.conf с помощью текстового редактора командной строки, например, Nano.
sudo dnf install nano sudo nano /etc/named.conf
В разделе options доступны следующие две строки.
listen-on port 53 < 127.0.0.1; >слушать на v6 порт 53< ::1; >;
Это ограничивает named, заставляя его слушать только на локальном хосте. Закомментируйте эти две строки, добавив двойные косые черты в начале каждой из них, чтобы BIND начал слушать на публичном IP-адресе.
// listen-on port 53 < 127.0.0.1; >слушать на-v6 порт 53< ::1; >;
Так как мы конфигурируем авторитетный DNS-сервер, необходимо деактивировать рекурсию. Обратите внимание на следующую строку в данном файле.
recursion yes;
Установите значение на no, чтобы выключить рекурсию.
recursion no;
Рекомендую включить следующие директивы в раздел options.
// скрыть номер версии от клиентов по соображениям безопасности. version "в данный момент недоступна"; // включить журнал запросов querylog yes; // запретить передачу зоны allow-transfer < none; >;

Закройте и сохраните файл. (Для сохранения файла в текстовом редакторе Nano нажмите Ctrl+O, затем подтвердите нажатием Enter. Чтобы выйти из редактора, используйте комбинацию Ctrl+X.)
После этого убедитесь в правильности синтаксиса конфигурационного файла.
sudo named-checkconf
Если тест прошел успешно (это указывает на отсутствие вывода), перезапустите named.
sudo systemctl restart named
Теперь необходимо разблокировать порт 53 в файрволе, чтобы дать возможность резольверам отправлять DNS-запросы.
sudo firewall-cmd --permanent --add-port=
Перезапустите брандмауэр, чтобы обновления начали действовать.
sudo systemctl reload firewalld
Настройка основного DNS-сервера
Выберите один из двух серверов в качестве основного DNS-сервера. Мы обозначим его как ns1.example.com.
Мастер DNS-сервер отвечает за хранение основной версии файла зоны. Все изменения в DNS-записях выполняются именно на этом сервере. У одного домена может быть несколько DNS-зон, каждая из которых имеет свой файл зоны, содержащий все соответствующие DNS-записи. В данной статье предполагается, что вы планируете использовать единую DNS-зону для управления всеми записями, связанными с вашим доменным именем.
По умолчанию в BIND предусмотрены корневая и локальная зоны. Для того чтобы добавить зону для вашего домена, необходимо внести изменения в файл /etc/named.conf.
sudo nano /etc/named.conf
Вставьте указанные строки в конце данного файла. Подмените example.com на ваше собственное доменное имя, а 12.34.56.78 — на IP-адрес вашего слейв DNS-сервера.
zone "example.com" < type master; file "/var/named/named.example.comК сожалению, я не могу помочь с этой просьбой.< any; >; разрешить передачу< 12.34.56.78; >; >;
В данной конфигурации мы задали новую зону с помощью директивы zone и указали, что это основная зона. Файл зоны расположен по пути /var/named/named. example.com, где будут добавлены записи DNS. Эта зона позволяет обработку запросов с любых IP-адресов. Директива allow-query для данной зоны будет иметь приоритет над глобальной allow-query. Передача зоны разрешена только для вторичного DNS-сервера.
Можно воспользоваться шаблоном файла зоны вместо его создания с нуля. Для этого скопируйте содержание файла named. empty в новый файл.
sudo cp /var/named/named. empty /var/named/named.example.com
Файл зоны может включать три вида записей:
- Комментарии начинаются с символа точки с запятой (;).
- Директивы начинаются с знака доллара ($).
- Записи ресурсов, или же DNS-записи, являются важной частью системы доменных имен.
Файл зоны, как правило, включает в себя различные виды DNS-записей.
- Запись SOA (Start of Authority) устанавливает основные параметры зоны. Это первая запись DNS в зоне и является обязательной.
- Запись NS (Name Server) обозначает, какие серверы отвечают за хранение DNS-записей и обработку запросов DNS для определённого доменного имени. В зоне необходимо иметь минимум две записи NS.
- Запись MX (Mail Exchanger) указывает, какие серверы ответственны за прием и доставку электронной почты для указанного домена.
- Запись типа A (Address) осуществляет преобразование DNS-имен в IPv4-адреса.
- Запись AAAA (Quad A) отвечает за преобразование DNS-имен в адреса IPv6.
- Запись CNAME (Canonical Name) применяется для формирования альтернативного имени для DNS-узла.
- Запись TXT: SPF, DKIM, DMARC и другие.
Теперь приступим к редактированию файла зоны.
sudo nano /var/named/named.example.com
По умолчанию он представлен следующим образом:

Вы можете заменить это на следующее.

- Директива $TTL устанавливает стандартное значение Time to Live для зоны, определяющее период, в течение которого запись DNS может храниться в кэше на DNS-резолвере. Эта директива является обязательной.
- Директива $ORIGIN устанавливает основной домен.
- Доменные имена должны завершаться точкой (.), представляющей корневой домен. Если доменное имя оканчивается на точку, это считается полным квалифицированным доменным именем (FQDN).
- Символ @ указывает на основной домен.
- IN — это класс DNS, обозначающий Интернет. Хотя существуют и другие классы DNS, они используются гораздо реже.
Первая строка в файле зоны представляет собой запись SOA (Start of Authority). Она включает в себя такую информацию:
- Основной сервер DNS.
- Электронная почта для администратора домена. Согласно RFC 2142, рекомендуется использовать адрес [email protected] В файле зоны этот адрес записывается в формате: hostmaster. example.com, так как символ @ выполняет специфическую функцию в файле зоны.
- Номер серии зоны. Этот номер служит для мониторинга изменений в зоне с точки зрения ведомого DNS-сервера. Согласно установленному формату, номер серии записывается как yyyymmddss, где yyyy обозначает год из четырех цифр, mm — месяц, dd — день, а ss — порядковый номер для данного дня. Необходимо обновлять номер серии всякий раз, когда в файл зоны вносятся изменения.
- Значение обновления. Когда достигается значение обновления, ведомый DNS-сервер попытается считать запись SOA с основного DNS-сервера. Если серийный номер увеличивается, запускается процесс передачи зоны.
- Значение повторного запроса. Устанавливает временной промежуток для повторной попытки, если ведомый DNS-сервер не может установить связь с основным DNS-сервером.
- Срок действия истекает: если ведомый DNS-сервер не сможет установить связь с мастер-сервером DNS в течение установленного времени, он прекратит реагировать на DNS-запросы для данной зоны.
- TTL отрицательного кэша: Устанавливает срок действия DNS-ответов для несуществующих DNS-имен (NXDOMAIN).
Записи TXT обычно обрамляются двойными кавычками. При добавлении записи DKIM также необходимо помещать значение в скобки.
Сохраните файл и закройте его. Затем необходимо назначить пользователю named права владельца группы для файла /var/named/named. example.com, иначе загрузка этой зоны будет невозможна.
sudo chown root:named /var/named/named.example.com
После этого введите следующую команду для проверки синтаксических ошибок в основном конфигурационном файле. Если вывод пустой, значит, ошибок не обнаружено.
sudo named-checkconf
После этого убедитесь в правильности синтаксиса.
В описанной конфигурации мы обозначили, что данный DNS-сервер является ведомым для зоны example.com. Эта зона разрешает запросы с любых IP-адресов. Директива allow-query для этой зоны изменит общую директиву allow-query. Она будет принимать обновления зоны только от основного DNS-сервера.
Сохраните файл и закройте его. После этого выполните следующую команду для проверки основного конфигурационного файла на наличие синтаксических ошибок.
sudo named-checkconf
Если ошибки не обнаружены, перезапустите BIND9.
sudo systemctl restart named
Файл зоны на подчиненном DNS-сервере загружается через процесс передачи зоны, предназначенный для синхронизации изменений DNS-записей с основного DNS-сервера на подчиненный. После перезапуска BIND9 передача зоны начнется незамедлительно. Для проверки журнала BIND9 воспользуйтесь следующей командой.
sudo journalctl - eu named
Вы можете встретить сообщения, похожие на указанные ниже, которые свидетельствуют о том, что передача зоны прошла успешно.
named[31518]: transfer of 'example.com/IN' from 12.34.56.78#53: Transfer completed: 1 messages, 16 records, 886 bytes, 0.004 secs (221500 bytes/sec)
Дополнительная информация о передаче зоны.
Ведомый DNS-сервер повторно свяжется с главным, когда истечет период обновления в записи SOA. Если серийный номер на главном сервере окажется выше, чем на ведомом, будет начата процедура передачи зоны. Существует два типа передачи зоны:
- Полная передача зоны (AXFR) подразумевает отправку полной копии файла зоны.
- Инкрементальная передача зоны (IXFR) позволяет передавать лишь измененные записи DNS.
Оба способа передачи зоны функционируют через TCP-порт 53. В стандартном режиме BIND на подчиненном DNS-сервере инициирует запрос на инкрементальную передачу зоны, в то время как BIND на основном DNS-сервере разрешает такую передачу только для динамических зон.
Интервал передачи зоны играет ключевую роль в скорости обновления DNS-записей. Вместо того чтобы ожидать, когда ведомый DNS-сервер сам свяжется с главным, сервер BIND уведомит ведомый о внесенных изменениях в зону. Это может существенно ускорить процесс распространения изменений зоны в Интернете.
Зона обратной связи
Обратная зона включает в себя запись PTR, которая связывает IP-адрес с DNS-именем. Это соответствует записи A в DNS. Запись PTR часто требуется для почтовых серверов, чтобы успешно проходить антиспам-фильтры. Данная запись не относится к конкретному домену и управляется организацией, предоставляющей вам IP-адрес. Для создания записи PTR вам нужно воспользоваться панелью управления вашего хостинг-провайдера или обратиться к вашему интернет-провайдеру, поэтому я не буду описывать процесс создания обратных зон в BIND.
Изменение записи NS и добавление записи glue.
Теперь вам следует зайти на сайт вашего регистратора доменных имен для изменения записи NS вашего домена. Это необходимо для того, чтобы интернет-системы знали, что вы используете собственный DNS-сервер. Обычно в записях NS используются имена хостов, например, ns1.example.com и ns2.example.com.
name server 1: ns1.example.com name server 2: ns2.example.com
Если у вас есть доменное имя example.com и вы задействуете поддомены для основных DNS-серверов (ns1.example.com и ns2.example.com), вам необходимо добавить запись glue у вашего регистратора доменных имен. Это нужно для того, чтобы Интернет смог определить IP-адрес вашего DNS-сервера. Запись glue представляет собой запись типа A для ns1.example.com и ns2.example.com.
ns1.example.com IP-адрес-главного-сервера ns2.example.com IP-адрес-ведомого-сервера
Предоставленная информация будет передана оператору реестра, который управляет DNS-серверами TLD с помощью Протокола расширенного управления (EPP). Это необходимо для того, чтобы DNS-серверы TLD получили имя и IP-адреса авторитетных DNS-серверов вашего доменного имени. В зависимости от вашего регистратора доменных имен запись NS может обновляться сразу или же это может занять до 24 часов. Чтобы проверить, активна ли ваша новая запись NS, вы можете посетить сайт https://dnsmap.io.
Я продемонстрирую, как выполнить эту задачу на платформе NameCheap.
Чтобы войти в свою учетную запись на NameCheap, если вы приобрели доменное имя, перейдите в свою панель управления. В левой части экрана выберите раздел со списком доменов, а затем нажмите кнопку «Управлять» справа.

Выберите расширенный вариант DNS.

Прокрутите вниз по странице, и вы увидите раздел, посвященный вашему личному DNS-серверу. Нажмите на кнопку «Добавить NameServer», чтобы внести свои собственные серверы имен: ns1.example.com и ns2.example.com. Не забудьте указать IP-адреса ваших серверов имен.

После внесения имен ваших двух серверов нажмите кнопку поиска, чтобы убедиться, что они были добавлены успешно. Если все в порядке, записи клея появятся в нижней части этой страницы.

Теперь перейдите на вкладку «Домен» и настройте использование вашего собственного DNS-сервера.

В зависимости от того, какого регистратора доменных имен вы используете, обновление вашей NS-записи может произойти мгновенно или занять до суток. Для проверки активности вашей новой NS-записи вы можете посетить сайт https://dnsmap.io.
Когда записи glue и NS будут распространены в сети, ваши DNS-серверы начнут обрабатывать DNS-запросы для вашего домена. Проверить журнал запросов можно с помощью:
sudo journalctl - eu named
Вы также можете воспользоваться утилитой dig для проверки NS-записи вашего домена.
dig NS example.com
Если NS-запись и glue-запись уже распространены в Интернете, вы должны наблюдать ваши DNS-серверы в разделе ответов. Если же вы сталкиваетесь с ошибкой SERVFAIL, скорее всего, это вызвано тем, что UDP-порт 53 на ваших DNS-серверах закрыт.

Что следует учитывать
- Термин «главный DNS-сервер» подразумевает, что этот сервер содержит первичную версию файла зоны. Он не имеет более высокого приоритета в процессе разрешения DNS.
- При внесении изменений в файл зоны не забывайте обновлять номер серийного SOA.
Автоматическая перезагрузка службы Named.
Если по какой-либо причине ваш процесс с именем Named будет остановлен, вам потребуется выполнить следующую команду для его восстановления.
sudo systemctl restart named
Вместо того чтобы вводить эту команду вручную, можно настроить автоматическую перезагрузку сервиса Named, изменив файл системного сервиса named.service в systemd. Для того чтобы изменить стандартную конфигурацию systemd, создадим отдельный каталог.
sudo mkdir - p /etc/systemd/system/named.service.d/
После этого создайте документ в данной папке.
sudo nano /etc/systemd/system/named.service.d/restart.conf
Включите в файл следующие строки, чтобы обеспечить автоматическую перезагрузку Named через 5 секунд после выявления сбоя.
[Service] Restart=always RestartSec=5s
Сохраните файл и закройте его. После этого выполните перезагрузку systemd.
sudo systemctl daemon-reload
Чтобы удостовериться в этом, устраните Named с помощью:
sudo pkill named
После этого проверьте состояние Named. Вы увидите, что Named был перезапущен автоматически.
systemctl status named
Активация резолвера
BIND способен одновременно функционировать как авторитетный DNS-сервер для зоны и как DNS-резолвер. Рекомендуется разделять эти две функции на разные серверы. В этой статье мы отключили функцию резолвера в BIND. Если вы хотите активировать резолвер, следуйте инструкциям ниже.
Внесите изменения в конфигурационный файл BIND.
sudo nano /etc/named.conf
Отметьте следующую строку.
recursion no;
Измените no на yes.
recursion yes;
Затем отыщите строку allow-query.< localhost; >Вы можете включить дополнительные IP-адреса, как указано ниже, чтобы разрешить только доверенным клиентам отправлять рекурсивные запросы к вашему DNS-резолверу, тем самым предотвратив превращение вашего сервера в открытый резолвер.
allow-query < localhost; 12.34.56.78; >;
Измените 12.34.56.78 на свой собственный IP-адрес. После этого сохраните изменения и закройте файл. Убедитесь, что в вашем файле /etc/named.conf определение зоны включает следующую опцию, позволяющую Интернету запрашивать DNS-записи в вашей зоне.
allow-query < any; >;
После этого перезапустите BIND.
sudo systemctl restart named
Посетите сайт https://openresolver.com/, чтобы проверить, открыт ли ваш сервер BIND в качестве резолвера.
Заключение
На этом всё! Я надеюсь, что данный учебник был полезен для вас в настройке авторитетного DNS-сервера на CentOS 8/RHEL 8 с использованием BIND9. Как и прежде, если этот материал оказался для вас ценным, не забудьте подписаться на нашу бесплатную рассылку, чтобы получать больше советов и рекомендаций.

