В этом уроке вы узнаете, как установить и настроить собственный сервер имен на Debian 11/10 с использованием популярного программного обеспечения BIND 9.
Примечание: В этом руководстве описан способ работы через командную строку. Если вы предпочитаете изменять DNS-записи через веб-интерфейс, рекомендую воспользоваться Webmin — бесплатной и открытой панелью управления сервером для настройки авторитетных DNS-серверов.
Содержание статьи
- 1 Авторитетный DNS-сервер — это сервер, который содержит официальные записи доменных имен и предоставляет точную информацию о них, отвечая на запросы с достоверными данными.
- 2 BIND
- 3 Условия, которые необходимо выполнить.
- 4 Конфигурация авторитетного DNS-сервера на Debian 11/10 с использованием BIND9.
- 5 Конфигурация главного DNS-сервера.
- 6 Настройка резервного DNS-сервера.
- 7 Дополнительная информация о трансферте зоны.
- 8 Зона обратной связи.
- 9 Модификация записи NS и установка записи Glue.
- 10 Что важно учесть
- 11 Активация резольвера
- 12 Завершение
Авторитетный DNS-сервер — это сервер, который содержит официальные записи доменных имен и предоставляет точную информацию о них, отвечая на запросы с достоверными данными.
Если у вас есть доменное имя, и вы хотите, чтобы запросы на его разрешение обрабатывал ваш собственный DNS-сервер, а не сервер вашего регистратора, вам потребуется настроить авторитетный DNS-сервер.
Владельцы доменов используют авторитетный DNS-сервер для хранения записей DNS. Он отвечает на запросы резолверов DNS (таких как 8.8.8.8 или 1.1.1.1), которые действуют от лица конечных пользователей, работающих на компьютерах, смартфонах или планшетах.
BIND
BIND (Berkeley Internet Name Domain) — это свободное, гибкое и полнофункциональное программное обеспечение для работы с DNS, которое широко применяется на Unix/Linux системах благодаря своей надежности и высокому качеству. Первоначально разработанное в Университете Калифорнии в Беркли, с 1994 года его развитие было передано организации Internet Systems Consortium, Inc (ISC).
BIND способен одновременно выполнять функции авторитетного DNS-сервера для зоны и резолвера DNS. Резолвер, также известный как рекурсивный сервер имен, обрабатывает рекурсивные DNS-запросы для пользователей. Тем не менее, объединение этих функций не является лучшей практикой. Оптимальным решением будет разделение этих ролей на разные серверы.
В одной из статей я уже описывал, как настроить локальный DNS-резолвер на Debian 11/10. В этом же руководстве рассмотрим процесс настройки BIND9 на Debian 11/10 в качестве авторитетного DNS-сервера с отключённой рекурсией.
Условия, которые необходимо выполнить.
Чтобы следовать этому руководству, вам необходимо заранее приобрести доменное имя. Я выбрал регистрацию своего домена на NameCheap, поскольку там низкие цены и бесплатная защита конфиденциальности whois на протяжении всей жизни.
Для работы вам понадобятся два сервера: один будет выполнять функции основного DNS-сервера, а второй — резервного. Оптимально, если они расположены в разных физических локациях. В случае сбоя одного из серверов второй сможет продолжать обрабатывать DNS-запросы для вашего домена.
Каждому серверу требуется лишь 512 МБ оперативной памяти, и вот список хостинг-провайдеров, которые я могу порекомендовать. Я сам пользовался услугами всех из них.
- Vultr: Услуги начинаются от $2.5 в месяц. Для регистрации необходима кредитная карта. Создайте учетную запись на Vultr по моей реферальной ссылке и получите $50 в виде бесплатного кредита.
- DigitalOcean: Цена стартует от $5 в месяц. Для регистрации не нужна кредитная карта. Доступна оплата через Paypal. Вы можете зарегистрироваться на DigitalOcean по моей реферальной ссылке и получить $50 в виде бесплатного кредита.
После приобретения двух серверов установите на них Debian 11 или 10 и выполните следующие инструкции.
Имейте в виду, что для установки программного обеспечения на Debian необходимы права root. Вы можете добавить sudo перед командой или воспользоваться командой su -, чтобы переключиться на пользователя root.
Конфигурация авторитетного DNS-сервера на Debian 11/10 с использованием BIND9.
Необходимо произвести выполнение команд из этого раздела на двух серверах.
Подключитесь к обоим серверам с помощью SSH и выполните следующие команды для установки BIND 9 на систему Debian 11/10 из стандартных репозиториев. BIND 9 является актуальной версией, в то время как BIND 10 — это закрытый проект.
sudo apt update sudo apt install bind9 bind9utils bind9-doc
Убедитесь в актуальности версии.
named - v
BIND 9.11.5-P4-5.1-Debian (издание с расширенной поддержкой)
Для того чтобы удостовериться в номере версии и характеристиках сборки, введите команду.
named - V

После установки BIND он автоматически запускается по умолчанию. Чтобы проверить его статус, используйте команду:
systemctl status bind9
●bind9.service - Служба DNS BIND Загружено: успешно загружено (/lib/systemd/system/bind9.service; включено; настройки производителя: en) Активно:активно функционирует с Вс 2019-07-14 10:27:56 UTC; 4 мин 6 с назад Документация: man:named(8) Основной PID: 1481 (named) Задачи: 4 (ограничение: 1149) Память: 13.7M CGroup: /system. slice/bind9.service └─1481 /usr/sbin/named - u bind
Если команда выше не завершилась сразу, нажмите клавишу Q.
Если служба не функционирует, попробуйте её запустить с помощью:
sudo systemctl start bind9
Включите автоматический запуск при старте системы.
sudo systemctl enable bind9
Сервер BIND будет функционировать от имени пользователя bind, который создается в процессе установки. Он будет прослушивать порты TCP и UDP на 53-м порту, что можно проверить, выполнив следующую команду:
sudo netstat - lnptu | grep named

Демон BIND называется named. (Демон — это программа, функционирующая в фоновом режиме.) Бинарный файл named устанавливается с помощью пакета bind9, а также существует еще один значимый бинарный файл: rndc, который служит для управления удаленным демоном имен и устанавливается с пакетом bind9utils. Файл rndc используется для перезагрузки и остановки, а также для управления различными аспектами работы демона BIND. Связь с ним осуществляется через TCP-порт 953.
К примеру, можно произвести проверку состояния сервера имен BIND.
sudo rndc status

Файл конфигурации BIND, расположенный по адресу /etc/bind/named.conf, содержит настройки, которые загружаются из трех дополнительных файлов.
- /etc/bind/named.conf.options
- /etc/bind/named.conf.local
- /etc/bind/named.conf.default-zones
По умолчанию в Debian сервер BIND9 предоставляет рекурсивные услуги только для localhost и клиентов внутри локальной сети. Поскольку мы настраиваем авторитетный DNS-сервер, следует отключить рекурсию. Для этого необходимо отредактировать файл /etc/bind/named.conf.options.
sudo nano /etc/bind/named.conf.options
Включите указанные строки в раздел options.
// скрыть номер версии от клиентов по соображениям безопасности. version "not currently available"; // отключить рекурсию на авторитетном DNS-сервере. recursion no; // включить журнал запросов querylog yes; // запретить передачу зоны allow-transfer < none; >;

Технически, чтобы отключить рекурсию, достаточно включить строку
recursion no;
, однако стоит также добавить три других директивы. После внесения изменений сохраните файл и закройте его, а затем перезапустите BIND.
sudo systemctl restart bind9
Конфигурация главного DNS-сервера.
Выберите один из двух серверов в роли основного DNS-сервера. Обозначим его как ns1.example.com.
Главный DNS-сервер хранит основную версию файла зоны. Все изменения в DNS-записях осуществляются именно на этом сервере. Домен может включать одну или несколько DNS-зон. Каждая из зон располагает файлом зоны, в котором содержатся все DNS-записи этой зоны. В данной статье мы будем считать, что вы хотите использовать единую DNS-зону для управления всеми записями, относящимися к вашему доменному имени.
Файл /etc/bind/named.conf.default-zones устанавливает корневую зону и зону для localhost. Для добавления зоны вашего доменного имени необходимо изменить файл /etc/bind/named.conf.local.
sudo nano /etc/bind/named.conf.local
Включите указанные строки в данный файл. Поменяйте example.com на ваше собственное доменное имя и замените 12.34.56.78 на IP-адрес резервного DNS-сервера.
zone "example.com" < type master; file "/etc/bind/db.example.com< any; >разрешить передачу< 12.34.56.78; >; >;
В данной конфигурации мы определили новую зону, воспользовавшись директивой zone, и указали, что она является основной. Файл зоны располагается по пути /etc/bind/db. example.com, где мы будем добавлять записи DNS. Передача зоны будет разрешена исключительно для вторичного DNS-сервера.
Вместо того чтобы создавать файл зоны с нуля, можно воспользоваться шаблоном. Для этого скопируйте данные из db. empty в новый файл.
sudo cp /etc/bind/db. empty /etc/bind/db.example.com
Файл зоны способен включать три разновидности записей:
- Комментарии начинаются с точки с запятой (;).
- Указания: начинаются с символа доллара ($).
- Ресурсные записи: иначе называемые записями DNS.
Обычный файл зоны включает в себя несколько категорий DNS-записей.
- Запись SOA (Start of Authority) задает основные параметры зоны. Она является первой в зоне файла и является обязательной.
- Запись NS (Name Server) указывает на серверы, ответственные за хранение DNS-записей и обработку запросов для определённого доменного имени. В зоне должна содержаться как минимум две NS-записи.
- Запись MX (Mail Exchanger) определяет, какие серверы отвечают за прием электронной почты для данного доменного имени.
- Запись типа A (Address) преобразует DNS-имена в адреса IPv4.
- AAAA-запись: Конвертирует DNS-имена в адреса формата IPv6.
- CNAME-запись (Canonical Name) служит для создания альтернативных названий для DNS-имен.
- SPF, DKIM, DMARC и другие подобные механизмы.
Теперь приступим к редактированию файла зоны.
sudo nano /etc/bind/db.example.com
По стандарту он представляется следующим образом:

Вы можете преобразовать это следующим образом.

- Директива $TTL устанавливает стандартное значение времени жизни (Time to Live) для зоны, которое определяет, как долго DNS-запись может оставаться в кэше DNS-резолвера. Эта директива является обязательной. Время указывается в секундах.
- Директива $ORIGIN устанавливает основной домен.
- Доменные имена обязаны завершаться точкой (.), обозначающей корневой домен. Когда доменное имя оканчивается на точку, это считается полностью квалифицированным доменным именем (FQDN).
- Символ @ указывает на основной домен.
- IN — это класс DNS, который представляет собой Интернет. Хотя есть и другие классы DNS, они применяются довольно редко.
Первой записью в файле зоны является запись SOA (Start of Authority). Она включает в себя следующую информацию:
- Главный DNS-сервер.
- Электронный адрес для администратора зоны обычно соответствует стандарту RFC 2142, который предлагает использовать hostmaster@example.com. В файле зоны этот адрес записывается как hostmaster. example.com, так как символ @ имеет специфическое значение в этом контексте.
- Зона имеет серийный номер, который служит для контроля изменений через вторичный DNS-сервер. Согласно установленному соглашению, серийный номер оформляется в формате даты: yyyymmddss, где yyyy обозначает четырехзначный год, mm — месяц, dd — день, а ss — порядковый номер изменений в пределах одного дня. При внесении изменений в файл зоны необходимо обновлять серийный номер.
- Значение обновления. Как только достигается порог обновления, резервный DNS-сервер попытается получить запись SOA с главного DNS-сервера. При увеличении серийного номера начинается процесс передачи зоны.
- Параметр повторной попытки. Указывает временной интервал в секундах для повторной попытки подключения, если резервный DNS-сервер не может связаться с основным DNS-сервером.
- Срок действия: Если вторичный DNS-сервер не устанавливает связь с основным сервером в указанный период, он прекращает обрабатывать DNS-запросы для данной зоны.
- Отрицательное кэширование TTL: Устанавливает срок действия DNS-ответов для несуществующих доменных имен (NXDOMAIN).
Записи формата TXT обычно помещаются в двойные кавычки. При добавлении записи DKIM также необходимо обернуть значение в скобки.
Сохраните и закройте документ. После этого введите следующую команду, чтобы убедиться, что в основном конфигурационном файле нет синтаксических ошибок. Если вывод отсутствует, значит, ошибок нет.
sudo named-checkconf
После этого проверьте синтаксис файлов зон.
sudo named-checkzone example.com /etc/bind/db.example.com
Если в файле зон обнаружены синтаксические ошибки, их следует устранить, иначе загрузка этой зоны не состоится. Сообщение ниже подтверждает, что синтаксических ошибок нет.
zone example.com/IN: loaded serial 2019011503 OK
После этого перезапустите BIND9.
sudo systemctl restart bind9
Если вы применяете uncomplicated firewall (UFW), откройте порты 53 для TCP и UDP.
sudo ufw allow 53/tcp sudo ufw allow 53/udp
Если вы напрямую работаете с файрволом iptables, выполните эту команду.
sudo iptables - A INPUT - p tcp --dport 53 - j ACCEPT sudo iptables - A INPUT - p udp --dport 53 - j ACCEPT
Настройка резервного DNS-сервера.
Теперь в качестве второго DNS-сервера мы задействуем другой сервер, который будет именоваться ns2.example.com.
Сначала внесите изменения в файл named.conf.local.
sudo nano /etc/bind/named.conf.local
Включите новую область, как указано ниже. Подмените 12.34.56.78 на IP-адрес главного DNS-сервера.
zone "example.com" < type slave; file "db.example.com< any; >Мастера< 12.34.56.78; >; >;
В указанной конфигурации мы определили, что данный сервер является вторичным DNS для зоны example.com и будет получать данные о зоне только от основного DNS сервера.
Сохраните изменения и закройте документ. После этого выполните следующую команду для проверки наличия синтаксических ошибок в основном файле конфигурации.
sudo named-checkconf
Если ошибок не обнаружено, перезапустите BIND9.
sudo systemctl restart bind9
Файл зоны на резервном DNS сервере загружается через механизм передачи зоны, предназначенный для синхронизации обновлений DNS записей с основного DNS сервера. После перезапуска BIND9 процесс передачи зоны инициируется сразу. Для проверки журнала BIND9 используйте следующую команду.
sudo journalctl - eu bind9
Вы можете наблюдать сообщения, схожие с приведёнными ниже, что свидетельствует о успешной передаче зоны.
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)
Файл зоны будет размещен по адресу /var/cache/bind/db. example.com на резервном DNS сервере.
Если вы применяете базовый брандмауэр (UFW), откройте порты 53 для TCP и UDP.
sudo ufw allow 53/tcp sudo ufw allow 53/udp
Если вы напрямую работаете с брандмауэром iptables, введите следующую команду.
sudo iptables - A INPUT - p tcp --dport 53 - j ACCEPT sudo iptables - A INPUT - p udp --dprot 53 - j ACCEPT
Дополнительная информация о трансферте зоны.
Сервер-слейв вновь установит связь с мастер-сервером, когда наступит время обновления в записи SOA. Если серийный номер на мастер-сервере окажется выше, чем на слейв-сервере, начнется процесс передачи зоны. Существует два вида передачи зон:
- Передача всей зоны (AXFR): Передается полная копия файла зоны.
- Инкрементальная передача зоны (IXFR) позволяет передавать лишь измененные DNS-записи.
Оба метода передачи зон применяют TCP порт 53. По умолчанию BIND на слейв DNS сервере будет запрашивать инкрементальную передачу зоны, а BIND на мастер DNS сервере разрешит такую передачу только в случае, если зона является динамической.
Интервал передачи зоны играет ключевую роль в скорости обновления записей DNS. Вместо того чтобы дожидаться подключения slave DNS сервера, BIND на master сервере уведомляет slave о внесенных изменениях в зоне. Это позволяет существенно сократить время, необходимое для распространения изменений зоны в сети.
Зона обратной связи.
Обратная зона включает запись PTR, связывающую IP-адрес с DNS-именем. Это соответствует записи A в DNS. Запись PTR зачастую требуется для успешного прохождения почтовыми серверами фильтров спама. Эта запись не относится к домену. Чтобы создать запись 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 и вы используете поддомены ns1.example.com и ns2.example.com в качестве авторитетных DNS-серверов, необходимо создать запись Glue у вашего регистратора доменов. Это позволит Интернету определить IP-адрес ваших DNS-серверов. Запись Glue представляет собой A-запись для ns1.example.com и ns2.example.com.
ns1.example.com IP-адрес-master-сервера ns2.example.com IP-адрес-slave-сервера
Данная информация будет передана оператору реестра, который управляет DNS-серверами зоны верхнего уровня через Extensible Provisioning Protocol (EPP). Это необходимо для того, чтобы серверы DNS верхнего уровня узнали имя и IP-адреса авторитетных DNS-серверов вашего домена. Время распространения вашей записи NS может варьироваться в зависимости от регистратора: она может обновиться мгновенно или занять до 24 часов. Чтобы проверить активность новой записи NS, вы можете посетить https://dnsmap.io.
Я продемонстрирую вам, как выполнить эту задачу на NameCheap.
Если вы приобрели доменное имя на платформе NameCheap, зайдите в свой аккаунт. В левой боковой панели выберите раздел с доменами и нажмите кнопку «Управление» в правом верхнем углу.

Выберите дополнительные серверы DNS.

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

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

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

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

Что важно учесть
- Термин «главный DNS-сервер» указывает на то, что данный сервер содержит основную версию файла зоны. Он не имеет повышенного статуса в процессе разрешения DNS.
- При внесении изменений в файл зоны не забывайте регулярно обновлять серийный номер SOA.
Активация резольвера
BIND способен одновременно выполнять функции авторитетного DNS-сервера для определенной зоны и DNS-резольвера. Рекомендуется разделять эти две роли, используя разные устройства, и в данной статье мы отключили функцию резольвера в BIND. Если вы все же хотите активировать резольвер, ознакомьтесь с инструкциями ниже.
Измените файл настройки BIND.
sudo nano /etc/bind/named.conf.options
Найдите указанные строки.
// отключить рекурсию на авторитетном DNS-сервере. recursion no;
Измените настройки так, чтобы лишь проверенные IP-адреса имели возможность отправлять рекурсивные запросы вашему DNS-резольверу, что предотвратит превращение вашего сервера в открытый резольвер.
// разрешить рекурсию только для доверенных клиентов. recursion yes; allow-query < localhost; 12.34.56.78; >;
Подставьте вместо 12.34.56.78 ваш личный IP-адрес. После этого сохраните изменения и закройте файл. Убедитесь, что в файле /etc/bind/named.conf.local определение вашей зоны включает следующую опцию, чтобы интернет мог запрашивать DNS-записи вашей зоны.
allow-query < any; >;
После этого перезапустите BIND.
sudo systemctl restart bind9
Посетите сайт https://openresolver.com/, чтобы проверить, открыт ли ваш сервер BIND как резольвер.
Завершение
Вот и всё! Надеюсь, этот руководящий материал помог вам установить авторитетный DNS-сервер на Debian 11/10 с использованием BIND9. Как всегда, если этот пост оказался для вас полезным, не забудьте подписаться на нашу бесплатную рассылку, чтобы получать ещё больше советов и трюков.

