Première rédaction de cet article le 9 janvier 2008
Aujourd'hui, avec les mécanismes d'allocations d'adresses IP existants (cf. RFC 7020), il est relativement fréquent d'avoir à changer son adresse IP. Quelles sont les précautions particulières liées au DNS lors de ce changement ?
Supposons donc qu'un utilisateur aie une machine à lui chez Slicehost, Gandi, OVH ou un autre. L'adresse IP de cette machine est « fixe » au sens où elle ne change pas toutes les 24 heures, mais rien ne garantit qu'elle ne changera jamais. Une nouvelle configuration du réseau, un changement de fournisseur (pour les hébergeurs qui n'ont pas leurs propres adresses IP) et on doit changer. Il existe plusieurs précautions à prendre lors d'un tel changement mais on ne parle ici que de celles liées au DNS.
D'abord et avant tout, il faut penser que les informations distribuées par le DNS sont gardées dans des caches. La durée de vie maximale dans le cache est gouvernée par un paramètre nommé le TTL (RFC 1034, section 3.6), que l'administrateur de la zone fixe lui-même. Il est recommandé de réduire ce TTL avant le changement.
dig peut afficher le TTL, ce qui permet de vérifier la configuration serveur :
% dig @mon-serveur A www.venezvoirchezmoi.fr. ... www.venezvoirchezmoi.fr. 86400 IN A 192.0.2.249
Le TTL indiqué par le serveur faisant autorité est donc de 86400 secondes. Sur un serveur ne faisant pas autorité, le TTL diminue petit à petit et indique donc combien de temps il reste avant le renouvellement du cache :
% dig A www.venezvoirchezmoi.fr. www.venezvoirchezmoi.fr. 33982 IN A 192.0.2.249
Cette deuxième requête a interrogé le résolveur local, qui ne fait pas autorité, et a donné l'information à partir de son cache. L'enregistrement était déjà dans ce cache depuis 86400 - 33982 = 52418 secondes.
Cas le plus simple ; soit un bête enregistrement ordinaire qui stocke une adresse IP d'un serveur Web (ici, en IPv6) :
www IN AAAA 2001:DB8::DEAD:BABE
Son TTL va être donné (si on utilise BIND ou NSD) par la directive
$TTL
. Mais on peut la
changer pour chaque enregistrement :
www 300 IN AAAA 2001:DB8::DEAD:BABE ; Trois cents seconds, soit cinq minutes
Ainsi, lors du changement d'adresse, il n'y aura que cinq minutes de problème au maximum.
On peut descendre le TTL à 60 si on est pressé, mais il vaut mieux éviter de l'abaisser à zéro, pas mal de FAI l'ignorent (car il y a trop d'abus) et le forcent à une valeur plus élevée (ce qui, formellement, viole le RFC).
Évidemment, il faut faire ce changement de durée de vie à l'avance (si le TTL actuel est de 86 400 secondes, il faut faire le changement au moins une journée avant).
À l'heure H, on peut alors changer l'enregistrement (ici le AAAA, l'heure H est celle où on indique la nouvelle adresse IP). Il ne faut pas remonter le TTL tout de suite, il faut tester d'abord que tout marche bien.
Le TTL ne gouverne que la durée de vie dans les caches des
résolveurs ne faisant pas autorité. Pour les serveurs faisant autorité
sur la zone (le maître, autrefois nommé « primaire » et les esclaves,
autrefois nommés « secondaires »), il faut aussi surveiller leur
synchronisation. Si, par exemple, les NOTIFY (messages DNS normalisés
dans le RFC 1996 et permettant de prévenir immédiatement les esclaves) sont ignorés (il peut y avoir
des tas de raisons pour cela), le temps de synchronisation va
s'ajouter au TTL. Les esclaves ayant raté le NOTIFY ne seront
synchronisés qu'au prochain test. Les tests sont effectués toutes les
Refresh
secondes, avec rééssai toutes les
Retry
secondes en cas d'échec. Les paramètres
Refresh
et Retry
sont fixés
dans l'enregistrement SOA. On voit donc l'importance de tester la
synchronisation des serveurs de la zone avant
l'heure H.
Maintenant, cas compliqué, l'adresse IP peut se trouver à d'autres endroits que la zone :
Un coup de grep dans
/etc/**
est donc recommandé pour trouver toutes
les occurrences de l'ancienne adresse IP.
Pour le cas registre / registrar, ça dépend de leur réactivité combinée. Là encore, il vaut mieux étudier avant. Il est donc prudent de prévoir un recouvrement (ancien serveur qui marche toujours) si on change la colle (enregistrements d'adresses qui sont stockés dans la zone parente).
Cette question étant souvent celle qui pose le plus de problèmes, il faut donc faire doublement attention lorsqu'on change l'adresse IP d'une machine qui est serveur de noms, surtout lorsqu'elle a un nom dans la zone servie (obligeant ainsi le registre à garder la colle).
Prenons l'exemple de la machine 192.0.2.53
,
qui est connue sous le nom de ns1.example.com
et
qui est serveur de noms de la zone
example.com
. Le fait qu'elle soit nommée dans la
zone qu'elle sert oblige le registre de
.com
à distribuer la
colle, et donc à mémoriser l'adresse IP (certains registres gardent
l'adresse IP des serveurs même lorsqu'elle n'est pas nécessaire, ce
qui est mal vu, mais arrive). Son changement d'adresse va donc
nécessiter de vérifier l'information distribuée par le registre (et
mise à jour via le registrar puisque
.com
impose le passage par
un intermédiaire). Voyons avec dig comment vérifier l'adresse
distribuée par le registre, en interrogeant les serveurs de noms de
Verisign :
% dig @a.gtld-servers.net A ns1.example.com. ns1.example.com. 172800 IN A 192.0.2.3
(Notez que cette réponse ne fait pas autorité, le
flag aa
sera donc absent.)
Le DNS ne reflète pas toujours l'état actuel de la base de données du
registre. Selon les cas, il peut être prudent de vérifier avec
whois :
% whois -h whois.internic.net ns1.example.com Server Name: NS1.EXAMPLE.COM IP Address: 192.0.2.3
Ces deux commandes permettent de voir si les changements ont bien été transmis au registre, et exécutés.
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)