Настройка 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;
Не разрешаются имена, кроме укзанных своих зон: