Конфигурация авторитетного DNS-сервера BIND на Ubuntu 22.04 и 20.04

В данном руководстве описывается процесс настройки и запуска собственного авторитетного DNS-сервера на Ubuntu 22.04/20.04 с применением популярного программного обеспечения BIND 9.

Замечание: В данном руководстве представлен способ работы с помощью командной строки. Если вы предпочитаете изменять DNS-записи через веб-интерфейс, советую воспользоваться Webmin — бесплатной панелью управления сервером с открытым исходным кодом для настройки авторитетных DNS-серверов.

Авторитетный DNS-сервер

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

Авторитетный DNS-сервер служит для хранения записей DNS, используемых владельцами доменных имен. Он дает достоверные ответы DNS-резолверам, таким как 8.8.8.8 или 1.1.1.1, которые запрашивают эти записи от имени пользователей на компьютерах, смартфонах или планшетах.

BIND (Berkeley Internet Name Domain) — это программное обеспечение

BIND (Berkeley Internet Name Domain) — это многофункциональная и гибкая система для DNS с открытым исходным кодом, которая получила широкое распространение на платформах Unix/Linux благодаря своей надежности и отличному качеству. Она была изначально создана в Университете Калифорнии в Беркли, а в 1994 году управление проектом перешло к Internet Systems Consortium, Inc (ISC).

BIND может одновременно функционировать в качестве авторитетного DNS-сервера для определённой зоны и как DNS-резолвер. Резолвер, известный также как рекурсивный сервер имен, осуществляет рекурсивные запросы от локальных клиентов. Тем не менее, совмещение этих функций не всегда оптимально. Рекомендуется разделить эти роли на разные серверы.

В предыдущем материале я описал процесс настройки локального DNS-резолвера на Ubuntu 22.04/20.04. В данном руководстве мы рассмотрим, как установить BIND9 на Ubuntu 22.04/20.04 в качестве исключительно авторитетного DNS-сервера с отключенной функцией рекурсии.

Условия, предваряющие процесс

Для выполнения этого руководства вам потребуется уже зарегистрированное доменное имя. Я выбрал NameCheap для регистрации своего домена, так как у них доступные цены, и они пожизненно предлагают бесплатную защиту конфиденциальности whois.

Вам потребуется два сервера. Один из них будет выполнять функции мастер-DNS-сервера, а другой — слейв-DNS-сервера. Оптимально, если эти сервера будут расположены в разных географических локациях. В случае недоступности одного из DNS-серверов второй сможет продолжать обрабатывать DNS-запросы для вашего домена.

Для каждого сервера требуется всего 512 МБ оперативной памяти, и вот список хостинг-провайдеров, которых я могу порекомендовать. Я пользовался услугами всех из них.

  • Vultr: цены начинаются от $2.5 в месяц. Необходима кредитная карта. Вы можете зарегистрироваться на Vultr через мою реферальную ссылку и получить $50 в виде бесплатного кредита.
  • DigitalOcean: цены начинаются от $5 в месяц. Не нужна кредитная карта, доступен PayPal. Зарегистрируйтесь на DigitalOcean по моей реферальной ссылке и получите $50 в виде бесплатного кредита.

Когда вы приобретете два сервера, установите на них операционную систему Ubuntu и следуйте приведенным ниже указаниям.

Настройка надежного DNS-сервера с использованием BIND9 на Ubuntu 22.04 или 20.04

Необходимо выполнить указанные команды в этом разделе на обоих серверах.

Подключитесь к двум серверам с помощью SSH и выполните следующие команды для установки BIND 9 на Ubuntu 22.04/20.04 из стандартного репозитория. BIND 9 является текущей версией, в то время как BIND 10 уже не поддерживается.

sudo apt update sudo apt install bind9 bind9utils bind9-doc

Убедитесь в актуальности номера версии.

named - v

BIND 9.11.3-1ubuntu1.3 для Ubuntu (версии с расширенной поддержкой)

Чтобы узнать номер версии и параметры сборки, выполните следующее действие.

named - V

Версия BIND и параметры сборки

По умолчанию, после установки BIND начинает работать автоматически. Вы можете проверить его текущее состояние с помощью:

systemctl status bind9

Настройка сервера BIND 9 на Ubuntu 18.04.

Если он не работает, активируйте его при помощи:

sudo systemctl start bind9

Активируйте автоматический запуск при старте операционной системы.

sudo systemctl enable named

Сервер BIND будет функционировать от имени пользователя bind, созданного в процессе установки, и будет принимать запросы на TCP и UDP порту 53. Это можно проверить, выполнив следующую команду:

sudo netstat - lnptu | grep named

Установка BIND9 на Ubuntu 18.04

Демон BIND известен как named. Это программа, функционирующая в фоновом режиме. Исполняемый файл named устанавливается вместе с пакетом bind9, а также существует еще один ключевой исполняемый файл — rndc, удаленный контроллер демона имен, который устанавливается с пакетом bind9utils. Rndc служит для перезагрузки, остановки и управления различными функциями демона BIND, а связь осуществляется через TCP-порт 953.

Читайте также:  Создание имен файлов и папок с текущей датой и временем в PowerShell

Например, мы можем узнать текущее состояние сервера DNS 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

Сервер BIND9 на Ubuntu изначально предлагает рекурсивные DNS-услуги для локального хоста и устройств в локальной сети. При настройке авторитетного 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; >;

Настройка авторитетного DNS-сервера BIND9 на Ubuntu 18.04 LTS.

Для отключения рекурсии достаточно добавить лишь строку 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) определяет основные параметры зоны. Она является первой записью в 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 /etc/bind/db.example.com

По умолчанию его внешний вид такой:

Передача зон BIND9 на Ubuntu

Вы можете заменить это на то вместо этого.

файл основной зоны bind9

  • Директива $TTL устанавливает стандартное значение Time to Live (TTL) для зоны, определяющее период, в течение которого запись 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 для доменных имён, которые не существуют (NXDOMAIN).
Читайте также:  Выполнить команду и посмотреть её вывод в Linux

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

При использовании простого брандмауэра UFW, необходимо открыть порты TCP и UDP 53.

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

Настройка резервного 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 и будет принимать передачу зоны исключительно от доверенного IP-адреса.

Закройте и сохраните файл, после чего выполните команду для проверки наличия синтаксических ошибок в главном конфигурационном файле.

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.

При использовании простого брандмауэра (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-сервер вновь установит связь с основным, когда наступит время обновления в записи SOA. Если серийный номер на основном сервере окажется выше, чем на подчиненном, произойдет инициирование передачи зоны. Существует два вида передачи зоны:

  • Полная передача зоны (AXFR) предполагает, что осуществляется полная копия файла зоны.
  • Инкрементальная передача зоны (IXFR) позволяет отправлять только те DNS-записи, которые были изменены.

Оба варианта передачи зон задействуют TCP-порт 53. По умолчанию BIND на ведомом DNS-сервере инициирует запрос на инкрементальную передачу зоны, в то время как BIND на главном DNS-сервере разрешает такую передачу только для динамических зон.

Интервал передачи зоны играет ключевую роль в скорости обновления DNS-записей. Вместо того чтобы дожидаться, когда подчинённый DNS-сервер свяжется с основным, сервер BIND сам оповестит подчинённый о внесённых в зону изменениях. Такой подход позволяет значительно ускорить процесс распространения обновлений зоны в сети.

Обратная область

Обратная зона включает запись PTR, которая связывает IP-адрес с именем в DNS. Она аналогична записи A в системе DNS. Запись PTR часто требуется для почтовых серверов, чтобы успешно проходить антиспам-фильтры. Эта запись не относится к какому-либо домену. Для создания записи PTR необходимо воспользоваться панелью управления вашего хостинг-провайдера или обратиться к вашему интернет-провайдеру, поэтому создание обратных зон в BIND я не буду обсуждать.

Читайте также:  Установить английскую раскладку у клавиатуры в Linux

Вы имеете возможность создать обратную зону в BIND, однако для того чтобы она могла обрабатывать запросы PTR для вашего IP-адреса, потребуется обратиться к вашему хостинг-провайдеру или интернет-провайдеру с просьбой о делегировании DNS. Вероятнее всего, они отклонят вашу просьбу, поэтому более целесообразно попросить их добавить запись PTR.

Изменение записи 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, зайдите в свою учетную запись на этом сервисе. В левой боковой панели выберите раздел со списком доменов, а затем нажмите кнопку «Управлять» в правом углу.

персональные серверы имен namecheap

Выберите опцию «Расширенный DNS».

Расширенные настройки DNS на Namecheap.

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

Записи привязки Namecheap

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

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

пользовательская DNS-запись на namecheap

Время распространения вашей записи NS может варьироваться в зависимости от регистратора доменных имен: она может обновиться мгновенно или занять до 24 часов. Для проверки активации вашей новой записи NS вы можете воспользоваться сайтом https://dnsmap.io.

Когда записи NS и glue будут опубликованы в Интернете, ваши DNS-серверы начнут обрабатывать DNS-запросы для вашего доменного имени. Для проверки журнала запросов вы можете использовать:

sudo journalctl - eu bind9

Можно воспользоваться утилитой dig для проверки записи NS вашего доменного имени.

dig NS example.com

Если NS-запись и glue-запись были распространены по сети, ваши серверы имен должны отображаться в ответе. Если появляется ошибка SERVFAIL, скорее всего, это связано с тем, что на серверах имен не открыт UDP-порт 53.

Запись NS BIND возвращает ошибку servfail.

Необходимая информация

  • Основной DNS-сервер обозначает сервер, который содержит оригинальную копию файла зоны. Однако это не придаёт ему большего приоритета при обработке DNS-запросов.
  • При каждом внесении изменений в файл зоны не забывайте обновлять серийный номер SOA.

Применение символа подстановки в файле зоны BIND

Для того чтобы все поддомены указывали на один и тот же IP-адрес, можно воспользоваться подстановочным знаком. К примеру, приведённая ниже запись перенаправит все ваши поддомены на IP-адрес 1.2.3.4.

*.ваш-домен.com IN A 1.2.3.4

Активирование резолвера

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-сервера на Ubuntu с использованием BIND9. Если вам понравилась эта статья, не забудьте подписаться на нашу бесплатную рассылку, чтобы получать больше полезных советов и рекомендаций.