Faute de trouver un chemin de migration pour mes zones DNS d’un bureau d’enregistrement à un autre, j’apprends à les héberger sur Knot pour en reprendre le contrôle.
Dans cet article, il s’agit du paramétrage de Knot, pour l’hébergement d’une zone neuve avec un nom déposé pour l’occasion. La migration fera l’objet d’un autre article.
Knot
En parcourant le grand ternet, j’ai vu trois logiciels, Bind, Nsd et Knot. Mon Turris m’a donné une bonne image du nic.cz, une lecture rapide de la doc de Knot montre une implémentation native de DNSSEC. Il est intégré à la distribution debian 13 ce qui apporte une simplicité de mise à jour.
Au moins 3 serveurs
Sans originalité, l’architecture est composée de :
- un vrai master hébergé sur mon proxmox (knot maison), caché derrière mon pare-feu, il hébergera les clés DNSSEC. Ce serveur a 1Go de RAM et 2 vcpu.
- un premier secondaire (mon serveur de mail), présenté comme master dans l’enregistrement SOA,
- enfin d’autres secondaires alimenter depuis le serveur ci-dessus.

Techniquement, on pourrait alimenter tous les secondaires à partir du knot maison. Mon fournisseur d’accès internet ne me garantit pas la stabilité des adresses IP fournies. En cas de changement d’IP, je n’ai qu’une seule modif à faire sur le faux secondaire.
DNSSEC
Knot fait tout le boulot. La seule chose à faire est de publier le DS (Delegation Signer) de la KSK au niveau du registre. Cet article de Cloudflare explique les différents types d’enregistrements de DNSSEC.
Installation et configuration du master
Knot est un paquet debian
sudo apt-get install knot
Les droits positionnés sur les fichiers, sont 640 avec comme propriétaire root:knot. Ceci protège les secrets de la lecture d’autre utilisateurs ou services linux. Du coup, il préférable de faire la configuration sous root par un sudo su -.
Le format de la configuration est YAML, dont voici celle de mon master /etc/knot/knot.conf
server:
rundir: "/run/knot"
user: knot:knot
automatic-acl: on
listen: ::@53 # que ipv6
log:
- target: syslog
any: info
include: "/etc/knot/conf.d/*.conf"
database:
storage: "/var/lib/knot"
remote:
- id: klopmail # mon faux secondaire
address: 2a01:4f8:c17:2604::1@53
key: klopmailmaison
- id: turris # mon turris avec un résolveur validant DNSSEC
address: 2a01:cb00:xxx:xxx::1
acl:
- id: remoteklopmail
remote: klopmail
action: transfer # pour accepter de transférer vers mon secondaire
submission:
- id: attente # pour attendre que l'enregistrement DS est bien présent dans la zone du TLD avant de continuer un rollover de clé.
parent: turris
parent-delay: 1h # délai supplementaire avant de procéder au rollover, supérieur aux TTL des enregistrements DS et DNSKEY de la zone
policy:
- id: signure
algorithm: ecdsap256sha256
ksk-submission: attente
template:
- id: default # template de zone par défaut inutile d'y faire référénce
storage: "/var/lib/knot"
file: "%s.zone"
notify: klopmail # quand il y a une mise à jour de la zone, on prévient le secondaire
semantic-checks: on
serial-policy: dateserial # plus lisible
acl: remoteklopmail # pour autoriser le secondaire à venir chercher la zone
dnssec-signing: on
dnssec-policy: signure
zone:
- domain: cestquedu.fun
#on mettra les secrets dans conf.d/cle.conf
Après avoir créer le répertoire /etc/knot/conf.d, pour générer le secret d’échange entre le master et le secondaire :
keymgr --tsig klopmailmaison > /etc/knot/conf.d/cle.conf
Pensez à positionner les droits en 750 sur le répertoire, 640 sur le fichier et changer le propriétaire par un chown -R root:knot /etc/knot/knot.conf
Cette configuration utilise beaucoup de valeurs par défaut visibles dans la doc de référence de Knot, en particulier le renouvellement des ZSK tous les 30j. Le renouvellement des KSK est déclenché manuellement.
Installation et configuration du secondaire
La configuration pour notre faux master :
server:
rundir: "/run/knot"
user: knot:knot
automatic-acl: on
# listen: [ 127.0.0.1@53, ::1@53 ]
listen: [ 0.0.0.0@53, ::@53] # accepte ipv4 et ipv6
version: # masque la version du serveur
include: "/etc/knot/conf.d/*.conf"
mod-rrl: # pour éviter de participer à une attaque par réflexion
- id: default
rate-limit: 40
slip: 2
log:
- target: syslog
any: info
database:
storage: "/var/lib/knot"
remote:
- id: maison
address: 2a01:cb00:xxx:xxx:xxxx::xxxx
key: klopmailmaison
- id: netim
address: 2a02:850:8::41
acl:
- id: maison
remote: maison
action: notify # accepte d'être notifier par le primaire
- id: acl_netim
remote: netim
action: transfer # accepte une demande de transfert du secondaire
template:
- id: default
storage: "/var/lib/knot"
file: "%s.zone"
global-module: mod-rrl/default
acl: [maison,acl_netim]
master: maison # le boss
notify: netim # pour prévenir le secondaire
zone:
- domain: cestquedu.fun
#
Il faut recopier le fichier /etc/knot/conf.d/cle.conf du primaire vers le secondaire et repositionner les droits. NE surtout PAS relancer la commande keymgr –tsig. Il s’agit d’un secret partagé qui doit être identique sur les deux serveurs.
A partir de là on peut démarrer ou redémarrer les deux serveurs par systemctl restart knot.
La zone
A partir du primaire à la maison, on peuple la zone en ligne de commande :
root@knot:/etc/knot# knotc zone-begin cestquedu.fun
OK
root@knot:/etc/knot# knotc zone-set cestquedu.fun @ SOA klopmail.dync.fr. hostmaster.dync.fr. 2026051600 21600 3600 604800 86400
OK
root@knot:/etc/knot# knotc zone-set cestquedu.fun @ NS klopmail.dync.fr.
OK
root@knot:/etc/knot# knotc zone-set cestquedu.fun @ NS ns2.netim.net.
OK
root@knot:/etc/knot# knotc zone-commit cestquedu.fun
OK
Attention, il est courant d’oublier le . à la fin d’un FQDN dans une déclaration d’enregistrement. Sans cela vous verrez dans vos réponses des noms complétés par votre nom de domaine.
L’enregistrement SOA désigne notre faux primaire comme master ainsi que les deux serveurs de nom. Le secondaire étant celui de mon nouveau bureau d’enregistrement (il fournit le service).
En allant dans /var/lib/knot, on constate du nouveau. Le fichier de zone a été peuplé avec ce que nous avons demandé, mais surtout que knot a généré des clés (DNSKEY) et signé le tout (RRSIG). De plus, la commande keymgr cestquedu.fun list montre les clés.
Du côté du bureau d’enregistrement
Chez mon bureau d’enregistrement, je choisis des DNS personnalisés klopmail.dync.fr et ns2.netim.net.
Sur mon serveur master, je récupère les enregistrements DS en lançant :
keymgr cestquedu.fun list
Puis je copie l’identifiant de la clé KSK et je lance la commande keymgr cestquedu.fun ds <identifiant>, cela me génère les deux DS en sha256 et sha384.

Dans l’interface de gestion de mon nom de domaine, je clique sur le bouton orange ‘Gestion des enregistrements DS’, puis je les renseignent (copie/colle):

Bon, là il faut attendre un peu – quelques heures – que tous les TTL expirent, Cela doit converger et fonctionner.
Pour déboguer, lancer des dig sur différents serveurs dont celui du TLD peut aider
dig ns01.trs-dns.net. cestquedu.fun NS +trace
Ou encore jeter un oeil aux traces des serveurs par
journalctl -xeu knot.service
DNSViz : https://dnsviz.net peut aussi aider. On retrouve les n° de clés vu dans keymgr.

Enfin, zone check peut aider : Zonemaster.
Conclusion
Knot répond entièrement à mes modestes besoins. La configuration est aisée et la gestion de DNSSEC transparente. Je ferai un retour sur les premiers renouvellements de clé
j’ai eu quelques soucis avec les DNS secondaires de Netim, finalement j’ai recours à ceux d’Hetzner
