Architecture DNS faisant autorité
Un petit schéma valant mieux qu'un grand discours :
/---------------------------------------------\
| outils (knot) |
| |
| Dépôt « dns-records » dans /srv/dns-records |
| | |
| script postupdate |
| | |
| ↓ |
| configuration des zones |
| | |
\-------------------|-------------------------/
|
|
/-------------------|-------------------------\
| ↓ |
| configuration des zones sur les esclaves |
| |
| gaffe et radeau (bind) |
\---------------------------------------------/
Serveur maître : outils
Installation et configuration de knot
apt install knot
Une fois le paquet installé, on crée le répertoire slaves (destiné à accueillir les zones pour lesquelles outils serait esclave) et on clone le dépôt des enregistrements dns :
mkdir /etc/knot/slaves cd /etc/knot git clone /srv/dns-records chown -R knot:knot /etc/knot/
Dans le /etc/knot/knot.conf
:
- dans la section
server
, on donne les IPs/ports sur lesquels knot écoute et l'utilisateur qui fait tourner le serveur ; - dans la section
remote
, on peut saisir des noms pour des machines ou réseaux, qui serviront plus tard pour les master/slaves ; - dans la section
acl
, on spécifie les autorisations pour les différentes IPs ; - dans la section
zone
, pour chaque zone, on donne le fichier de zone, ainsi que les ACls à utiliser et les serveurs à notifier pour les zones masters.
Mise en place du dépôt et du script d'update
Le script se situe dans /usr/local/sbin/update-ns-records
, appelé par un hook
dans le dépôt git avec sudo : /srv/dns-records/hooks/post-update
.
À chaque push sur le dépôt, le script :
- fait un pull du dépôt dans
etc/knot/records/
; - incrémente le numéro de série des zones (le même pour tout le monde) ;
- vérifie les fichiers de zone et la configuration du serveur ;
- envoie un mail pour dire si ça s'est bien passé.
Mise à jour des zones et des enregistrements
Pour les enregistrements, il suffit de cloner le dépôt enregistrements-dns, de faire les modifications voulues dans les zones, commiter et pusher ; les scripts vont se charger du reste.
Attention : lors du push on a ce type de message :
[…]
remote: From /srv/dns-records
remote: * branch master -> FETCH_HEAD
remote: 72e426f..62af07c master -> origin/master
remote: Updating 72e426f..62af07c
remote: Fast-forward
remote: grenode.zone | 4 ++--
remote: 1 file changed, 2 insertions(+), 2 deletions(-)
remote: error: failed to connect to socket '/run/knot/knot.sock' (not exists)
remote: OK: nameserver restarted with serial 2018092303.
[…]
Le message error: failed to connect to socket '/run/knot/knot.sock' (not
exists)
n'est pas important, c'est juste la console de configuration qui n'est
pas configurée comme il s'y attend.
Le message important est OK: nameserver restarted with serial
, qui signifie
que tout va bien ; en cas d'erreur, on a un message du type : Error in zones
configuration: try again!
.
Pour rajouter des zones, voilà comment faire avec la zone example.net
.
Sur le master
On crée le fichier de zone /etc/knot/db.example.net
sur outils, dans
etc/knot/
. Attention, il faut penser à mettre le même serial que les
autres, sinon, il peut y avoir des soucis de mise à jour :
$TTL 10800
@ IN SOA ns3.grenode.net. root.grenode.net. (
XXXXXXXXXX ; serial
6h ; refresh
1h ; retry
7W ; expire
1h ; TTL minimum
)
$ORIGIN example.net.
$INCLUDE "/etc/knot/dns-records/example.net.zone"
On édite ensuite /etc/knot/knot.conf
pour y ajouter :
- domain: example.net
file: "db.example.net"
notify: [gaffe.grenode.net, radeau.grenode.net]
acl: [acl_ttnn, acl_ldn]
On pense à etckeeper au passage ;)
Sur les slaves
Sur gaffe et radeau, éditer /etc/bind/named.conf.local
pour y ajouter :
zone "example.net" {
type slave;
file "/var/lib/bind/slaves/db.example.net";
masters { 91.216.110.20; 2001:912:404:100::2; };
allow-query { any; };
allow-transfer { none; };
};
On pense à etckeeper au passage ;)
Sur le dépôt
On crée le nouveau fichier de zone example.net.zone
dans le dépôt
dns-records
, avec comme enregistrements minimaux :
@ IN NS ns3.grenode.net.
@ IN NS ns5.grenode.net.
@ IN NS ns6.grenode.net.
Penser à ajouter dans le fichier les MX et d'autres enregistrements si voulus…
Pusher les mises à jour.
Relance
Sur gaffe / radeau :
systemctl restart bind9
Sur outils (normalement pas nécessaire) :
systemctl restart knot