В данном руководстве описывается процесс настройки и запуска собственного авторитетного DNS-сервера на Ubuntu 22.04/20.04 с применением популярного программного обеспечения BIND 9.
Замечание: В данном руководстве представлен способ работы с помощью командной строки. Если вы предпочитаете изменять DNS-записи через веб-интерфейс, советую воспользоваться Webmin — бесплатной панелью управления сервером с открытым исходным кодом для настройки авторитетных DNS-серверов.
Содержание статьи
- 1 Авторитетный DNS-сервер
- 2 BIND (Berkeley Internet Name Domain) — это программное обеспечение
- 3 Условия, предваряющие процесс
- 4 Настройка надежного DNS-сервера с использованием BIND9 на Ubuntu 22.04 или 20.04
- 5 Настройка мастер-сервера для DNS.
- 6 Настройка резервного DNS-сервера
- 7 Дополнительная информация о передаче территории.
- 8 Обратная область
- 9 Изменение записи NS и создание glue-записи.
- 10 Необходимая информация
- 11 Применение символа подстановки в файле зоны BIND
- 12 Активирование резолвера
- 13 Заключение
Авторитетный 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 начинает работать автоматически. Вы можете проверить его текущее состояние с помощью:
systemctl status bind9
Если он не работает, активируйте его при помощи:
sudo systemctl start bind9
Активируйте автоматический запуск при старте операционной системы.
sudo systemctl enable named
Сервер BIND будет функционировать от имени пользователя bind, созданного в процессе установки, и будет принимать запросы на TCP и UDP порту 53. Это можно проверить, выполнив следующую команду:
sudo netstat - lnptu | grep named
Демон BIND известен как named. Это программа, функционирующая в фоновом режиме. Исполняемый файл named устанавливается вместе с пакетом bind9, а также существует еще один ключевой исполняемый файл — rndc, удаленный контроллер демона имен, который устанавливается с пакетом bind9utils. Rndc служит для перезагрузки, остановки и управления различными функциями демона BIND, а связь осуществляется через TCP-порт 953.
Например, мы можем узнать текущее состояние сервера 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; >;
Для отключения рекурсии достаточно добавить лишь строку 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
По умолчанию его внешний вид такой:
Вы можете заменить это на то вместо этого.
- Директива $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).
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 я не буду обсуждать.
Вы имеете возможность создать обратную зону в 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, зайдите в свою учетную запись на этом сервисе. В левой боковой панели выберите раздел со списком доменов, а затем нажмите кнопку «Управлять» в правом углу.
Выберите опцию «Расширенный DNS».
Прокрутите страницу вниз, и вы наткнетесь на раздел, посвященный персональному DNS-серверу. Нажмите на кнопку «Добавить NameServer», чтобы внести свои собственные серверы имен: ns1.example.com и ns2.example.com. Не забудьте указать IP-адреса ваших серверов имен.
После того как вы добавите два имени серверов, нажмите кнопку поиска, чтобы убедиться, что они были успешно добавлены. Если всё прошло успешно, записи о соединении отобразятся в нижней части этой страницы.
Теперь откройте вкладку «Домен» и выберите использование вашего собственного DNS-сервера.
Время распространения вашей записи 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.
Необходимая информация
- Основной 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. Если вам понравилась эта статья, не забудьте подписаться на нашу бесплатную рассылку, чтобы получать больше полезных советов и рекомендаций.