Это руководство объясняет процесс настройки локального 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-серверами.
Содержание статьи
- 1 Почему стоит настроить собственный локальный DNS-резолвер
- 2 Настройка локального DNS-сервера на Ubuntu 24.04 с использованием BIND9
- 3 Настройки для локального DNS-резолвера
- 4 Конфигурация DNS-резолвера по умолчанию на сервере Ubuntu 24.04.
- 5 Конфигурация DNS-сервера для каждой ссылки в Ubuntu 24.04
- 6 Конфигурация DNS-резольвера по умолчанию на клиентских устройствах.
- 7 Как деактивировать IPv6 в BIND
- 8 Ошибка BIND SERVFAIL
- 9 Настройка максимального размера кэша для BIND
- 10 Заключение
Почему стоит настроить собственный локальный 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 на облачном сервере, это будет локальным для этого облачного сервера.
Настройка локального 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 он автоматически запускается. Для проверки его состояния используйте следующую команду:
systemctl status named
Если он не активирован, вы можете запустить его с помощью следующей команды:
sudo systemctl start named
Можно настроить автоматический запуск BIND при старте системы.
sudo systemctl enable named
Сервер BIND будет функционировать под учётной записью пользователя bind, созданного в процессе установки, и будет принимать запросы на TCP и UDP порту 53, что можно увидеть в следующей команде:
sudo ss - lnptu | grep named

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

Настройки для локального 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;

Сохраните файл и закройте его. После этого убедитесь в правильности синтаксиса конфигурационного файла.
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

Как видно, 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

Сохраните файл и закройте его. После этого перезапустите службу systemd-resolved.
sudo systemctl restart systemd-resolved
Теперь введите следующую команду, чтобы узнать, какой DNS-резольвер установлен по умолчанию.
resolvectl status

Теперь выполните 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.
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

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

