Настройка DHCP сервера с динамически обновляемым сервером DNS
Сервер DNS занимается преобразованиями доменных имен в IP адрес и наоборот.
Сервер DHCP в сети занимается выдачей IP адресов устройствам. Одновременно с выдачей адресов, он может обновить данные в DNS, обновив данные о появившемся в сети устройстве.
Установка DHCP
Этот пакет скорее всего один из старейших резидентов всевозможных репозиториев. Устанавливаем из стандартного:
apt install isc-dhcp-server bind9utils
Включить в файле /etc/default/isc-dhcp-server интерфейсы для прослушивания:
INTERFACESv4="ens18,eth0,vlan3"
Основной конфигурационный файл /etc/dhcp/dhcpd.conf,
option domain-name "antroot.ru";
option domain-name-servers 10.0.2.2, 10.0.2.3;
authoritative;
subnet 10.0.1.0 netmask 255.255.255.0 {
}
subnet 10.0.2.0 netmask 255.255.255.0 {
}
subnet 10.0.3.0 netmask 255.255.255.0 {
    range 10.0.3.50 10.0.3.99;
    option subnet-mask 255.255.255.0;
    option routers 10.0.3.2;
    option ntp-servers 10.0.3.2;
    option domain-name-servers 10.0.3.2;
    option domain-name "antroot.lan";
    ddns-domainname "antroot.lan";
    default-lease-time 300;
    max-lease-time 600;
}authoritative; allow declines; update-conflict-detection false; update-optimization on; update-static-leases off;
systemctl start isc-dhcp-server systemctl enable isc-dhcp-server systemctl status isc-dhcp-server
Настройка обновления DNS из DHCP
Включить обновление сервера DNS в dhcpd.conf
ddns-update-style interim; ddns-domainname "antroot.lan"; allow declines;
Сгенерировать секретные ключи:
dnssec-keygen -a HMAC-MD5 -b 512 -n USER DHCP_UPDATER dnssec-keygen -a HMAC-MD5 -b 512 -n USER DHCP_OMAPI cat Kdhcp_updater.+*.private | grep ^Key | cut -d ' ' -f2- cat Kdhcp_omapi.+*.private | grep ^Key | cut -d ' ' -f2-
и добавить в конфигурационный файл dhcpd.conf под псевдонимом DHCP_UPDATER
key DHCP_UPDATER {
     algorithm HMAC-MD5.SIG-ALG.REG.INT;
     secret S2RoX3bfdXXkYgRlco4rMMM3KzU4MzkwCg==;
}
key dhcp_omapi {
     algorithm hmac-md5;
     secret S2RoBEXfb21hexDFdf5K3zE1NyswMDA2Mgo=;
}Для включения режима failover понадобится указать порт OMAPI. OMAPI протокол используется, чтобы определять и изменять состояние DHCP сервера.
omapi-port 7911; omapi-key dhcp_omapi;
Указать зоны, которые необходимо обновлять в dhcpd.conf
zone antroot.lan. {
    primary 10.0.3.2;
    secondary 10.0.3.3;
    key DHCP_UPDATER;
}
zone 3.0.10.in-addr.arpa. {
    primary 10.0.3.2;
    secondary 10.0.3.3;
    key DHCP_UPDATER;
}Добавить резервный DHCP сервер (опционально)
failover peer "failover-partner" {
     primary;
     address 10.0.1.2;
     port 519;
     peer address 10.0.1.3;
     peer port 520;
     max-response-delay 60;
     max-unacked-updates 10;
     mclt 3600;
     split 128;
     load balance max seconds 3;
}и указать в подсети pool, который должен реплицироваться:
subnet 10.0.3.0 netmask 255.255.255.0 {
    pool {
        failover peer "failover-partner";
        range 10.0.3.50 10.0.3.99;
        option subnet-mask 255.255.255.0;
        option routers 10.0.3.2;
        option domain-name-servers 10.0.3.2;
        option domain-name "antroot.lan";
        ddns-domainname "antroot.lan";
    }
}На резервном DHCP сервере все то же самое, за исключением
failover peer "failover-partner" {
     secondary;
     address 10.0.1.3;
     port 520;
     peer address 10.0.1.2;
     peer port 519;
     max-response-delay 60;
     max-unacked-updates 10;
     load balance max seconds 3;
}Установка DNS сервера
Сервер DNS (Domain Name Services - сервис доменных имен) предназначен для преобразования доменных имен в IP адрес (прямое преобразование) и обратно (обратное преобразование, reverse DNS).
Этот пакет также является основополагающим, и присутствует во всяческих репозиториях.
Установка производится стандартным образом:
apt install -y bind9
Стандартными для Debian/Ubuntu Linux расположениями файлов Bind9 являются
- /etc/default/bind9 - параметры запуска демона;
 - /etc/bind/ - файлы конфигурации;
 - /var/cache/bind/ - директория обслуживаемых доменных зон.
 
Четко установившаяся традиция разделения длинных конфигурационных файлов на части здесь может быть использована максимально эффективно при помощи директивы include, где основной файл конфигурации выглядит так
include "/etc/bind/named.conf.options"; include "/etc/bind/named.conf.local"; include "/etc/bind/named.conf.default-zones"; include "/etc/bind/named.conf.zones"; include "/etc/bind/named.conf.zones.dynamic";
Для добавления своей динамической в данном случае зоны воспользуемся файлом, например, named.conf.zones.dynamic.
Сгенерируем конфигурацию для обновления зоны:
ddns-confgen -z antroot.lan
Добавим секретный ключ, который создали для DHCP
key DHCP_UPDATER {
    algorithm HMAC-MD5.SIG-ALG.REG.INT;
    secret S2RoX3bfdXXkYgRlco4rMMM3KzU4MzkwCg==;
};zone "antroot.lan" {
    type master;
    file "antroot.lan.hosts";
    masterfile-format text;
    allow-update {
        key DHCP_UPDATER;
        10.0.3.2;
        10.0.3.3;
    };
    notify no;
};
zone "3.0.10.in-addr.arpa" IN {
    type master;
    file "_db.10.0.3";
    masterfile-format text;
    allow-update {
        key DHCP_UPDATER;
        10.0.3.2;
        10.0.3.3;
    };
};И также необходимо создать мастер-файлы этих зон в директории /var/cache/bind
Мастер файл прямой зоны antroot.lan.hosts
$ORIGIN .
$TTL 86400      ; 1 day
antroot.lan  IN SOA  antroot.lan. admin.antroot.lan. (
                                2021100601 ; serial
                                600        ; refresh (10 minutes)
                                300        ; retry (5 minutes)
                                3600       ; expire (1 hour)
                                600        ; minimum (10 minutes)
                                )
                        NS      ns.antroot.lan.
                        MX      10 mx.antroot.lan.
                        TXT     "antroot.ru server"
                        HINFO   "Pentium-III-1200" "Linux"
                        A       10.0.3.2
$ORIGIN antroot.lan.
ns                      A       10.0.3.2
mx                      A       10.0.3.2
$TTL 300        ; 5 minutes
nas.                    A       10.0.3.8Мастер файл обратной _db.10.0.3
$ORIGIN .
$TTL 600        ; 10 minutes
3.0.10.in-addr.arpa     IN SOA  mijor.lan. cd.mijor.lan. (
                                34         ; serial
                                600        ; refresh (10 minutes)
                                3600       ; retry (1 hour)
                                86400      ; expire (1 day)
                                3600       ; minimum (1 hour)
                                )
                        NS      localhost.
$ORIGIN 3.0.10.in-addr.arpa.
$TTL 300        ; 5 minutes
90                      PTR     nas.mijor.lan.Проверка конфигурационных файлов:
named-checkconf /etc/bind/named.conf
Управление DNS через утилиту rndc
Сгенерировать конфигурацию rndc
rndc-confgen > /etc/bind/rndc.conf
key "rndc-key" {
      algorithm hmac-md5;
    secret "ABCDEFGHIJKLMNOPQRSTUVWXYZ==";
};
options {
     default-server 127.0.0.1;
     default-port 953;
     default-key "rndc-key";
};Добавить в /etc/bind/named.conf
include "/etc/bind/rndc.key";
controls {
        inet 127.0.0.1 port 953
        allow { 127.0.0.1; } keys { "rndc-key"; };
    };После перезапуска bind9 (systemctl restart bind9) можно воспользоваться:
rndc status- вывод общего состояния DNS сервера;rndc freeze antroot.lan- заморозка зоны antroot.lan для ручного внесения изменений;rndc thaw antroot.lan- вернуть возможность обновления зоны antroot.lan
Ошибки конфигурации
dhcp_updater: updating zone 'antroot.lan/IN': update unsuccessful: srv1.antroot.lan: 'name not in use' prerequisite not satisfied (YXDOMAIN)
Решение: в dhcpd.conf
заменить ignore client-updates; на allow client-updates;
Forward map from srv1.antroot.lan to xx.xx.xx.xx FAILED: Has an A record but no DHCID, not mine.
DHCP-ID формируется, как хэш, вычисленный из комбинации FQDN машины, MAC адреса. DHCP-ID сохраняется в TXT записи в DNS
Решение: в dhcpd.conf добавитьupdate-conflict-detection off;
Не разрешаются имена, кроме укзанных своих зон: