Настройка DNS-резолвера на Debian с помощью BIND9

В данном руководстве будет описано, как установить локальный 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-серверами.

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

Как правило, компьютер или роутер обращается к DNS-резолверу, предоставленному вашим интернет-провайдером, для преобразования доменных имен в IP-адреса. Установка собственного локального DNS-резолвера способна повысить скорость этих запросов, так как:

  1. Локальный DNS-резолвер обрабатывает исключительно ваши DNS-запросы, не реагируя на запросы от других пользователей, что увеличивает вероятность получения ответа непосредственно из кэша резолвера.
  2. Задержки в сети между вашим устройством и 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 была прекращена.

Читайте также:  Настройка репликации Master-Slave для MariaDB на Ubuntu 18.04 и 20.04

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

Debian 10 Buster с BIND9.

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

systemctl status bind9

Совет: Если указанная команда не выполнится мгновенно, нажмите клавишу Q.

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

sudo systemctl start bind9

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

sudo systemctl enable bind9

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

sudo netstat - lnptu | grep named

Настройка DNS-резольвера BIND на Debian 10.

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

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

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

sudo rndc status

Debian 10 Buster: настройка кэширующего DNS-сервера BIND.

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

Установите DNS-рекурсор bind9 на Debian 10 Buster.

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

sudo named-checkconf

Если тест прошел успешно (что подтверждается отсутствием вывода), выполните перезапуск BIND9.

sudo systemctl restart bind9

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

Читайте также:  Установка и настройка SoftEther VPN сервера на Ubuntu 22.04/20.04

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-сервера на Debian 10 Buster

Если 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.)

network-manager-change-DNS-server

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

Сервер DNS на базе BIND9

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

привязка локального dns-сервера к локальной сети

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

sudo systemctl restart NetworkManager

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

изменить dns-сервер в Linux

Как деактивировать 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.

Читайте также:  Настройка реле SMTP Postfix на Ubuntu с использованием Sendinblue

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