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

Это руководство объясняет процесс настройки локального DNS-резолвера на Ubuntu 24.04 с использованием популярного DNS-сервера BIND9. Резолвер DNS также известен под разными именами, некоторые из которых указаны ниже. Все они обозначают одно и то же понятие.

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

Важно отметить, что DNS-сервер может быть известен как сервер имен. Примеры DNS-резолверов включают 8.8.8.8 (публичный DNS от Google) и 1.1.1.1 (публичный DNS от Cloudflare). В операционной системе вашего компьютера также имеется резолвер, который называют частичным резолвером из-за его ограниченных функций. Частичный резолвер — это небольшой DNS-клиент на компьютере пользователя, обрабатывающий DNS-запросы от приложений, таких как Firefox, и перенаправляющий их к рекурсивному резолверу. Большинство резолверов способны кешировать DNS-ответы для повышения производительности, из-за чего их часто называют кеширующими DNS-серверами.

Почему стоит настроить собственный локальный DNS-резолвер

В большинстве случаев ваш компьютер или роутер применяет DNS-резолвер, предоставленный вашим интернет-провайдером для разрешения DNS-имен. А что, если настроить собственный DNS-резолвер?

  • Это может увеличить скорость DNS-запросов, так как локальный резолвер обрабатывает только ваши запросы и не отвечает на чужие, что значительно повышает вероятность получения ответов прямо из кеша резолвера. Также практически отсутствует задержка между вашим устройством и DNS-резолвером, что позволяет быстрее передавать запросы к корневым DNS-серверам.
  • Если вы администрируете почтовый сервер и применяете DNS черные списки (DNSBL) для борьбы со спамом, имеет смысл запустить собственный DNS-резолвер. Это необходимо, так как некоторые DNS черные списки, например URIBL, не принимают запросы от общедоступных DNS-резолверов.
  • Запуская собственный VPN-сервер на виртуальном частном сервере (VPS), рекомендуется также настроить DNS-резолвер на этом же VPS.
  • Возможно, вам будет интересно настроить собственный DNS-резолвер, если вас беспокоит сохранение вашей истории веб-серфинга на сторонних серверах.

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

Данное руководство описывает процесс настройки локального DNS-резолвера. Поскольку он предназначен для использования на локальном хосте или в локальной сети, необходимость в шифровании (DNS через TLS или DNS через HTTPS) отсутствует. В следующей статье будет рассмотрена конфигурация резолвера DoT или сервера DoH.

Подсказка: Понятие «локальный» не ограничивается только вашим домашним компьютером. Оно подразумевает, что DNS-резолвер функционирует на одном и том же сервере, что и DNS-клиент. Вы можете установить DNS-резолвер BIND на своем домашнем устройстве, и в этом случае он будет локальным для него. Аналогично, если вы установите DNS-резолвер BIND на облачном сервере, это будет локальным для этого облачного сервера.

Читайте также:  Как сгенерировать и проверить md5 контрольную сумму файла в Linux

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

BIND (Berkeley Internet Name Domain) представляет собой ПО для DNS-сервера с открытым исходным кодом, которое пользуется популярностью на Unix/Linux благодаря своей надежности и отличным характеристикам. Первоначально он был создан в UC Berkeley, а в 1994 году управление проектом было передано в Internet Systems Consortium, Inc (ISC).

Для установки BIND 9 на Ubuntu 24.04 из официального репозитория выполните следующую команду. Обратите внимание, что BIND 9 является актуальной версией, в то время как BIND 10 больше не поддерживается.

sudo apt update sudo apt install bind9 bind9utils bind9-doc bind9-host dnsutils

named - v

BIND 9.18.21-0ubuntu1 для Ubuntu (версия с долгосрочной поддержкой)

Для того чтобы узнать номер версии и характеристики сборки, выполните

named - V

номер версии BIND в Ubuntu и параметры сборки

После установки BIND он автоматически запускается. Для проверки его состояния используйте следующую команду:

systemctl status named

Если он не активирован, вы можете запустить его с помощью следующей команды:

sudo systemctl start named

Можно настроить автоматический запуск BIND при старте системы.

sudo systemctl enable named

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

sudo ss - lnptu | grep named

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

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

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

К примеру, можно проанализировать статус сервера имен BIND.

sudo rndc status

дистанционное управление демоном на Ubuntu

Настройки для локального DNS-резолвера

Директория /etc/bind/ включает в себя настройки для BIND.

  • named.conf — это главный файл конфигурации, который содержит настройки для трех других файлов.
  • db. root — это файл основных подсказок, который DNS-резолверы применяют для обращения к корневым DNS-серверам. Существует 13 групп корневых DNS-серверов, от a. root-servers.net до m. root-servers.net.
  • db.127 : файл обратного отображения IPv4 для локального хоста.
  • db. local: файл зоны прямого отображения для локального хоста в IPv4 и IPv6.
  • db. empty : файл зоны не содержит данных

Сервер BIND9 на Ubuntu изначально предлагает рекурсивные услуги только для локального хоста и клиентов внутри локальной сети. Запросы, поступающие извне, будут отвергнуты. Поэтому редактировать конфигурационные файлы не требуется. Тем не менее, чтобы ознакомить вас с настройками BIND 9, я покажу, как активировать рекурсивную службу.

Главный конфигурационный файл BIND, расположенный по адресу /etc/bind/named.conf, получает свои параметры из трех дополнительных файлов.

  • /etc/bind/named.conf.options
  • /etc/bind/named.conf.local
  • /etc/bind/named.conf.default-zones

Для активации рекурсивной службы необходимо внести изменения в первый файл.

sudo nano /etc/bind/named.conf.options

В разделе options внесите следующие строки. Подставьте свои локальные адреса сети вместо IP-адресов в директиве allow-recursion.

// скрыть номер версии от клиентов по соображениям безопасности. version "в настоящее время недоступен"; // по желанию - поведение по умолчанию BIND — рекурсия recursion yes; // предоставлять рекурсивную службу только доверенным клиентам allow-recursion < 127.0.0.1; 192.168.0.0/24; 10.10.10.0/24; >; // включить журнал запросов querylog yes;

включите сервис рекурсии в bind9

Сохраните файл и закройте его. После этого убедитесь в правильности синтаксиса конфигурационного файла.

Читайте также:  Дробные числа при делении в Linux

sudo named-checkconf

В случае успешного теста (что свидетельствует об отсутствии вывода) необходимо перезапустить BIND9.

sudo systemctl restart named

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

sudo ufw allow in from 192.168.0.0/24 to any port 53

Эта операция позволит открыть TCP и UDP порт 53 для локальной сети 192.168.0.0/24. После этого с другого устройства в той же сети можно выполнить команду для запроса A-записи google.com. Не забудьте заменить 192.168.0.102 на IP-адрес вашего BIND резолвера.

dig A google.com @192.168.0.102

Теперь на резолвере BIND проверьте логи запросов, используя следующую команду.

sudo journalctl - eu named

В этом выводе представлено последнее сообщение из журнала службы bind9. Я обнаружил следующую запись, указывающую на то, что DNS-запрос для A-записи google.com поступил с порта 57806 от адреса 192.168.0.103.

named[1162]: client @0x7f4d2406f0f0 192.168.0.103#57806 (google.com): query: google.com IN A +E(0)K (192.168.0.102)

Конфигурация DNS-резолвера по умолчанию на сервере Ubuntu 24.04.

Systemd-resolved предлагает стуб-резолвер в Ubuntu 24.04. Как уже упоминалось ранее, стуб-резолвер представляет собой компактный DNS-клиент, который работает на устройстве конечного пользователя. Он принимает DNS-запросы от приложений, таких как Firefox, и передает их на рекурсивный резолвер.

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

resolvectl status

локальный DNS-резолвер в Ubuntu

Как видно, BIND не установлен в качестве значения по умолчанию. Если вы введете следующую команду на сервере BIND,

dig A facebook.com

Данный DNS-запрос отсутствует в журнале BIND. Вам необходимо явно указать команде dig использовать BIND.

dig A facebook.com @127.0.0.1

Для того чтобы настроить BIND в качестве основного разрешателя, откройте конфигурационный файл systemd-resolved.

sudo nano /etc/systemd/resolved.conf

В разделе [Resolve] введите следующую строку. Это позволит настроить глобальный DNS-сервер для вашего сервера.

DNS=127.0.0.1

связать DNS резолвер

Сохраните файл и закройте его. После этого перезапустите службу systemd-resolved.

sudo systemctl restart systemd-resolved

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

resolvectl status

установить DNS-резолвер по умолчанию в Ubuntu 24.04

Теперь выполните DNS-запрос без указания адреса 127.0.0.1.

dig A facebook.com

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

Конфигурация DNS-сервера для каждой ссылки в Ubuntu 24.04

Также возможно настроить DNS-сервер для каждой ссылки, что позволит изменить глобальный DNS-сервер. Существует два метода для настройки DNS-серверов для каждой ссылки:

  • через службу systemd-resolved
  • через netplan можно настроить сетевые параметры.

systemd-resolved

Список документов в директории /etc/systemd/network/.

ls /etc/systemd/network/

05-eth0.network 99-default. link

У меня есть два файла для настройки ссылок. Файл 05-eth0.network предназначен для моего основного сетевого интерфейса, и именно его я собираюсь отредактировать.

sudo nano /etc/systemd/network/05-eth0.network

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

Отключите стандартный DNS и запись домена, затем внесите свою индивидуальную запись DNS.

DNS=127.0.0.1

Сохраните файл и закройте его. После этого перезапустите службы systemd-resolved и systemd-networkd.

Читайте также:  Установка Musique Player на Ubuntu 16.04 и 16.10

sudo systemctl restart systemd-resolved systemd-networkd

netplan

Некоторые серверы Ubuntu могут применять netplan для настройки сетевых соединений для каждой отдельной ссылки. В таком случае потребуется настроить DNS-сервер в. yaml файле, расположенном в каталоге /etc/netplan/. Вот перечень файлов в этом каталоге.

ls /etc/netplan/

01-netcfg. yaml

Вот почему я вношу изменения в этот документ.

sudo nano /etc/netplan/01-netcfg. yaml

Настройте адрес DNS-сервера в разделе имён серверов.

nameservers: search: [ недопустимо ] addresses: - 127.0.0.1

Настройка DNS-сервера для каждой ссылки на Ubuntu

Сохраните файл и закройте его. После этого внесите изменения.

sudo netplan apply

Обратите внимание: если вы сталкиваетесь с указанным сообщением об ошибке, это означает, что netplan не в состоянии обработать файл конфигурации.

Неверный YAML в /etc/netplan/01-netcfg. yaml непоследовательный отступ

Необходимо устранить несоответствующий отступ и повторно выполнить команду sudo netplan apply.

Конфигурация DNS-резольвера по умолчанию на клиентских устройствах.

На рабочем столе Ubuntu вы можете воспользоваться описанными выше рекомендациями для настройки DNS-резольвера по умолчанию, однако не забудьте заменить 127.0.0.1 на IP-адрес вашего BIND-сервера. Инструкции по установке DNS-резольвера на MacOS и Windows доступны в сети.

Как деактивировать IPv6 в BIND

Если ваша сеть не поддерживает IPv6, рекомендуется отключить его в BIND, иначе в журнале BIND будет накапливаться множество ошибок, связанных с IPv6, как указано ниже.

сеть недоступна для разрешения 'mirrors. fedoraproject. org/A/IN': 2001:4178:2:1269:dead:beef:cafe:fed5#53 сеть недоступна для разрешения 'mirrors. fedoraproject. org/AAAA/IN': 2001:4178:2:1269:dead:beef:cafe:fed5#53 сеть недоступна для разрешения 'mirrors. fedoraproject. org/A/IN': 2610:28:3090:3001:dead:beef:cafe:fed5#53 сеть недоступна для разрешения 'mirrors. fedoraproject. org/AAAA/IN': 2610:28:3090:3001:dead:beef:cafe:fed5#53

Чтобы деактивировать IPv6 в BIND на Ubuntu, необходимо отредактировать файл /etc/default/bind9.

sudo nano /etc/default/named

Добавьте параметр “-4” в раздел OPTIONS.

OPTIONS="-u bind -4"

Закройте и сохраните файл, после чего перезапустите BIND — готово.

sudo systemctl restart named

Ошибка BIND SERVFAIL

Если ваш DNS-резольвер BIND не справляется с обработкой запросов (SERVFAIL), и в журнале BIND появляется следующая строка.

dnssec: предупреждение: managed-keys-zone: Невозможно получить набор DNSKEY '.': время ожидания истекло

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

Настройка максимального размера кэша для BIND

BIND способен сохранять DNS-запросы в кэше, что позволяет ускорить процесс разрешения DNS для пользователей. BIND предполагает, что используется отдельный DNS-резольвер, без запуска других веб-сервисов на данном сервере. По умолчанию размер кэша (определяемый параметром max-cache-size) составляет 90% от общей оперативной памяти для оптимальной работы. При старте BIND можно заметить подобную строку в журнале (sudo journalctl — eu bind9).

none:100: 'max-cache-size 90%' - установка на 7165MB (из 7961MB)

Имейте в виду, что BIND не начнет сразу использовать 90% вашей оперативной памяти. При небольшом количестве DNS-запросов программа задействует минимальный объем памяти, так как кэшировать просто нечего. Однако при увеличении числа запросов BIND будет расходовать больше оперативной памяти для хранения данных в кэше.

Если у вас ограничен объём оперативной памяти, возможно, вы не захотите, чтобы BIND использовал до 90% этой памяти для кэширования. Для этого измените настройки в файле конфигурации BIND /etc/bind/named.conf.options.

sudo nano /etc/bind/named.conf.options

Включите следующую директиву в раздел options. Замените 50% на значение, которое вам больше подходит.

max-cache-size 50%;

Перезапустите BIND, чтобы изменения начали действовать.

sudo systemctl restart named

Заключение

Надеюсь, что данный учебник оказался полезным для вас при настройке локального DNS-резольвера на Ubuntu 24.04 с использованием BIND9. Если вы нашли эту статью информативной, не забудьте подписаться на нашу бесплатную рассылку, чтобы получать больше советов и рекомендаций.