Зоны DNS: создание и сопровождение [207.2]

Рейтинг: 79.6% · 15 голосов
Курс LPIC-2 (201-450 и 202-450): емкостное планирование, ядро, хранилище и RAID/LVM, продвинутая сеть, DNS/BIND, Apache/Nginx, Samba/NFS, DHCP/LDAP, почта, безопасность и VPN.
Ответить
Аватара пользователя
Sergey_Sysadmin
Сообщения: 134
Зарегистрирован: 11 май 2026, 05:31

Зоны DNS: создание и сопровождение [207.2]

Сообщение Sergey_Sysadmin »

Оглавление курса (41)
  1. Введение в LPIC-2 и уровень инженера
  2. Измерение и устранение проблем с ресурсами [200.1]
  3. Прогнозирование потребности в ресурсах
  4. Компоненты ядра Linux [201.1]
  5. Сборка ядра из исходников [201.2]
  6. Управление модулями ядра в рантайме [201.3]
  7. Кастомизация запуска системы [202.1]
  8. Восстановление системы [202.2]
  9. Альтернативные загрузчики [202.3]
  10. Работа с файловой системой Linux [203.1]
  11. Обслуживание файловых систем [203.2]
  12. Создание и настройка опций ФС [203.3]
  13. Программный RAID [204.1]
  14. Тюнинг доступа к устройствам хранения [204.2]
  15. Менеджер логических томов LVM [204.3]
  16. Базовая конфигурация сети [205.1]
  17. Продвинутая конфигурация сети [205.2]
  18. Диагностика сетевых проблем [205.3]
  19. Сборка и установка программ из исходников [206.1]
  20. Резервное копирование [206.2]
  21. Оповещение пользователей о событиях
  22. DNS-сервер BIND: базовая настройка [207.1]
  23. Зоны DNS: создание и сопровождение [207.2] (вы здесь)
  24. Безопасность DNS-сервера [207.3]
  25. Веб-сервер Apache: базовая настройка [208.1]
  26. Apache и HTTPS [208.2]
  27. Кэширующий прокси Squid [208.3]
  28. Веб-сервер и обратный прокси Nginx [208.4]
  29. Файловый сервер Samba [209.1]
  30. Файловый сервер NFS [209.2]
  31. DHCP-сервер [210.1]
  32. Аутентификация PAM и SSSD [210.2]
  33. Использование LDAP-клиента
  34. Сервер OpenLDAP [210.4]
  35. Почтовый сервер Postfix [211.1]
  36. Управление доставкой почты и Sieve [211.2]
  37. Доступ к почтовым ящикам: Dovecot [211.3]
  38. Linux как маршрутизатор и фильтр [212.1]
  39. FTP-серверы [212.2]
  40. SSH углублённо [212.3]
  41. Безопасность, IDS и VPN [212.4 + 212.5]
Урок 22. Зоны DNS: создание и сопровождение [207.2]

В прошлом уроке мы подняли named и заставили его отвечать. Теперь задача инженера - наполнить сервер собственными данными: описать домен в виде зонного файла, корректно сопровождать его и не сломать резолвинг при каждом редактировании. В этом уроке разбираем формат зонного файла построчно, основные типы записей (SOA, NS, A, AAAA, MX, CNAME, PTR, TXT, SRV), прямые и обратные зоны, дисциплину serial и TTL, а также проверку и безопасную перезагрузку зоны.

Изображение

Как это работает

Зона - это часть пространства имён DNS, за которую отвечает конкретный авторитетный сервер. Физически зона живёт в текстовом зонном файле в формате RFC 1035. named читает этот файл при старте или перезагрузке и держит записи в памяти, отвечая на запросы из неё.

Каждая строка зонного файла - это ресурсная запись (RR). Полный вид: имя, TTL, класс (почти всегда IN), тип, данные. Если имя не оканчивается точкой, named дописывает к нему имя зоны (origin) - это источник большинства ошибок новичков. Пустое имя в начале строки означает повтор предыдущего имени.

Сердце зоны - запись SOA (Start of Authority). Она задаёт основной NS, почту администратора (точка вместо @), и пять чисел: serial, refresh, retry, expire, minimum. Serial - версия зоны: подчинённые серверы (slave) сравнивают свой serial с мастеровым и тянут зону через AXFR/IXFR только если число выросло. Если забыть увеличить serial после правки - slave останется со старыми данными, и это классический баг в продакшене.

TTL - сколько секунд резолверы по всему миру держат ответ в кэше. Большой TTL разгружает сервер, но замедляет распространение изменений. Перед миграцией адреса TTL заранее снижают (например до 300), а после стабилизации возвращают.

Прямая зона переводит имя в адрес (A, AAAA). Обратная зона делает наоборот - по IP возвращает имя через запись PTR, и живёт в специальном псевдодомене in-addr.arpa (IPv4) или ip6.arpa (IPv6). Обратная зона нужна для почты, логов и SSH-проверок, и она отдельная от прямой - синхронность между ними держит только администратор.

Команды и примеры

Прямая зона example.lab. Обратите внимание на $ORIGIN, $TTL и точки в конце FQDN.

Код: Выделить всё

$TTL 3600
$ORIGIN example.lab.
@   IN  SOA ns1.example.lab. admin.example.lab. (
            2026061401  ; serial YYYYMMDDnn
            3600        ; refresh
            900         ; retry
            1209600     ; expire
            300 )       ; minimum (negative TTL)
@       IN  NS    ns1.example.lab.
@       IN  NS    ns2.example.lab.
@       IN  MX 10 mail.example.lab.
@       IN  A     192.0.2.10
@       IN  AAAA  2001:db8::10
ns1     IN  A     192.0.2.1
ns2     IN  A     192.0.2.2
mail    IN  A     192.0.2.20
www     IN  CNAME @
_sip._tcp IN SRV 10 5 5060 sip.example.lab.
example.lab. IN TXT "v=spf1 mx -all"
Обратная зона для 192.0.2.0/24. Имя зоны - 2.0.192.in-addr.arpa, последний октет идёт слева.

Код: Выделить всё

$TTL 3600
$ORIGIN 2.0.192.in-addr.arpa.
@   IN  SOA ns1.example.lab. admin.example.lab. (
            2026061401 3600 900 1209600 300 )
@   IN  NS  ns1.example.lab.
1   IN  PTR ns1.example.lab.
10  IN  PTR example.lab.
20  IN  PTR mail.example.lab.
Подключение зон в конфиге named. Пути и расположение разнятся.

Debian 13 / Ubuntu 24.04 (пакет bind9, зоны в /var/lib/bind или /etc/bind, описания в named.conf.local):

Код: Выделить всё

zone "example.lab" {
    type master;
    file "/etc/bind/db.example.lab";
};
zone "2.0.192.in-addr.arpa" {
    type master;
    file "/etc/bind/db.192.0.2";
};
RHEL 10 / Fedora 41+ (пакет bind, зоны в /var/named, описания в /etc/named.conf):

Код: Выделить всё

zone "example.lab" IN {
    type master;
    file "example.lab.zone";
};
Проверка зоны до перезагрузки - обязательный шаг. named-checkzone принимает имя зоны и файл:

Код: Выделить всё

# Debian
named-checkzone example.lab /etc/bind/db.example.lab
# RHEL
named-checkzone example.lab /var/named/example.lab.zone
# обратная зона
named-checkzone 2.0.192.in-addr.arpa /var/named/2.0.192.rev
Вывод OK с подтверждением serial - зона валидна. Конфиг целиком проверяет named-checkconf.

Перезагрузка без рестарта демона делается через rndc:

Код: Выделить всё

rndc reload                 # перечитать всё
rndc reload example.lab     # только одну зону
rndc retransfer example.lab # slave: принудительно перетянуть
rndc zonestatus example.lab # состояние и serial
Проверка ответами через dig (а не ping):

Код: Выделить всё

dig @127.0.0.1 www.example.lab A +short
dig @127.0.0.1 example.lab MX
dig @127.0.0.1 -x 192.0.2.10 +short   # обратный запрос PTR
dig @127.0.0.1 example.lab SOA +multiline
Делегирование поддомена. В родительской зоне ставят NS на серверы дочерней зоны и glue-запись A, если NS-имя лежит внутри делегируемого поддомена:

Код: Выделить всё

sub      IN  NS  ns1.sub.example.lab.
ns1.sub  IN  A   192.0.2.53     ; glue
Частые грабли
  • Забыли точку в конце FQDN - named дописывает origin, и ns1.example.lab. превращается в ns1.example.lab.example.lab. Проверяйте named-checkzone, он это ловит.
  • Не увеличили serial после правки - slave не обновляется, dig на мастере показывает новое, а на slave старое. Заведите дисциплину YYYYMMDDnn.
  • CNAME на вершине зоны (apex) запрещён стандартом: нельзя сделать @ IN CNAME. На MX, NS и на сам apex CNAME тоже ставить нельзя.
  • PTR указывает на CNAME или на несуществующее имя - почтовые серверы и логи будут ругаться. PTR ведёт только на каноническое A-имя.
  • Поправили только прямую зону, забыли обратную - прямой и обратный резолвинг разъезжаются.
  • rndc reload без named-checkzone: битый файл, named отвергает зону и продолжает отдавать старую копию (или ничего). Всегда проверяйте до reload.
  • Слишком большой serial или формат не по возрастанию (откатили дату) - slave решит, что зона не новее, и не обновится.
Мини-лаба
  • Создайте прямую зону lab.local с записями SOA, двумя NS, A для хоста web и MX на mail.lab.local.
  • Создайте обратную зону для вашей подсети /24 с PTR на web и mail.
  • Подключите обе зоны в named.conf.local (Debian) или named.conf (RHEL), укажите type master и пути к файлам.
  • Прогоните named-checkconf и named-checkzone по обеим зонам, исправьте ошибки до состояния OK.
  • Выполните rndc reload и проверьте dig @127.0.0.1 web.lab.local A и dig -x по IP веба.
  • Измените A-запись web, увеличьте serial, перезагрузите зону и убедитесь через rndc zonestatus, что serial вырос.
  • Добавьте делегирование поддомена dev.lab.local с NS и glue, проверьте named-checkzone.
Контрольные вопросы
  • За что отвечает каждое из пяти чисел в SOA и какое из них слейв сравнивает при решении тянуть ли зону?
  • Почему нельзя поставить CNAME на вершину зоны и на имя в MX?
  • Как формируется имя обратной зоны для сети 10.20.30.0/24 и в каком порядке идут октеты?
  • Что произойдёт, если отредактировать зону, но не тронуть serial, и как это проявится на slave?
  • Зачем при делегировании поддомена иногда нужна glue-запись и когда она обязательна?
  • Чем named-checkzone отличается от named-checkconf и почему запускать его надо до rndc reload?
👍6 ❤️2 🔥2 😄 🤔2
Аватара пользователя
galla
Сообщения: 1
Зарегистрирован: 14 май 2026, 18:30

Re: Зоны DNS: создание и сопровождение [207.2]

Сообщение galla »

Долго не мог понять почему slave отдает старые адреса, а оказалось забыл бампнуть serial. Теперь правлю зону строго через шаблон с датой, иначе точно забуду.
👍2 ❤️1 🔥 😄 🤔1
Аватара пользователя
lutz
Сообщения: 1
Зарегистрирован: 23 май 2026, 19:36

Re: Зоны DNS: создание и сопровождение [207.2]

Сообщение lutz »

А obратную зону обязательно делать руками синхронно с прямой? Нет ли способа чтобы PTR подтягивался автоматом из A, или это только скриптом снаружи?
👍2 ❤️2 🔥 😄 🤔
Ответить
← Предыдущая глава
DNS-сервер BIND: базовая настройка [207.1]
Следующая глава →
Безопасность DNS-сервера [207.3]

Все главы курса «LPIC-2: инженер Linux (201 + 202)»

Поделиться темой: ✈ Telegram VK
  • Похожие темы

Вернуться в «LPIC-2: инженер Linux»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость