DNS-сервер на Bind9: от установки до DNSSEC
DNS-сервер на Bind9: от установки до DNSSEC
DNS — фундамент интернета, и понимание того, как он работает изнутри, необходимо каждому сетевому администратору. BIND9 (Berkeley Internet Name Domain) — самый распространённый DNS-сервер в мире. Разберём, как поднять собственный DNS-сервер и защитить его с помощью DNSSEC.
Установка BIND9
# Debian/Ubuntu
apt update && apt install bind9 bind9utils bind9-doc -y
# RHEL/AlmaLinux
dnf install bind bind-utils -y
Основные файлы конфигурации:
/etc/bind/named.conf— главный конфиг (Debian)/etc/named.conf— главный конфиг (RHEL)/var/cache/bind/— зоны (Debian)/var/named/— зоны (RHEL)
Настройка кеширующего резолвера
Простейший вариант — кеширующий DNS для офиса или сервера. Отредактируйте named.conf.options:
options {
directory "/var/cache/bind";
recursion yes;
allow-recursion { 192.168.0.0/16; 127.0.0.1; };
listen-on { 127.0.0.1; 192.168.1.1; };
listen-on-v6 { none; };
forwarders {
1.1.1.1;
8.8.8.8;
};
forward only;
dnssec-validation auto;
};
Создание авторитативной зоны
Добавьте описание зоны в named.conf.local:
zone "example.local" {
type master;
file "/var/cache/bind/db.example.local";
};
Создайте файл зоны /var/cache/bind/db.example.local:
$TTL 86400
@ IN SOA ns1.example.local. admin.example.local. (
2026032901 ; Serial (YYYYMMDDNN)
3600 ; Refresh
1800 ; Retry
604800 ; Expire
86400 ) ; Negative TTL
; Name servers
@ IN NS ns1.example.local.
; A records
ns1 IN A 192.168.1.1
web IN A 192.168.1.10
mail IN A 192.168.1.20
@ IN A 192.168.1.10
; MX record
@ IN MX 10 mail.example.local.
Проверьте корректность зоны:
named-checkzone example.local /var/cache/bind/db.example.local
named-checkconf
Перезапустите BIND:
systemctl restart named
Настройка DNSSEC
DNSSEC добавляет цифровые подписи к DNS-записям, что защищает от подмены ответов (атака «отравление кеша»).
Генерация ключей зоны:
cd /var/cache/bind
# Zone Signing Key (ZSK)
dnssec-keygen -a ECDSAP256SHA256 -n ZONE example.local
# Key Signing Key (KSK) — более длинный и хранится дольше
dnssec-keygen -a ECDSAP256SHA256 -f KSK -n ZONE example.local
Добавьте ключи в файл зоны:
echo '$INCLUDE /var/cache/bind/Kexample.local.+013+XXXXX.key' >> /var/cache/bind/db.example.local
echo '$INCLUDE /var/cache/bind/Kexample.local.+013+YYYYY.key' >> /var/cache/bind/db.example.local
Подпишите зону:
dnssec-signzone -A -3 $(head -c 1000 /dev/random | sha1sum | cut -b 1-16)
-N INCREMENT -o example.local -t
/var/cache/bind/db.example.local
Обновите конфиг зоны, указав подписанный файл:
zone "example.local" {
type master;
file "/var/cache/bind/db.example.local.signed";
auto-dnssec maintain;
inline-signing yes;
};
Полезные утилиты для диагностики
# Проверить DNS-запись
dig @192.168.1.1 web.example.local A
# Проверить DNSSEC
dig @192.168.1.1 example.local DNSKEY +dnssec
# Трассировка резолвинга
dig +trace example.com
# Обратный DNS
dig -x 192.168.1.10
Итог
BIND9 — мощный и гибкий DNS-сервер, который закрывает все потребности от простого кеширующего резолвера до полноценного авторитативного сервера с DNSSEC. Для большинства офисных задач достаточно кеширующей конфигурации с локальной зоной. DNSSEC стоит настроить для публичных зон — это существенно повышает безопасность вашего домена.
DNSSEC настраивать муторно, но оно того стоит. Кстати, если зона публичная — многие регистраторы теперь поддерживают автоматическую синхронизацию DS-записей, это сильно упрощает жизнь.