BIND9 — один из старейших и самых распространённых DNS-серверов. Для своего домена он нужен, когда DNS-хостинг неудобен, требуется собственный API, split-horizon или просто полный контроль над зоной. Ниже — минимальная авторитативная конфигурация: без рекурсии, с проверкой зоны, тестами через dig и защитой от нежелательной передачи зоны.

Когда нужен авторитативный сервер

Авторитативный сервер отвечает только за свои зоны и не должен обслуживать запросы всего интернета как открытый резолвер. Рекурсию отключите: иначе сервер быстро найдут и начнут использовать для усиления атак. Для домашней сети резолвером может быть Unbound или dnsmasq, а BIND пусть держит зону домена. Такое разделение ролей проще защищать и диагностировать.

Как устроена зона

Зона — это часть пространства имён, за которую сервер отвечает. В файле зоны SOA хранит серийный номер, таймеры обновления и адрес ответственного. NS указывает на серверы имён, A и AAAA — на адреса, MX — на почтовый хост, CNAME — на псевдоним. Все имена внутри зоны записываются относительно её вершины, а внешние — полностью, с точкой на конце.

Установка и проверка портов

В Debian и Ubuntu пакет называется bind9. Утилиты named-checkconf и named-checkzone входят в bind9-utils, документация — в bind9-doc. После установки служба уже запущена с конфигурацией по умолчанию, её нужно заменить. Сразу проверьте, кто слушает 53-й порт: на нём может оказаться systemd-resolved.

sudo apt update
sudo apt install bind9 bind9-utils bind9-doc
sudo systemctl status named --no-pager
sudo ss -lntup | grep :53

Конфигурация named.conf

Основные файлы лежат в /etc/bind: named.conf, named.conf.options и named.conf.local. В options задайте адреса прослушивания, запрет рекурсии и минимальные ответы. В named.conf.local опишите зону. Адрес 203.0.113.10 взят из диапазона для документации — замените его на свой.

options {
    directory "/var/cache/bind";
    recursion no;
    allow-query { any; };
    listen-on port 53 { 127.0.0.1; 203.0.113.10; };
    listen-on-v6 { none; };
    minimal-responses yes;
};

zone "example.com" {
    type primary;
    file "/etc/bind/zones/db.example.com";
    allow-transfer { none; };
};

Файл зоны

Файл зоны начинается с TTL, SOA и NS. Serial меняйте при каждом изменении, иначе вторичные серверы не заметят правку. Для одной машины хватит A и AAAA; MX и TXT добавляйте по необходимости. Не забывайте про точку в конце полных имён — это самая частая ошибка новичков.

$TTL 3600
@   IN SOA ns1.example.com. admin.example.com. (
        2026110501 ; serial
        3600       ; refresh
        900        ; retry
        1209600    ; expire
        300 )      ; minimum
@       IN NS    ns1.example.com.
ns1     IN A     203.0.113.10
www     IN A     203.0.113.10
mail    IN A     203.0.113.10
@       IN MX    10 mail.example.com.
@       IN TXT   "v=spf1 mx -all"

Вторичный сервер и передача зоны

Один сервер — точка отказа. Вторичный BIND забирает копию зоны по AXFR и отвечает, если основной недоступен. Передачу стоит ограничить адресом второго сервера или TSIG-ключом, иначе зону сможет выгрузить кто угодно. Ключ генерируется утилитой tsig-keygen, подключается через include и прописывается в конфигурациях обеих сторон; для небольшой инсталляции достаточно allow-transfer с IP-адресом.

sudo tsig-keygen -a hmac-sha256 transfer-key | sudo tee /etc/bind/transfer.key
sudo named-checkconf
sudo rndc reload
dig @203.0.113.10 example.com AXFR

Проверка и перезагрузка

Перед перезагрузкой проверьте синтаксис конфигурации и саму зону. named-checkzone ловит пропущенную точку, неверный serial и конфликтующие записи. Перезагружайте зону через rndc, а не перезапускайте службу без нужды: так меньше риск оборвать ответы.

sudo named-checkconf
sudo named-checkzone example.com /etc/bind/zones/db.example.com
sudo rndc reload example.com
sudo journalctl -u named -n 30 --no-pager

Тесты через dig

Проверяйте ответы с самого сервера и снаружи. Ключ +norecurse показывает, что сервер отвечает как авторитативный, а не ходит в интернет. Запрос AXFR должен завершиться отказом, если передача зоны не настроена. Если ответ пустой, сравните имя зоны и адрес прослушивания.

dig @127.0.0.1 example.com SOA +short
dig +norecurse @203.0.113.10 www.example.com A
dig @203.0.113.10 example.com AXFR
dig +trace example.com NS

Делегирование и firewall

В панели регистратора укажите ns1.example.com и его IP как glue-запись. Если домен уже делегирован, изменения NS расходятся от нескольких часов до суток. На сервере откройте 53/tcp и 53/udp, а 953/tcp оставьте только для localhost: это управляющий канал rndc. Если BIND не стартует и в журнале есть ошибка занятого порта, проверьте владельца через ss: это может быть systemd-resolved. Отключите stub-резолвер или слушайте только внешний адрес.

Типичные ошибки

Самая частая — пропущенная точка в конце имени: сервер допишет домен и создаст запись не там. Вторая — BIND слушает только localhost, поэтому снаружи ответа нет. Третья — забытый serial, из-за которого вторичный сервер живёт со старой копией. Четвёртая — закрытый брандмауэром 53-й порт. Проверяйте каждую гипотезу отдельной командой, а не перезапуском всего сервиса.

DNSSEC и обслуживание

DNSSEC подписывает зону и защищает ответы от подмены. Для одного домена это полезно, но добавляет работу с ключами и регулярную переподпись. Начинайте без DNSSEC, добейтесь стабильных ответов, и только потом включайте подпись, если регистратор и выбранная схема это поддерживают. Следите за обновлениями BIND: сервер смотрит в интернет и должен быть пропатчен. Не включайте рекурсию на авторитативном сервере и ограничьте передачу зоны.

Мониторинг и резервные копии

Минимальный мониторинг — периодическая проверка ответа SOA и алерт при смене кода. Конфигурацию и файлы зон храните в Git: тогда ошибку можно откатить одной командой. Не редактируйте зону сразу на рабочем сервере без копии. Раз в месяц проверяйте, что серийный номер растёт, а вторичный сервер отдаёт ту же версию. Файлы зон должны принадлежать root и группе bind, без права записи для посторонних. Логи смотрите через journalctl, а не только в текстовых файлах.

Чек-лист администратора

  • Рекурсия выключена, зона отвечает только за свой домен.
  • Serial увеличивается при каждом изменении.
  • named-checkconf и named-checkzone проходят без ошибок.
  • AXFR закрыт, порт 953 доступен только локально.
  • NS и glue-записи совпадают с реальным IP сервера.

Итог

BIND9 даёт полный контроль над DNS своего домена, но требует дисциплины: проверять конфигурацию, следить за serial и не открывать рекурсию всему интернету. Начните с одной зоны и двух-трёх записей, прогоните тесты dig, затем добавляйте MX, TXT и вторичный сервер. Такой порядок снижает риск ошибки при делегировании.

Насколько публикация полезна?

Нажмите на звезду, чтобы оценить!

Средняя оценка 0 / 5. Количество оценок: 0

Оценок пока нет. Поставьте оценку первым.

Поделиться: Telegram ВКонтакте