DNS - это распределённая база, которая переводит имена в адреса и обратно. Без неё пользователи и сервисы говорили бы IP-адресами, а не доменами. В этом уроке мы разберём, чем авторитетный сервер отличается от рекурсивного, как устроен named.conf у BIND 9, как поднять кэширующий резолвер, проверить конфиг до запуска и управлять демоном через rndc. Это фундамент для всего блока 207 на экзамене 202-450.

Как это работает
DNS-пространство - это дерево зон, делегированных от корня вниз. Когда клиент спрашивает адрес имени, запрос проходит по цепочке: корневые серверы, серверы TLD, серверы домена. Сервер бывает в двух принципиально разных ролях, и путать их - самая частая ошибка новичка.
Авторитетный сервер хранит зону и отвечает за неё окончательно. Его ответ помечен флагом AA (Authoritative Answer): он не гадает, он владелец данных. Рекурсивный (он же кэширующий) сервер сам ничего не хранит - он бегает по дереву от имени клиента, собирает ответ и кладёт его в кэш на время TTL. Один named может совмещать обе роли, но в 2026 это считается плохой практикой: авторитетный сервер в интернете не должен быть открыто рекурсивным, иначе он становится усилителем DDoS-атак.
Форвардер - это промежуточный вариант рекурсии. Вместо того чтобы самому ходить от корня, ваш сервер пересылает запрос вышестоящему резолверу (например, провайдера или 1.1.1.1) и просто ждёт готовый ответ. Это экономит трафик и ускоряет холодный кэш в небольших сетях.
Кэширование - сердце производительности DNS. Каждая запись живёт ровно TTL секунд, после чего считается протухшей и запрашивается заново. Поэтому при смене IP записи с большим TTL обновляются у клиентов медленно - это надо учитывать при миграциях.
Конфигурация BIND 9 живёт в named.conf. Файл состоит из секций-стейтментов: options задаёт глобальное поведение (каталоги, listen-on, recursion, forwarders), zone описывает каждую зону и её файл, а logging - журналирование. Управляющий канал rndc общается с демоном по TCP-порту 953, аутентификация - по общему ключу из rndc.key.
Команды и примеры
Пакеты и пути различаются по семействам.
Код: Выделить всё
# Debian 13 / Ubuntu 24.04
apt install bind9 bind9-utils bind9-dnsutils
# конфиг: /etc/bind/named.conf (+ named.conf.options, named.conf.local)
# юнит: named.service (алиас bind9.service)
# RHEL 10 / Fedora 41+
dnf install bind bind-utils
# конфиг: /etc/named.conf, зоны в /var/named/
# юнит: named.service
Код: Выделить всё
options {
directory "/var/named"; // в Debian: "/var/cache/bind"
listen-on port 53 { 127.0.0.1; 192.168.10.1; };
allow-query { localhost; 192.168.10.0/24; };
recursion yes;
allow-recursion { localhost; 192.168.10.0/24; };
dnssec-validation auto;
};
Код: Выделить всё
options {
forwarders { 1.1.1.1; 8.8.8.8; };
forward only; // only = только форвардер; first = форвардер, потом сам
recursion yes;
};
Код: Выделить всё
zone "example.lan" IN {
type primary; // синоним master
file "db.example.lan";
allow-transfer { 192.168.10.2; }; // адрес вторичного сервера
};
Код: Выделить всё
named-checkconf
named-checkconf -z # дополнительно загрузить и проверить все зоны
named-checkzone example.lan /var/named/db.example.lan
Код: Выделить всё
systemctl enable --now named
rndc status # сводка: число зон, рекурсия, аптайм
rndc reload # перечитать конфиг и зоны
rndc reload example.lan # перезагрузить одну зону
rndc flush # очистить весь кэш резолвера
rndc querylog on # включить лог запросов на лету
Код: Выделить всё
dig @127.0.0.1 example.lan SOA +norecurse
dig @127.0.0.1 cyberlake.ru A
Частые грабли
- Открытый рекурсивный резолвер в интернет. Без allow-recursion ваш сервер используют для DNS-амплификации. Рекурсию разрешайте только своим подсетям.
- Путаница ролей: ждёте флаг aa от рекурсивного сервера, который зону не держит. AA ставит только авторитетный.
- Забыли поднять serial в SOA после правки зоны - вторичные серверы не заберут обновление, AXFR не сработает.
- named-checkconf прошёл, а named не стартует. checkconf не всегда грузит зоны; запускайте с ключом -z и читайте journalctl -u named.
- Права и SELinux на RHEL: файлы зон вне /var/named или с чужим контекстом named_zone_t - демон не прочитает. Проверяйте ls -Z и restorecon.
- TTL и кэш: после смены записи старый ответ живёт у клиентов до конца TTL; rndc flush чистит только ваш кэш, не чужие.
- dnssec-validation auto без доступа к корню или с битыми часами даёт SERVFAIL - синхронизируйте время через chrony.
- Установите BIND из пакетов своего дистрибутива и найдите главный конфиг (Debian - /etc/bind, RHEL - /etc/named.conf).
- Настройте чистый кэширующий резолвер: recursion yes только для localhost и своей подсети, listen-on на 127.0.0.1.
- Проверьте конфиг командой named-checkconf -z, исправьте ошибки, если есть.
- Запустите named через systemctl enable --now named и убедитесь в работе через rndc status.
- Сделайте dig @127.0.0.1 на любой внешний домен дважды и сравните поле Query time - второй ответ из кэша должен быть быстрее.
- Включите rndc querylog on, повторите запрос и найдите его в journalctl -u named.
- Очистите кэш через rndc flush и снова замерьте Query time - он опять вырастет.
- Чем авторитетный ответ отличается от рекурсивного и какой флаг в выводе dig это показывает?
- Какие директивы в секции options ограничивают рекурсию только доверенными сетями?
- В чём разница между forward only и forward first?
- Что проверяет named-checkconf, а что named-checkzone, и почему первый может пройти при нерабочих зонах?
- По какому порту и как аутентифицируется rndc при связи с named?
- Почему открытый рекурсивный резолвер опасен и как это связано с DDoS?