Commandes Linux : nsupdate

NSUPDATE

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.
Fermer le menu
%d blogueurs aiment cette page :