Vous n'êtes pas identifié.
Situation: vous êtes l'heureux propriétaire d'un nom de domaine, et vous avez votre propre serveur DNS. Vous avez aussi un serveur a domicile avec une IP dynamique, et vous aimeriez donner un nom DNS a ce serveur, sans passer par un service de DNS dynamique daubesque qui vous impose des restrictions débiles.
Vous possédez le domaine exemple.com, et contrôlez un serveur DNS maître pour ce domaine, ns.exemple.com, qui utilise BIND9. Le serveur a domicile, que vous souhaitez appeler serveur.exemple.com, dispose de l'outil nsupdate (généralement disponible dans le package bind-tools ou équivalent, avec dig et consorts)
HOWTO:
Commençons par définir une nouvelle zone dédiée pour la machine. Ceci permettra de changer le contenu du reste du domaine sans altérer l'enregistrement dynamique de serveur.exemple.com. En effet, les mises a jour dynamiques du DNS ne sont pas stockées, donc si vous rechargez la configuration de la zone correspondante, elles sont perdues. Une zone dédiée permet de confiner les enregistrements dynamiques et leur permet de survivre au rechargement des autres zones.
Comme nous ne sommes intéressés que par une seule machine (serveur.exemple.com), nous allons créer une zone avec le même nom. Créez une nouvelle zone vide a l'endroit approprié (varie selon les distributions, typiquement dans /var/named ou sous /etc/bind). Par exemple, /var/named/serveur.zone
@ IN SOA serveur.exemple.com. administrator.exemple.com. ( 1 28800 7200 2419200 86400 ) NS ns.exemple.com. A 0.0.0.0
Générez ensuite une nouvelle clef symétrique TSIG (Les clefs asymétriques SIG(0) sont parait-il plus délicates a utiliser, et pas forcément moins sûres dans certaines conditions):
dnssec-keygen -a HMAC-MD5 -n 512 -n HOST serveur.exemple.com.
Ceci créera deux fichiers, Kserveur.exemple.com.+157+?????.key et .private. (le contenu est identique pour une clef TSIG mais il y a deux fichiers pour des raisons historiques)
Ouvrez le fichier .private nouvellement créé et copiez la chaine clef (Le champ après Key:):
Private-key-format: v1.2 Algorithm: 157 (HMAC_MD5) Key: blahblahblahblahblahblah
Ouvrez maintenant le fichier de configuration de BIND (/etc/named.conf, /etc/bind/named.conf, suivant la distribution), et ajoutez-y les sections suivantes:
1) La clef elle-même:
key "serveur.exemple.com." { algorithm HMAC-MD5; secret "blahblahblahblahblah"; };
2) La zone dynamique, avec une référence vers la clef:
zone "serveur.exemple.com" IN { type master; file "/var/named/serveur.zone"; update-policy { grant serveur.exemple.com. name serveur.exemple.com. A; }; allow-transfer { none; }; notify no; };
puis rechargez la configuration de BIND:
rndc reload
Copiez les deux fichier Kserveur.exemple.com.+157+??????.* sur serveur.exemple.com au moyen d'un canal sécurisé. (scp, disquette, ...)
Reste un moyen de découvrir l'adresse IP locale pour déclencher une mise a jour. Exemple de script:
#!/bin/bash # (C) BOFH 2006 INTERFACE='eth0' #interface a mettre a jour HOSTNAME='serveur.exemple.com' #nom DNS NS='ns.exemple.com' #Serveur responsable pour la zone KEYFILE='/etc/Kserveur.exemple.com.+157+??????.private' TTL='86400' # TTL de l'enregistrement # Extraction de l'adresse actuelle avec l'outil d'iproute2 CURRENT_IP=`ip addr show dev $INTERFACE |grep inet |cut '-d ' -f6 |cut -d/ -f1` # Ancienne IP via host # on ignore les problèmes, vu que dans ce cas il faudra mettre a jour de toute # facon OLD_IP=`host $HOSTNAME |cut '-d ' -f4` if [ "$CURRENT_IP" = "$OLD_IP" ] then echo "L'adresse n'a pas changé." >&2 else (echo "server $NS" echo "zone $HOSTNAME" echo "update delete $HOSTNAME A" echo "update add ${HOSTNAME}. $TTL A $CURRENT_IP" echo "send" ) | nsupdate -k '$KEYFILE' echo "OK" fi
serveur.exemple.com et ns.exemple.com doivent avoir leurs horloges synchronisées pour
que les clefs TSIG fonctionnent, donc ntp est recommandé, et la configuration du fuseau horaire doit être correcte.
Hors ligne