Динамическое обновление DNS-сервера BIND при помощи Kea DHCP
2024-06-18
·
5 мин. для прочтения
Динамическое обновление DNS-сервера BIND при помощи Kea DHCP.
Содержание
1 Ключи
- Создадим ключ на сервере с BIND9:
tsig-keygen -a HMAC-SHA512 DHCP_UPDATER > /etc/named/keys/dhcp_updater.key - Файл
/etc/named/keys/dhcp_updater.keyбудет иметь следующий вид:key "DHCP_UPDATER" { algorithm hmac-sha512; secret "psFFSGdUIwK36l1G82LOw15PuIH4W5uB8h/cw7F0XDsjniBbwm/59tM+V3ydcCs15VLpe2pxlUlggWilytQqgg=="; }; - Поправим права доступа:
chown -R named:named /etc/named/keys
2 Настройка DNS Bind
- Настройка происходит в файле
/etc/named.conf. - Ключ находится в файле
/etc/named/keys/dhcp_updater.key. - Подключим ключ:
include "/etc/named/keys/dhcp_updater.key"; - Разрешим обновление зон:
zone "local.zone" IN { type master; file "local.zone.db"; allow-update { key DHCP_UPDATER; }; update-policy { grant DHCP_UPDATER wildcard *.local.zone A DHCID; }; }; zone "0.168.192.in-addr.arpa" IN { type master; file "192.168.0.db"; update-policy { grant DHCP_UPDATER wildcard *.0.168.192.in-addr.arpa PTR DHCID; }; }; - Сделаем проверку конфигурационного файла:
named-checkconf - Перестартуйте сервер DNS:
systemctl restart named.service
3 Настройка Kea DHCP
3.1 Ключ
- Файл ключа назовём
/etc/kea/tsig-keys.json:touch /etc/kea/tsig-keys.json - Перенесём ключ на сервер Kea DHCP и перепишем его в формате json:
"tsig-keys": [ { "name": "DHCP_UPDATER", "algorithm": "hmac-sha512", "secret": "psFFSGdUIwK36l1G82LOw15PuIH4W5uB8h/cw7F0XDsjniBbwm/59tM+V3ydcCs15VLpe2pxlUlggWilytQqgg==" } ], - Сменим владельца:
chown kea:root /etc/kea/tsig-keys.json - Поправим права доступа:
chmod 640 /etc/kea/tsig-keys.json
3.2 Сервис ddns
- Настройка происходит в файле
/etc/kea/kea-dhcp-ddns.conf. - Файл будет иметь следующий вид:
{ "DhcpDdns": { "ip-address": "127.0.0.1", "port": 53001, "control-socket": { "socket-type": "unix", "socket-name": "/tmp/kea-ddns-ctrl-socket" }, <?include "/etc/kea/tsig-keys.json"?> "forward-ddns" : { "ddns-domains" : [ { "name": "local.zone.", "key-name": "DHCP_UPDATER", "dns-servers": [ { "ip-address": "192.168.0.1" } ] } ] }, "reverse-ddns" : { "ddns-domains" : [ { "name": "0.168.192.in-addr.arpa.", "key-name": "DHCP_UPDATER", "dns-servers": [ { "ip-address": "192.168.0.1" } ] } ] }, "loggers": [ { "name": "kea-dhcp-ddns", "output_options": [ { "output": "stdout", "pattern": "%-5p %m\n" } ], "severity": "INFO", "debuglevel": 0 } ] } } - Обратите особое внимание на точку в конце имени зоны, иначе DDNS завершится сбоем и сообщит, что не удалось найти соответствующее полное доменное имя.
- Можно определить несколько DNS-серверов.
- Раздел журналирования оставлен из шаблона.
- Изменим владельца файла:
chown kea:root /etc/kea/kea-dhcp-ddns.conf - Проверим файл на наличие возможных синтаксических ошибок:
kea-dhcp-ddns -t /etc/kea/kea-dhcp-ddns.conf - Запустим службу ddns:
systemctl enable --now kea-dhcp-ddns.service - Проверим статус работы службы:
systemctl status kea-dhcp-ddns.service
3.3 Сервис dhcp4
3.3.1 Минимальная настройка
- Настройка происходит в файле
/etc/kea/kea-dhcp4.conf. - Включим динамическое обновление:
"dhcp-ddns": { "enable-updates": true }, "ddns-qualifying-suffix": "local.zone", "ddns-override-client-update": true, - Включаем обновления DDNS.
- Затем мы сообщаем DHCP-серверу, каким будет DNS-суффикс по умолчанию.
- Если клиент предоставляет только своё имя хоста, это вызывает проблемы для DDNS, поскольку он не будет знать, что такое полное доменное имя, и поэтому не будет знать, какую зону обновлять.
- Другими словами, команда
ddns-qualifying-suffixиспользуется для указания того, какое доменное имя должно быть добавлено к имени хоста. - Можно определить это для каждой подсети.
- Для параметра
ddns-override-client-updateустанавливается значениеtrue, поскольку мы не хотим, чтобы клиент решал, какие записи обновлять.
3.3.2 Продвинутая настройка
- Настройка DDNS в
kea-dhcp4.confимеет два уровня:- глобальные параметры подключения к демону
kea-dhcp-ddns; - параметры поведения, которые можно задавать глобально, на уровне shared-network или subnet.
- глобальные параметры подключения к демону
Параметры подключения
- Параметры находятся в секции
dhcp-ddnsверхнего уровня. - Определяют, как DHCP-сервер общается с DDNS.
- Они не могут быть переопределены на уровне подсети.
"Dhcp4": { "dhcp-ddns": { "enable-updates": true, "server-ip": "127.0.0.1", "server-port": 53001, "sender-ip": "", "sender-port": 0, "max-queue-size": 1024, "ncr-protocol": "UDP", "ncr-format": "JSON" } }
Параметр Назначение Значение по умолчанию enable-updatesВключает отправку NCR-запросов в DDNS. Должен быть trueдля работы DDNS.falseserver-ipIP-адрес, на котором DDNS слушает запросы. 127.0.0.1server-portПорт DDNS. 53001sender-ipIP, с которого DHCP-сервер отправляет запросы (пусто — выбрать автоматически). ""sender-portПорт отправителя (0 — выбрать автоматически). 0max-queue-sizeМаксимум запросов в очереди; при переполнении DDNS временно отключается. 1024ncr-protocolПротокол для NCR. Поддерживается только UDP.UDPncr-formatФормат пакета. Поддерживается только JSON.JSON- Параметры находятся в секции
Параметры поведения
- Начиная с Kea 1.7.1 эти параметры вынесены из секции
dhcp-ddns. - Они могут задаваться на трёх уровнях: глобально, в
shared-networkи вsubnet4. - Значения наследуются сверху вниз.
"Dhcp4": { "ddns-send-updates": true, "ddns-override-no-update": false, "ddns-override-client-update": false, "ddns-replace-client-name": "never", "ddns-generated-prefix": "myhost", "ddns-qualifying-suffix": "example.com", "hostname-char-set": "[^A-Za-z0-9.-]", "hostname-char-replacement": "" }
Параметр Назначение Значение по умолчанию ddns-send-updatesРазрешает/запрещает DDNS на данном уровне. trueddns-override-no-updateЕсли true, сервер игнорирует запрос клиент не обновлять DNS.falseddns-override-client-updateЕсли true, сервер берёт на себя ответственность за обновление.falseddns-replace-client-nameРежим формирования FQDN: never,always,when-present,when-not-present.neverddns-generated-prefixПрефикс для авто-генерируемых имён (по умолчанию myhost).myhostddns-qualifying-suffixСуффикс домена, добавляемый к неполным именам. ""hostname-char-setРегулярное выражение для недопустимых символов в имени хоста. [^A-Za-z0-9.-]hostname-char-replacementСтрока замены для недопустимых символов (пусто — удалять). ""enable-updatesвdhcp-ddnsиddns-send-updatesна соответствующем уровне должны бытьtrue, иначе обновления не будут отправляться.- Режимы
ddns-replace-client-name:never— использовать имя клиента как есть (по умолчанию);always— всегда генерировать имя на сервере;when-present— заменять, только если клиент прислал имя;when-not-present— использовать имя клиента, если оно есть, иначе генерировать.
- Параметр
ddns-qualifying-suffixне имеет значения по умолчанию, и если он не задан, неполные имена клиентов не будут корректно преобразованы в FQDN.- Его следует задать явно при включении DDNS.
- Начиная с Kea 1.7.1 эти параметры вынесены из секции
Пример
{ "Dhcp4": { "dhcp-ddns": { "enable-updates": true, "server-ip": "127.0.0.1", "server-port": 53001 }, "ddns-send-updates": true, "ddns-override-client-update": true, "ddns-replace-client-name": "always", "ddns-generated-prefix": "host", "ddns-qualifying-suffix": "lan.example.com", "subnet4": [ { "subnet": "192.168.1.0/24", "pools": [ { "pool": "192.168.1.100 - 192.168.1.200" } ], "ddns-send-updates": true, "ddns-qualifying-suffix": "office.lan.example.com" } ] } }- Глобально DDNS включён, сервер всегда сам генерирует FQDN вида
host-192-168-1-100.lan.example.com. - Для подсети
192.168.1.0/24суффикс переопределён наoffice.lan.example.com, поэтому клиенты этой подсети получат имена видаhost-192-168-1-100.office.lan.example.com.
- Глобально DDNS включён, сервер всегда сам генерирует FQDN вида
3.4 Проверка
- Проверим файл на наличие возможных синтаксических ошибок:
kea-dhcp4 -t /etc/kea/kea-dhcp4.conf - Перезапустим службу, чтобы изменения вступили в силу:
systemctl restart kea-dhcp4.service - Проверим статус:
systemctl status kea-dhcp4.service
