Серверное оборудование для бизнеса — надёжные решения для любых задач Подробнее →
Статья

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 стоит настроить для публичных зон — это существенно повышает безопасность вашего домена.

2 Ответа

  1. DNSSEC настраивать муторно, но оно того стоит. Кстати, если зона публичная — многие регистраторы теперь поддерживают автоматическую синхронизацию DS-записей, это сильно упрощает жизнь.

  1. Спасибо, поднял по этой статье тестовый сервер — всё заработало. Только у меня на Ubuntu 24.04 путь к конфигам немного другой, но это мелочи.