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