Сервер dns на debian

Небольшой мануал по установке и настройке сервера имен (dns) на операционной системе debian. Мануал пересекается со статьей Сервер dhcp на debian. И в итоге получим настроенный ddns сервер

Установка DNS сервера

sudo apt install bind9

Необходимо сгенерировать ключ для обновления dns записей

dnssec-keygen -a HMAC-MD5 -b 128-r /dev/urandom -n USER DHCP_UPDATER

Сгенерированный ключ храниться в файле /etc/bind/Kdhcp_updater.xxxx.key

DHCP_UPDATER. IN KEY 0 3 157 hi/CIXoy+pGalrBzxmNYNQ==

hi/CIXoy+pGalrBzxmNYNQ==  это и есть ключ, который понадобится немного позже.

Небольшое дополнение для debian 12. 

В данной версии ОС dnssec-keygen не хочет генерировать ключ по алгоритму hmac-md5. Поэтому здесь применим другую команду

sudo tsig-keygen -a HMAC-MD5 DHCP_UPDATER

На выходе получим уже готовый блок для вставки в конфиг bind

key "DHCP_UPDATER" {
        algorithm hmac-md5;
        secret "FGJd5mb8/5vly/Md9O1rfg==";
};

Теперь настройка dns сервера. Главный файл находится в /etc/bind/named.conf, необходимо прописать в нем сгенерированный выше ключ

sudo nano /etc/bind/named.conf
// This is the primary configuration file for the BIND DNS server named.
//
// Please read /usr/share/doc/bind9/README.Debian.gz for information on the
// structure of BIND configuration files in Debian, *BEFORE* you customize
// this configuration file.
//
// If you are just adding zones, please do that in /etc/bind/named.conf.local

include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.local";
include "/etc/bind/named.conf.default-zones";
key DHCP_UPDATER {
        algorithm hmac-md5;
        secret "hi/CIXoy+pGalrBzxmNYNQ==";
        };

Пройдемся по остальным конфигурационным файлам из списка, /etc/bind/named.conf.options

sudo nano /etc/bind/named.conf.options
options {
        directory "/var/cache/bind";
        auth-nxdomain no;
        forwarders { 192.168.100.1; };
        listen-on { 127.0.0.1; 10.5.5.5; };
        allow-transfer { none; };
        notify no;
        empty-zones-enable yes;

        allow-query {
                10.5.5.0/24;
                127.0.0.0/8;
        };

        allow-recursion {
                10.5.5.0/24;
                127.0.0.0/8;
        };

        allow-update {
                none;
        };

        dnssec-validation no;
        version "REFUSED";
        listen-on-v6 { none; };
};
  • forwaders — вышестоящий dns сервер
  • listen-on — ip адреса, на которых dns сервер будет слушать запросы от клиентов
  • allow-query — ip адреса, с которых разрешены запросы к dns серверу

Настройки прямой и обратной зон , находятся в файле /etc/bind/named.conf.local

sudo nano /etc/bind/named.conf.local
//
// Do any local configuration here
//

// Consider adding the 1918 zones here, if they are not used in your
// organization
//include "/etc/bind/zones.rfc1918";

zone "lct.loc" {
        type master;
        file "/var/cache/bind/db.lct.loc";
        allow-update { key DHCP_UPDATER; };
};

zone "5.5.10.in-addr.arpa" {
        type master;
        file "/var/cache/bind/db.10.5.5";
        allow-update { key DHCP_UPDATER; };
};

В каталоге /var/cache/bind/ хранятся динамические файлы dns сервера.

Настройки зон по-умолчанию, находятся в файле /etc/bind/named.conf.default-zones, их можно не менять

sudo nano /etc/bind/named.conf.default-zones
// prime the server with knowledge of the root servers
zone "." {
        type hint;
        file "/usr/share/dns/root.hints";
};

// be authoritative for the localhost forward and reverse zones, and for
// broadcast zones as per RFC 1912

zone "localhost" {
        type master;
        file "/etc/bind/db.local";
};

zone "127.in-addr.arpa" {
        type master;
        file "/etc/bind/db.127";
};

zone "0.in-addr.arpa" {
        type master;
        file "/etc/bind/db.0";
};

zone "255.in-addr.arpa" {
        type master;
        file "/etc/bind/db.255";
};

Теперь необходимо создать и настроить файлы для работы динамических зон dns сервера

Прямая зона:

sudo nano /var/cache/bind/db.lct.loc
$ORIGIN .
$TTL                        3600       ; 1 hour
lct.loc            IN   SOA srv.lct.loc. admin.lct.loc. (
                            2024060512 ; serial
                            7200       ; refresh (2 hours)
                            540        ; retry (9 minutes)
                            36000      ; expire (10 hours)
                            3600       ; minimum (1 hour)
                            )
                   NS   srv.lct.loc.
$ORIGIN lct.loc.
srv                A    10.5.5.5
  • serial — это серийный номер зоны, может быть любым, но после каждого редактирования файла, должен изменяться на единицу. 
  • NS запись показывает, что dns сервером является наш сервер
  • A запись привязывает ip адрес к имени.

Наполнение файла будет производиться автоматически. Так же, при необходимости, можно добавить добавить А запись вручную:

name       A      10.5.5.24
proxy      A      10.5.5.32

Если одному ip адресу необходимо присвоить несколько имен, то можно прописать dns запись CNAME:

ntp         CNAME      srv
proxy       CNAME      srv

Обратная зона:

sudo nano /var/cache/bind/db.10.5.5
$ORIGIN .
$TTL                            3600       ; 1 hour
5.5.10.in-addr.arpa     IN SOA  srv.lct.loc. admin.lct.loc. (
                                2019063010 ; serial
                                7200       ; refresh (2 hours)
                                540        ; retry (9 minutes)
                                36000      ; expire (10 hours)
                                3600       ; minimum (1 hour)
                                )
                        NS      srv.lct.loc.
$ORIGIN 5.5.10.in-addr.arpa.
5                       PTR     lct.loc.
                        PTR     srv.lct.loc.

Далее необходимо прописать на сервере свой dns. Прописывать необходимо в файле /etc/resolv.conf.

sudo nano /etc/resolv.conf
domain lct.loc
search lct.loc
nameserver 127.0.0.1

Если на сервере установлен пакет resolvconf, тогда писать в файл /etc/resolv.conf нет смысла, т.к. данный файл будет постоянно перезаписываться автоматически. Поэтому редактировать необходимо файл /etc/resolvconf/resolv.conf.d/head

sudo nano /etc/resolvconf/resolv.conf.d/head

Теперь можно настроить сервер dhcp по инструкции из статьи Сервер dhcp на debian