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 и вторичный сервер. Такой порядок снижает риск ошибки при делегировании.