Динамическое обновление DNS-сервера Bind9 при помощи ISC DHCP
Предисловие
Это четвертая заметка из серии по настройке домашнего интернет шлюза на базе Ubuntu 24.04.1 LTS. Предыдущий материал:
В этой части мы будем связывать настроенные ранее DNS и DCHP сервера в локальной сети для динамического обновления DNS сервера данными из DHCP.
Донастройка Bind9
Редактируем файл /etc/bind/named.conf.local
, в самый верх добавляем строку include "/etc/bind/rndc.key";
, сам файл содержит RNDC-ключ, дающий право обновления, данный ключ создается автоматически при установке BIND. Теперь в этом же файле редактируем описания зон, приводим их к виду:
zone "savenkoff.local" IN {
type master;
file "/var/lib/bind/db.savenkoff";
allow-update { key rndc-key; };
};
zone "1.168.192.in-addr.arpa" IN {
type master;
file "/var/lib/bind/db.1.168.192";
allow-update { key rndc-key; };
};
В прошлой версии настройки для каждой из зон строка allow-update
имела значение { none; };
. Теперь зоны можно будет обновить предъявителю RNDC-ключа. Сохраняем. Проверяем конфигурацию командой named-checkconf
и если ошибок в конфигурации не обнаружено - перезапускаем сервер sudo systemctl restart bind9
.
Донастройка DHCP
Копируем ключ обновления в директорию DHCP севера, выставляем на него права:
sudo cp /etc/bind/rndc.key /etc/dhcp/ddns-keys/
sudo chown root:dhcpd /etc/dhcp/ddns-keys/rndc.key
Редактируем файл /etc/dhcp/dhcpd.conf
, комментируем следующие строки:
# option domain-name "savenkoff.local";
# option domain-name-servers 192.168.1.1;
Потом заменяем строку ddns-update-style none;
на следующие:
ddns-updates on;
ddns-update-style interim;
ignore client-updates;
update-static-leases on;
Ниже добавляем следующие строки:
include "/etc/dhcp/ddns-keys/rndc.key";
zone savenkoff.local. {
primary 192.168.1.1;
key rndc-key;
}
zone 1.168.192.in-addr.arpa. {
primary 192.168.1.1;
key rndc-key;
}
В них мы разрешаем управление указанными зонами RNDC-ключом Bind'a.
Теперь вносим изменения в прописанную секцию subnet (переносим сюда строки, закомментированные выше + увеличили максимальное время аренды адреса до недели):
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.200 192.168.1.254;
option domain-name "savenkoff.local";
option domain-name-servers 192.168.1.1;
option broadcast-address 192.168.1.255;
option routers 192.168.1.1;
default-lease-time 7200;
max-lease-time 604800;
}
Сохраняем, проверяем конфигурацию на ошибки dhcpd -t -cf /etc/dhcp/dhcpd.conf
, для примера вывод информации об ошибке примерно такой:
Internet Systems Consortium DHCP Server 4.4.3-P1
Copyright 2004-2022 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/
Can't open /etc/bind/rndc.key: Permission denied
If you think you have received this message due to a bug rather
than a configuration issue please read the section on submitting
bugs on either our web page at www.isc.org or in the README file
before submitting a bug. These pages explain the proper
process and the information we find helpful for debugging.
exiting.
Из всей этой кучи текста текст ошибки малозамететн, но он есть Can't open /etc/bind/rndc.key: Permission denied
. В случае отсутствия ошибок вывод сокращается:
Internet Systems Consortium DHCP Server 4.4.3-P1
Copyright 2004-2022 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/
Config file: /etc/dhcp/dhcpd.conf
Database file: /var/lib/dhcp/dhcpd.leases
PID file: /var/run/dhcpd.pid
Добиваемся отсутствия ошибок и перезапускаем сервер командой sudo systemctl restart isc-dhcp-server.service
.
После обновление зон должно начать работать.
Проверка
Достаточно подключить/переподключить устройство к сети. В логах bind категории general должны быть записи вида:
23-Oct-2024 23:32:58.394 update: info: client @0x00000000000 192.168.1.1#13267/key rndc-key: updating zone 'savenkoff.local/IN': adding an RR at 'Nokia3310.savenkoff.local' A 192.168.1.60
23-Oct-2024 23:32:58.394 update: info: client @0x00000000000 192.168.1.1#13267/key rndc-key: updating zone 'savenkoff.local/IN': adding an RR at 'Nokia3310.savenkoff.local' TXT "00e70052004f00c900540019009300ca00"
23-Oct-2024 23:32:58.394 update: debug 3: client @0x00000000000 192.168.1.1#13267/key rndc-key: updating zone 'savenkoff.local/IN': checking for NSEC3PARAM changes
23-Oct-2024 23:32:58.401 update: info: client @0x00000000000 192.168.1.1#13267/key rndc-key: updating zone '1.168.192.in-addr.arpa/IN': deleting rrset at '60.1.168.192.in-addr.arpa' PTR
23-Oct-2024 23:32:58.401 update: info: client @0x00000000000 192.168.1.1#13267/key rndc-key: updating zone '1.168.192.in-addr.arpa/IN': adding an RR at '60.1.168.192.in-addr.arpa' PTR Nokia3310.savenkoff.local.
23-Oct-2024 23:32:58.401 update: debug 3: client @0x00000000000 192.168.1.1#13267/key rndc-key: updating zone '1.168.192.in-addr.arpa/IN': checking for NSEC3PARAM change
В сами файлы зон должны добавиться записи, для прямой зоны:
$TTL 3600 ; 1 hour
Nokia3310 A 192.168.1.60
TXT "00e70052004f00c900540019009300ca00"
И обратной зоны соответственно:
$TTL 3600 ; 1 hour
60 PTR Nokia3310.savenkoff.local.
Теперь можно пробовать ping на устройство по имени с любого устройства локальной сети, хост должен быть доступен:
Всё отлично. Пост окончен.