Je suis Charlie

Autres trucs

Accueil

Seulement les RFC

Seulement les fiches de lecture

Ève

NSD 4, plus dynamique

Première rédaction de cet article le 26 février 2014


J'ai déjà parlé ici du serveur de noms nsd, le logiciel actuellement le plus rapide pour servir des zones DNS. Un reproche souvent fait à NSD est son côté très statique. Pour ajouter ou retirer une zone, voire simplement pour changer l'adresse IP d'un serveur maître, il faut redémarrer complètement le serveur. La version 4 de NSD, sortie il y a peu, règle ce problème.

Avec la version 4, NSD dispose enfin d'un logiciel de contrôle, nsd-control (équivalent du unbound-control d'Unbound, du rndc de BIND ou du knotc de Knot). Cela permet des choses triviales comme :

% sudo nsd-control status   
version: 4.0.1
verbosity: 1
ratelimit: 200

Mais on peut aussi avoir des informations par zone. Un des serveurs de nom d'eu.org utilise ainsi NSD 4 depuis deux mois :

% sudo nsd-control zonestatus eu.org
zone:	eu.org
	state: ok
	served-serial: "2014022601 since 2014-02-26T09:43:38"
	commit-serial: "2014022601 since 2014-02-26T09:43:38"

On a aussi des statistiques (ici, juste après un démarrage du serveur) :

% sudo nsd-control stats
num.queries=27
num.type.A=18
num.type.MX=4
num.type.TXT=1
num.type.AAAA=2
num.type.SRV=1
...
num.rcode.NOERROR=26
num.rcode.NXDOMAIN=1
...
num.edns=19
...
num.udp=24
num.udp6=3
num.tcp=0
num.tcp6=0
...

Mais tout ceci est en lecture seule. L'important est qu'on peut aussi modifier la configuration du serveur en vol. Je modifie le nsd.conf pour diminuer la tolérance du limiteur de trafic (rrl-ratelimit: 100) puis :

% sudo nsd-control reconfig
reconfig start, read /etc/nsd/nsd.conf
ok

% sudo nsd-control status  
version: 4.0.1
verbosity: 1
ratelimit: 100

Et j'ai la nouvelle valeur.

Et si je veux ajouter une zone à servir ? On peut simplement l'ajouter à nsd.conf et faire un nsd-control reconfig :

% sudo nsd-control reconfig
reconfig start, read /etc/nsd/nsd.conf
ok

% sudo nsd-control zonestatus
...
zone:	example.com
	state: refreshing
	served-serial: none
	commit-serial: none

Et, très peu de temps après :

% sudo nsd-control zonestatus example.com
zone:	example.com
	state: ok
	served-serial: "2014022601 since 2014-02-26T10:17:27"
	commit-serial: "2014022601 since 2014-02-26T10:17:27"

Et le serveur va alors répondre avec autorité aux requêtes DNS concernant cette zone. Mais il existe une autre méthode, plus adaptée aux gens qui gèrent plein de zones à la configuration identique. Avec cette seconde méthode, on n'ajoute pas la zone dans nsd.conf. Il faut qu'il existe dans le nsd.conf un pattern indiquant les paramètres de la zone. On pourra ensuite ajouter la zone dynamiquement en se référant à ce pattern. Voici un exemple de pattern nommé personalslave :

pattern:
    name: personalslave
    allow-notify: 2001:db8:cafe::1:53 NOKEY
    request-xfr: AXFR  2001:db8:cafe::1:53 NOKEY

Et la création d'une zone qui ne sera pas dans nsd.conf :

% sudo nsd-control addzone example.org personalslave
ok

% sudo nsd-control zonestatus example.org
zone:	example.org
	pattern: personalslave
	state: ok
	served-serial: "2014022400 since 2014-02-26T10:26:40"
	commit-serial: "2014022400 since 2014-02-26T10:26:40"

La détruire est aussi simple :

% sudo nsd-control delzone example.org          
ok

Il y a encore plein de choses à voir mais je vous laisse déjà vous amuser avec cela.

Version PDF de cette page (mais vous pouvez aussi imprimer depuis votre navigateur, il y a une feuille de style prévue pour cela)

Source XML de cette page (cette page est distribuée sous les termes de la licence GFDL)