В данном руководстве будет описано, как установить локальный DNS-резолвер на Debian, применяя популярное программное обеспечение BIND9 DNS. Существует множество синонимов для DNS-резолвера, несколько из которых представлены ниже. Все они обозначают одно и то же.
- полноценный резолвер (в отличие от stub-резолвера)
- DNS-рекурсор
- Сервер DNS с функцией рекурсии.
- Рекурсивный DNS-резолвер
DNS-сервер может быть известен также как сервер имен. Примеры DNS-резолверов включают 8.8.8.8 (общественный сервер от Google) и 1.1.1.1 (общественный сервер от Cloudflare). На вашем компьютере в операционной системе тоже есть резолвер, называемый stub резолвером, из-за его ограниченных функций. Этот stub резолвер является небольшим DNS-клиентом, который получает запросы от приложений, таких как браузер Firefox, и передает их рекурсивному резолверу. Почти все резолверы могут кэшировать ответы на DNS-запросы для улучшения производительности, из-за чего их также называют кэширующими DNS-серверами.
Содержание статьи
- 1 Зачем нужно настроить собственный DNS-резолвер?
- 2 Установка BIND9 на операционной системе Debian.
- 3 Настройки для локального DNS-резолвера.
- 4 Конфигурация DNS-резолвера по умолчанию на сервере Debian
- 5 Настройка DNS-резолвера по умолчанию на клиентских устройствах.
- 6 Как деактивировать IPv6 в BIND
- 7 BIND выдаёт ошибку SERVFAIL.
- 8 Разорванная связь доверия
- 9 Автоматический перезапуск службы BIND
- 10 Параметр max-cache-size в системе BIND
- 11 Заключение
Зачем нужно настроить собственный DNS-резолвер?
Как правило, компьютер или роутер обращается к DNS-резолверу, предоставленному вашим интернет-провайдером, для преобразования доменных имен в IP-адреса. Установка собственного локального DNS-резолвера способна повысить скорость этих запросов, так как:
- Локальный DNS-резолвер обрабатывает исключительно ваши DNS-запросы, не реагируя на запросы от других пользователей, что увеличивает вероятность получения ответа непосредственно из кэша резолвера.
- Задержки в сети между вашим устройством и DNS-резолвером практически отсутствуют, что ускоряет отправку DNS-запросов к корневым серверам.
При настройке почтового сервера и использовании DNSBL для фильтрации спама, рекомендуется настроить локальный DNS-резолвер, чтобы ускорить обработку DNS-запросов. Если у вас есть VPN-сервер, работающий на VPS, полезно также установить DNS-резолвер на этот же сервер.
Возможно, вам будет интересно запустить собственный DNS-резолвер, если вас беспокоит, что история ваших интернет-запросов сохраняется на удаленном сервере.
Если у вас есть веб-сайт и вы хотите, чтобы ваш DNS-сервер отвечал за разрешение имен для вашего домена, вместо того чтобы полагаться на DNS-сервер вашего регистратора, вам необходимо настроить авторитативный DNS-сервер. Это отличается от работы DNS-резолвера. BIND может выполнять функции авторитативного DNS-сервера и DNS-резолвера одновременно, однако предпочтительно разделять эти роли, размещая их на различных серверах. В данном руководстве описывается процесс настройки локального DNS-резолвера, который будет использоваться в пределах локальной сети или на локальном хосте, поэтому нет необходимости в шифровании (DNS через TLS или DNS через HTTPS). В будущих статьях будет рассмотрена настройка серверов DoT и DoH.
Имейте в виду, что для установки программного обеспечения на Debian необходимо иметь права администратора. Вы можете либо добавить sudo перед командой, либо воспользоваться командой su — для перехода на пользователя root.
Установка BIND9 на операционной системе Debian.
BIND (Berkeley Internet Name Domain) — это открытое программное обеспечение для DNS-серверов, которое получило широкое распространение на системах Unix/Linux благодаря своей надежности и качеству. Разработка этого ПО началась в Университете Калифорнии в Беркли, а в 1994 году права на его дальнейшее развитие были переданы в Internet Systems Consortium, Inc (ISC).
Выполните следующую команду для установки BIND 9 на Debian из официального репозитория. BIND 9 является последней версией, так как разработка BIND 10 была прекращена.
sudo apt update sudo apt install bind9 bind9utils bind9-doc bind9-host dnsutils
Убедитесь в правильности данных о версии.
sudo named - v
BIND 9.11.5-P4-5.1 для Debian (версия с долгосрочной поддержкой)
Чтобы получить информацию о номере версии и характеристиках сборки, выполните
sudo named - V

После установки BIND он автоматически активируется. Для проверки его статуса используйте следующую команду:
systemctl status bind9
Совет: Если указанная команда не выполнится мгновенно, нажмите клавишу Q.
Если он не активирован, активируйте его с помощью следующей команды:
sudo systemctl start bind9
Активируйте автоматический запуск при старте системы.
sudo systemctl enable bind9
Сервер BIND будет запущен под пользователем bind, который создается в процессе установки, и будет отслеживать порты TCP и UDP 53. Это можно проверить, используя следующую команду:
sudo netstat - lnptu | grep named

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

Настройки для локального DNS-резолвера.
Каталог /etc/bind/ содержит настройки для BIND.
- named.conf: это главный файл настройки, который содержит параметры для трёх других файлов.
- db.127 : файл зоны для обратного сопоставления IPv4, относящийся к localhost.
- db. local : файл зоны прямиком для отображения адресов IPv4 и IPv6 локального хоста.
- db. empty: файл зоны не содержит данных.
Пакет bind9 в Debian не включает файл db. root; вместо этого он применяет файл root hints, который располагается по адресу /usr/share/dns/root. hints. Этот файл root hints необходим резолверам DNS для обращения к корневым DNS-серверам. В общей сложности существует 13 групп корневых DNS-серверов, начиная с a. root-servers.net и заканчивая m. root-servers.net.
По умолчанию сервер BIND9 на Debian осуществляет рекурсивные запросы только для localhost и устройств в локальной сети. Запросы извне будут отвергнуты. Таким образом, редактировать конфигурационные файлы не требуется. Чтобы ознакомить вас с настройками 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 "not currently available"; // необязательно - поведение по умолчанию 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 bind9
Если на сервере BIND установлен брандмауэр, необходимо разрешить доступ к порту 53, чтобы клиенты в локальной сети могли отправлять DNS-запросы. В случае использования брандмауэра UFW выполните следующую команду.
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 bind9
Данная команда выведет последние записи журнала для службы bind9. В этих записях можно обнаружить строку, указывающую на получение DNS-запроса для A-записи google.com с порта 57806 от IP-адреса 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-резолвера по умолчанию на сервере Debian
На сервере BIND необходимо настроить 127.0.0.1 в качестве стандартного DNS-резолвера. Текущий DNS-резолвер на Debian можно проверить, используя следующую команду.
cat /etc/resolv.conf
# Динамический файл resolv.conf(5) для резолвера glibc resolver(3), сгенерированный resolvconf(8) # НЕ РЕДАКТИРУЙТЕ ЭТОТ ФАЙЛ ВРУЧНУЮ -- ВАШИ ИЗМЕНЕНИЯ БУДУТ ПЕРЕЗАПИСАНЫ nameserver 2001:19f0:300:1704::6 nameserver 108.61.10.10
Пакет bind9 в Debian включает в себя системную службу bind9-resolvconf.service, которая позволяет настроить BIND в качестве основного DNS-резолвера на сервере Debian. Служба отключена по умолчанию, поэтому необходимо её активировать и настроить автозапуск при загрузке системы.
sudo systemctl start bind9-resolvconf sudo systemctl enable bind9-resolvconf
Теперь вы можете вновь ознакомиться с содержимым файла /etc/resolv.conf.Как вы можете заметить, 127.0.0.1 (BIND) теперь стал DNS-резолвером по умолчанию в системе Debian.

Если DNS-резолвер вашей системы не настроен на 127.0.0.1, возможно, у вас не установлен бинарный файл resolvconf, что приводит к неработоспособности службы bind9-resolvconf.Для решения проблемы вам нужно установить пакет resolvconf и перезапустить соответствующую службу.
sudo apt install resolvconf sudo systemctl restart bind9-resolvconf
Настройка DNS-резолвера по умолчанию на клиентских устройствах.
Теперь вы можете сконфигурировать другие компьютеры в вашей локальной сети для работы с сервером BIND в качестве DNS-резолвера. Для пользователей Windows и MacOS рекомендуется поискать в Google инструкции по установке DNS-резолвера по умолчанию. В данном руководстве я расскажу, как установить DNS-резолвер на настольных системах с Linux. Этот подход подходит для любых дистрибутивов Linux, которые используют NetworkManager.
Нажмите на иконку Network Manager на рабочем столе вашей системы Linux, чтобы открыть раздел «Редактировать соединения». (В некоторых дистрибутивах Linux может потребоваться щелчок правой кнопкой мыши по значку Network Manager.)

После этого выберите активное соединение и кликните на иконку в виде шестеренки для внесения изменений в данное подключение.

Откройте вкладку настроек IPv4 и измените способ получения адреса с Автоматический (DHCP) на Автоматический (DHCP) только для адресов. Это позволит избежать получения DNS-адреса от вашего маршрутизатора на системе Ubuntu. Затем введите IP-адрес DNS-сервера. В данном случае я указываю IP-адрес сервера BIND, который находится в моей локальной сети.

Примените изменения и перезапустите NetworkManager, чтобы они начали действовать.
sudo systemctl restart NetworkManager
После повторного подключения нажмите на значок Network Manager и выберите сведения о соединении. Теперь ваш компьютер с Linux будет использовать ваш DNS-сервер BIND.

Как деактивировать IPv6 в BIND
Если в вашей сети не применяется IPv6, разумно будет отключить его в BIND. В противном случае в журнале BIND будет накапливаться множество ошибок, связанных с IPv6, таких как:
network unreachable resolving 'mirrors. fedoraproject. org/A/IN': 2001:4178:2:1269:dead:beef:cafe:fed5#53 network unreachable resolving 'mirrors. fedoraproject. org/AAAA/IN': 2001:4178:2:1269:dead:beef:cafe:fed5#53 network unreachable resolving 'mirrors. fedoraproject. org/A/IN': 2610:28:3090:3001:dead:beef:cafe:fed5#53 network unreachable resolving 'mirrors. fedoraproject. org/AAAA/IN': 2610:28:3090:3001:dead:beef:cafe:fed5#53
Для деактивации IPv6 в BIND на Ubuntu, достаточно отредактировать файл /etc/default/bind9.
sudo nano /etc/default/bind9
Включите -4 в параметры OPTIONS.
OPTIONS="-u bind -4"
Сохраните файл и закройте его. После этого перезапустите BIND, и все будет готово.
sudo systemctl restart bind9
BIND выдаёт ошибку SERVFAIL.
Если ваш DNS-резолвер BIND не может обрабатывать DNS-запросы (SERVFAIL), и в журнале BIND возникает следующая запись.
dnssec: warning: managed-keys-zone: Unable to fetch DNSKEY set '.': timed out
Скорее всего, проблема заключается в отсутствии функциональной IPv6-связи на вашем сервере. У меня была аналогичная ситуация с одним из серверов. Я полагал, что IPv6 работает нормально, но неожиданно связь перестала функционировать по непонятным причинам. Как только я отключил IPv6 в BIND, DNS-разрешение вновь стало работать.
Разорванная связь доверия
Если в журнале BIND появилась указанная ошибка, скорее всего, это связано с некорректным временем на вашем сервере.
Aug 06 02:16:13 bookworm named[962]: broken trust chain resolving '1.debian. pool. ntp. org/AAAA/IN': 10.0.0.254#53 Aug 06 02:16:14 bookworm named[962]: validating youtube-ui. l.google.com/A: bad cache hit (google.com/DS) Aug 06 02:16:14 bookworm named[962]: broken trust chain resolving 'youtube-ui. l.google.com/A/IN': 10.0.0.254#53 Aug 06 02:16:15 bookworm named[962]: validating youtube-ui. l.google.com/A: bad cache hit (google.com/DS) Aug 06 02:16:15 bookworm named[962]: broken trust chain resolving 'youtube-ui. l.google.com/A/IN': 10.0.0.254#53
Воспользуйтесь приведёнными ниже указаниями для настройки часового пояса и системного времени.
- Как изменить часовой пояс и установить системное время в Linux
Автоматический перезапуск службы BIND
В случае, если процесс Bind по какой-либо причине остановится, необходимо выполнить следующую команду для его повторного запуска.
sudo systemctl restart bind9
Вместо ручного ввода команды мы можем организовать автоматический перезапуск Bind, изменив настройки системной службы named.service в systemd. Для переопределения стандартных параметров службы systemd создадим отдельную папку.
sudo mkdir - p /etc/systemd/system/bind9.service.d/
После этого создайте файл в указанной папке.
sudo nano /etc/systemd/system/bind9.service.d/restart.conf
Вставьте в файл указанные строки, чтобы обеспечить автоматический перезапуск Bind через 5 секунд после выявления сбоя.
[Service] Restart=always RestartSec=5s
Сохраните изменения и закройте документ. После этого перезапустите systemd.
sudo systemctl daemon-reload
Для проверки эффективности этого решения завершите процесс Bind с помощью команды:
sudo pkill named
После этого проверьте состояние Bind. Вы заметите, что он перезапустился автоматически.
systemctl status bind9
Параметр max-cache-size в системе BIND
BIND способен кэшировать результаты DNS-запросов на сервере, что способствует более быстрому поиску DNS для пользователей. Эта система предполагает использование выделенного DNS-резолвера, что означает отсутствие других веб-сервисов на данном хосте. По умолчанию размер кэша (устанавливаемый параметром max-cache-size) составляет 90% от общего объема оперативной памяти, что обеспечивает оптимальную производительность. При запуске BIND в журнале (sudo journalctl — eu bind9) можно увидеть соответствующую строку.
none:100: 'max-cache-size 90%' - setting to 7165MB (out of 7961MB)
Имейте в виду, что BIND не задействует 90% вашей оперативной памяти сразу. При обработке нескольких DNS-запросов он использует лишь небольшую часть памяти, так как кэшировать нечего. Однако при большом количестве запросов BIND может значительно увеличить потребление оперативной памяти для хранения DNS-кэша.
Если у вас ограниченный объем оперативной памяти, возможно, вам не стоит позволять 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 bind9
Заключение
Надеюсь, этот руководство способствовало успешной настройке локального DNS-резольвера на Debian с использованием BIND9. Если вам понравилась эта статья, не забудьте подписаться на нашу бесплатную рассылку, чтобы получать больше советов и рекомендаций.

