Installé avec le paquet dnsutils
Rmq : Un zone dynamique, c’est-à-dire contenant l’option allow-update et mise à jour via le serveur DHCP ou l’utilitaire nsupdate, ne doit pas être éditée manuellement. Ou alors, et ceci est à effectuer le plus rarement possible, il faut geler (freeze) la zone en question, procéder à sa modification puis dégeler la mise à jour dynamique de la zone. Pour ce type de modification, voir la commande rndc. Toujours est-il qu’il faut préférer la mise à jour des zones dynamiques par l’utilitaire nsupdate.
Toute modification des enregistrements d’une zone via nsupdate entraîne une incrémentation automatique du serial du SOA correspondant.
Pré-requis
La zone à modifier doit être dynamique, donc contenir l’option allow-update, et permettre la modification par localhost ou déclarer une clef TSIG identifiant un hôte autorisé à effectuer la requête de mise à jour dynamique, cette clé étant définie dans le fichier /etc/bind/named.conf afin d’être connue dans la définition de la zone située dans le fichier /etc/bind/named.conf.local.
zone "opensharing.priv" IN {
type master;
[...]
allow-update { localhost; key "tsig-key"; };
[...]
};
Ici, on a autorisé localhost pour nsupdate en local et déclaré la clef tsig-key utilisée par le serveur DHCP pour l’autoriser à mettre à jour la zone dynamiquement, sous réserve qu’il possède la même clef dans sa configuration.
Sans l’une de ces autorisations, l’utilisation locale de nsupdate aboutit au message suivant :
update failed: REFUSED
Afficher la version de la commande nsupdate
apt-cache policy dnsutils
Lancer l’utilitaire nsupdate
Sans clef TSIG (si localhost est déclaré) :
# nsupdate
Avec clef TSIG (si la clef TSIG est déclarée) :
# nsupdate -k /etc/bind/tsig.key
Rmq : Après mise à jour d’une zone par nsupdate, les modifications sont immédiatement prises en compte dans la copie de la zone stockée en mémoire par le serveur. Toutefois, seul le fichier journal est physiquement modifié, le fichier de zone ne l’est pas instantanément. Il faut attendre les synchronisations périodiques (très fréquentes, environ 20 minutes maximum) se basant sur le journal pour que le fichier de zone soit modifié à son tour, ou forcer sa modification par un rndc freeze-reload-thaw, mais cela implique de geler les mises à jour dynamiques. Le mieux est donc de forcer, si l’on ne souhaite pas attendre, la synchronisation entre le journal et le fichier de zone. Pour cela voir la commande rndc sync. Le journal de mises à jour dynamiques n’est pas dans un format lisible, pour le visualiser voir la commande named-journalprint.
Supprimer un enregistrement (interactivement)
> update delete opsi.opensharing.priv cname
OU version longue :
> update delete opsi.opensharing.priv 86400 cname opsi-test.opensharing.priv
> send
> quit
On supprime ici l’enregistrement de type CNAME opsi.opensharing.priv.
Autres exemples (une seule zone à la fois) :
> update delete opsi-test.opensharing.priv a > send > update delete 13.1.168.192.in-addr.arpa ptr > send
Ajouter un enregistrement (interactivement)
> update add opsi-test.opensharing.priv 86400 a 192.168.1.13
On ajoute ici un enregistrement de type A, de TTL 86400 secondes, où opsi-test.opensharing.priv pointe vers l’IP 192.168.1.13
Autres exemples (une seule zone à la fois) :
> update add opsi.opensharing.priv 86400 cname opsi-test.opensharing.priv > send > update add 13.1.168.192.in-addr.arpa 86400 ptr opsi.opensharing.priv > send
Effectuer plusieurs modifications de zone
Pour modifier plusieurs enregistrements (une zone à la fois), il faut forcer la connexion en TCP au lieu de UDP utilisé par défaut.
En effet, si la requête de mise à jour dépasse 512 octets alors une connexion TCP est requise.
Pour cela, utiliser l’option -v en lançant nsupdate :
nsupdate -v
Ceci est utile, par exemple, lorsqu’on effectue plusieurs modifications d’un seul coup, en utilisant un fichier en entrée (voir l’option suivante).
Utiliser un fichier en entrée contenant les modifications à apporter
nsupdate -v filename
Visualisation étape par étape d’une mise à jour dynamique via un fichier :
Etat des enregistrements avant modifications :
# dig axfr opensharing.priv | grep opsi opsi.opensharing.priv. 86400 IN CNAME opsi-test.opensharing.priv. opsi-test.opensharing.priv. 86400 IN A 192.168.1.13 # dig axfr 1.168.192.in-addr.arpa | grep opsi 13.1.168.192.in-addr.arpa. 86400 IN PTR opsi.opensharing.priv.
Utilisation du fichier arbitrairement nommé temp.txt contenant les modifications suivantes :
update delete opsi-test.opensharing.priv a update add opsi-test.opensharing.priv 86400 a 192.168.1.50 update delete opsi.opensharing.priv any update add opsi2.opensharing.priv 86400 cname opsi-test.opensharing.priv send update delete 13.1.168.192.in-addr.arpa ptr update add 50.1.168.192.in-addr.arpa 86400 ptr opsi-test.opensharing.priv update add 50.1.168.192.in-addr.arpa 86400 ptr opsi2.opensharing.priv send
Lancement de la mise à jour dynamique :
# nsupdate -v temp.txt
Etat des enregistrements après modifications :
# dig axfr opensharing.priv | grep opsi opsi-test.opensharing.priv. 86400 IN A 192.168.1.50 opsi2.opensharing.priv. 86400 IN CNAME opsi-test.opensharing.priv. # dig axfr 1.168.192.in-addr.arpa | grep opsi 50.1.168.192.in-addr.arpa. 86400 IN PTR opsi-test.opensharing.priv. 50.1.168.192.in-addr.arpa. 86400 IN PTR opsi2.opensharing.priv.