Debian : Configurer le DDNS avec bind et kea
Table des matières
Dans cet article, on va voir comment configurer les services DNS bind et DHCP kea pour la mise à jour dynamique.
L'idée est de renseigner le DNS automatiquement, avec les noms des machines ayant reçue leur configuration via le serveur DHCP.
Dans les prérequis nécessaires, il faut :
- Un serveur DHCP installé avec kea : Installer et configurer le serveur DHCP avec kea
- Un serveur DNS installé avec bind : Installer et configurer un serveur DNS avec bind
Kea et Bind prennent tous deux en charge le protocole TSIG (Transaction Signature). Nous allons donc l'utiliser pour créer la clé.
Sur le serveur DNS, on va générer une clé :
On corrige les permissions de cette clé :
Voici ce que contient ce fichier dans mon exemple :
On va déplacer les fichiers de zone du DNS de /etc/bind à /var/lib/bind. En effet, apparmor sur Debian va refuser une écriture sur des fichiers dans /etc/bind alors que c'est autorisé dans /var/lib/bind.
On va déplacer les fichiers :
On modifie le fichier named.conf.local en indiquant les nouveaux chemins (je fais ça avec un petit sed qui va bien :
On édite le fichier named.conf.local :
On va ajoute une inclusion au fichier de cle en haut du fichier, une section update-policy et commenter le allow-update qui n'a plus de sens.
Je remets mon fichier complet avec les commentaires :
Comme d'habitude, on peut vérifier la syntaxe de notre configuration DNS :
On redémarre le service après modification :
Sur le serveur DHCP, on installe le paquet kea-dhcp-ddns-server qui gère la gestion dynamique :
On créé le fichier de configuration avec la clé créée précédemment :
On y place ce contenu :
On fixe les permissions de ce fichier :
On va modifier la config du serveur DHCP sur la gestion du DDNS.
On va garder la version originale du fichier de configuration :
On créé le nouveau fichier de config :
Voici son contenu :
On fixe les permissions :
Comme d'hab, on peut vérifier la configuration :
On modifie la configuration de notre serveur DHCP :
Dans le pavé "Dhcp4" tout au début, on indique qu'on veut activer le DDNS :
Comme d'hab, on peut vérifier la configuration :
On redémarre le service (qui sous debian est déjà activé par défaut) :
J'ai allumé une machine, nommée client1.
On teste avec nslookup après qu'elle ait reçue sa configuration réseau :
Ca donne :
Evidemment, on peut tester l'enregistrement inverse :
Ce qui donne :
On peut voir dans les logs la mise à jour dans le DNS du nom de la machine venant de récupérer une IP via notre DHCP kea :
Quand le DNS est configuré avec le DDNS, si on veut faire une mise à jour manuelle de la zone, on va devoir stopper la mise à jour dynamique.
On le fait via :
On met à jour notre zone, sans oublier d'incrémenter le "Serial".
Une fois la zone mise à jour, on réactive les mises à jour dynamques :
Note : Il n'est pas nécessaire de recharger le service DNS dans ce cas.
Introduction
Dans cet article, on va voir comment configurer les services DNS bind et DHCP kea pour la mise à jour dynamique.
L'idée est de renseigner le DNS automatiquement, avec les noms des machines ayant reçue leur configuration via le serveur DHCP.
Dans les prérequis nécessaires, il faut :
- Un serveur DHCP installé avec kea : Installer et configurer le serveur DHCP avec kea
- Un serveur DNS installé avec bind : Installer et configurer un serveur DNS avec bind
Génération de la clé pour le DNS
Kea et Bind prennent tous deux en charge le protocole TSIG (Transaction Signature). Nous allons donc l'utiliser pour créer la clé.
Sur le serveur DNS, on va générer une clé :
Code BASH :
cd /etc/bind tsig-keygen dhcp1-to-ns1 > dhcp1-to-ns1.key
On corrige les permissions de cette clé :
Code BASH :
chown root:bind dhcp1-to-ns1.key chmod 640 dhcp1-to-ns1.key
Voici ce que contient ce fichier dans mon exemple :
Code :
key "dhcp1-to-ns1" {
algorithm hmac-sha256;
secret "m7DXpFi3M0f9BHKxYoHYtV7f42sPsXclhtoS0ziY7Gg=";
};
Déplacer les zones DNS
On va déplacer les fichiers de zone du DNS de /etc/bind à /var/lib/bind. En effet, apparmor sur Debian va refuser une écriture sur des fichiers dans /etc/bind alors que c'est autorisé dans /var/lib/bind.
On va déplacer les fichiers :
Code BASH :
mv /etc/bind/db.* /var/lib/bind/
On modifie le fichier named.conf.local en indiquant les nouveaux chemins (je fais ça avec un petit sed qui va bien :
Code BASH :
sed -e 's@/etc/bind/db@/var/lib/bind/db@g' -i /etc/bind/named.conf.local
Configuration de la clé dans bind
On édite le fichier named.conf.local :
Code BASH :
vim /etc/bind/named.conf.local
On va ajoute une inclusion au fichier de cle en haut du fichier, une section update-policy et commenter le allow-update qui n'a plus de sens.
Je remets mon fichier complet avec les commentaires :
Code :
//
// Do any local configuration here
//
include "/etc/bind/dhcp1-to-ns1.key";
zone "linuxtrickstest.lan" {
type master;
file "/var/lib/bind/db.linuxtrickstest.lan";
// refuser les mises à jour des enregistrements DNS par un tiers non autorisé.
// allow-update { none; };
// DDNS
update-policy {
grant dhcp1-to-ns1 wildcard *.linuxtrickstest.lan A DHCID;
};
};
zone "221.168.192.in-addr.arpa" {
type master;
file "/var/lib/bind/db.reverse.linuxtrickstest.lan";
// refuser les mises à jour des enregistrements DNS par un tiers non autorisé.
// allow-update { none; };
//DDNS
update-policy {
grant dhcp1-to-ns1 wildcard *.221.168.192.in-addr.arpa PTR DHCID;
};
};
Comme d'habitude, on peut vérifier la syntaxe de notre configuration DNS :
Code BASH :
named-checkconf
On redémarre le service après modification :
Code BASH :
systemctl reload named.service
Intégration de la clé dans kea
Sur le serveur DHCP, on installe le paquet kea-dhcp-ddns-server qui gère la gestion dynamique :
Code BASH :
apt install kea-dhcp-ddns-server
On créé le fichier de configuration avec la clé créée précédemment :
Code BASH :
vim /etc/kea/tsig-keys.json
On y place ce contenu :
Code :
"tsig-keys": [
{
"name": "dhcp1-to-ns1",
"algorithm": "hmac-sha256",
"secret": "m7DXpFi3M0f9BHKxYoHYtV7f42sPsXclhtoS0ziY7Gg="
}
],
On fixe les permissions de ce fichier :
Code BASH :
chown _kea:root /etc/kea/tsig-keys.json chmod 640 /etc/kea/tsig-keys.json
On va modifier la config du serveur DHCP sur la gestion du DDNS.
On va garder la version originale du fichier de configuration :
Code BASH :
mv /etc/kea/kea-dhcp-ddns.conf /etc/kea/kea-dhcp-ddns.conf.ori
On créé le nouveau fichier de config :
Code BASH :
vim /etc/kea/kea-dhcp-ddns.conf
Voici son contenu :
Code TEXT :
{ "DhcpDdns": { "ip-address": "127.0.0.1", "port": 53001, "control-socket": { "socket-type": "unix", "socket-name": "/run/kea/kea-ddns-ctrl-socket" }, // Fichier de clé <?include "/etc/kea/tsig-keys.json"?> // IP et infos du DNS et de la zone directe à mettre à jour "forward-ddns" : { "ddns-domains" : [ { "name": "linuxtrickstest.lan.", "key-name": "dhcp1-to-ns1", "dns-servers": [ { "ip-address": "192.168.221.2" } ] } ] }, // IP et infos du DNS et de la zone inverse à mettre à jour "reverse-ddns" : { "ddns-domains" : [ { "name": "221.168.192.in-addr.arpa.", "key-name": "dhcp1-to-ns1", "dns-servers": [ { "ip-address": "192.168.221.2" } ] } ] }, // On peut configurer des logs "loggers": [ { "name": "kea-dhcp-ddns", "output_options": [ { "output": "stdout", "pattern": "%-5p %m\n" } ], "severity": "INFO", "debuglevel": 0 } ] } }
On fixe les permissions :
Code BASH :
chown _kea:root /etc/kea/kea-dhcp-ddns.conf chmod 640 /etc/kea/kea-dhcp-ddns.conf
Comme d'hab, on peut vérifier la configuration :
Code BASH :
sudo -u _kea kea-dhcp-ddns -t /etc/kea/kea-dhcp-ddns.conf
Configuration du DHCP pour envoyer les mises à jour
On modifie la configuration de notre serveur DHCP :
Code BASH :
vim /etc/kea/kea-dhcp4.conf
Dans le pavé "Dhcp4" tout au début, on indique qu'on veut activer le DDNS :
Code TEXT :
// DDNS "dhcp-ddns": { "enable-updates": true }, "ddns-qualifying-suffix": "linuxtrickstest.lan", "ddns-override-client-update": true,
Comme d'hab, on peut vérifier la configuration :
Code BASH :
sudo -u _kea kea-dhcp4 -t /etc/kea/kea-dhcp4.conf
On redémarre le service (qui sous debian est déjà activé par défaut) :
Code BASH :
systemctl restart kea-dhcp-ddns-server.service
Tester le fonctionnement
J'ai allumé une machine, nommée client1.
On teste avec nslookup après qu'elle ait reçue sa configuration réseau :
Code BASH :
nslookup client1.linuxtrickstest.lan
Ca donne :
Code TEXT :
Server: 127.0.0.1 Address: 127.0.0.1#53 Name: client1.linuxtrickstest.lan Address: 192.168.221.150
Evidemment, on peut tester l'enregistrement inverse :
Code BASH :
nslookup 192.168.221.150
Ce qui donne :
Code TEXT :
150.221.168.192.in-addr.arpa name = client1.linuxtrickstest.lan.
On peut voir dans les logs la mise à jour dans le DNS du nom de la machine venant de récupérer une IP via notre DHCP kea :
Code BASH :
cat /var/log/named/named.log
Code TEXT :
16-Jul-2025 22:25:48.054 update: info: client @0x7f130f77bc00 192.168.221.2#60421/key dhcp1-to-ns1: updating zone 'linuxtrickstest.lan/IN': adding an RR at 'client1.linuxtrickstest.lan' A 192.168.221.150 16-Jul-2025 22:25:48.054 update: info: client @0x7f130f77bc00 192.168.221.2#60421/key dhcp1-to-ns1: updating zone 'linuxtrickstest.lan/IN': adding an RR at 'client1.linuxtrickstest.lan' DHCID AAEBmona1FV/derAi4/OQ9guIkW2/vXaykFvsgpBMArNmY4= 16-Jul-2025 22:25:48.062 notify: info: zone linuxtrickstest.lan/IN: sending notifies (serial 2) 16-Jul-2025 22:25:48.062 notify: info: zone linuxtrickstest.lan/IN: sending notify to 192.168.221.3#53 16-Jul-2025 22:25:48.062 update: info: client @0x7f131042a800 192.168.221.2#58639/key dhcp1-to-ns1: updating zone '221.168.192.in-addr.arpa/IN': deleting rrset at '150.221.168.192.in-addr.arpa' PTR 16-Jul-2025 22:25:48.062 update: info: client @0x7f131042a800 192.168.221.2#58639/key dhcp1-to-ns1: updating zone '221.168.192.in-addr.arpa/IN': deleting rrset at '150.221.168.192.in-addr.arpa' DHCID 16-Jul-2025 22:25:48.062 update: info: client @0x7f131042a800 192.168.221.2#58639/key dhcp1-to-ns1: updating zone '221.168.192.in-addr.arpa/IN': adding an RR at '150.221.168.192.in-addr.arpa' PTR client1.linuxtrickstest.lan. 16-Jul-2025 22:25:48.062 update: info: client @0x7f131042a800 192.168.221.2#58639/key dhcp1-to-ns1: updating zone '221.168.192.in-addr.arpa/IN': adding an RR at '150.221.168.192.in-addr.arpa' DHCID AAEBmona1FV/derAi4/OQ9guIkW2/vXaykFvsgpBMArNmY4= 16-Jul-2025 22:25:48.066 xfer-out: info: client @0x7f131314c400 192.168.221.3#36677 (linuxtrickstest.lan): transfer of 'linuxtrickstest.lan/IN': IXFR started (serial 1 -> 2) 16-Jul-2025 22:25:48.066 xfer-out: info: client @0x7f131314c400 192.168.221.3#36677 (linuxtrickstest.lan): transfer of 'linuxtrickstest.lan/IN': IXFR ended: 1 messages, 6 records, 278 bytes, 0.001 secs (278000 bytes/sec) (serial 2) 16-Jul-2025 22:25:48.066 notify: info: zone 221.168.192.in-addr.arpa/IN: sending notifies (serial 2) 16-Jul-2025 22:25:48.066 notify: info: zone 221.168.192.in-addr.arpa/IN: sending notify to 192.168.221.3#53
Mise à jour du DNS avec un DDNS
Quand le DNS est configuré avec le DDNS, si on veut faire une mise à jour manuelle de la zone, on va devoir stopper la mise à jour dynamique.
On le fait via :
Code BASH :
rndc freeze
On met à jour notre zone, sans oublier d'incrémenter le "Serial".
Une fois la zone mise à jour, on réactive les mises à jour dynamques :
Code BASH :
rndc thaw
Note : Il n'est pas nécessaire de recharger le service DNS dans ce cas.