Pour réaliser cette prouesse, il est nécessaire de créer une clé pour l'authentification,
de modifier le serveur pour authoriser la mise à jour si la clé est ok, et de faire exécuter
la mise à jour par le client quand il change d'adresse ip.

Coté serveur :

On génère les clés sur le serveur parce que dnssec-keygen est fournit par le paquet serveur.
dnssec-keygen -a HMAC-MD5 -b 128 -n HOST ns1.gluglu.org
Ca génère 2 clés :
  • Kkey-dns.+157+62637.key
  • Kkey-dns.+157+62637.private
que j'ai mis dans /etc/bind
On les tranfère sur le client (je les ai mis dans /root/.ssh)

Dans /etc/named.conf ajouter la section :
key "key-dns" {
        algorithm hmac-md5;
        secret "PRi1XXXXXXXXXXXxGLA==";
};
Modifier la zone que l'on veut mettre à jour :
zone "gluglu.org" {
        type master;
        file "gluglu.org";
        allow-transfer {
                217.70.176.0/20;
                80.67.173.196;
        };
        allow-query {
                any;
        };
        allow-update {
                key "key-dns";
        };
};
Redémarrer bind.

Coté client

Le script /root/bin/maj_dns génère un fichier /root/etc/nsupdate
qui est utilisé lors de la mise à jour de nsupdate à ns1.gluglu.org
#!/bin/sh
ip_addr=$(/sbin/ifconfig ppp0 2>/dev/null | grep 'inet' | sed 's/ /:/g' | cut -f13 -d:)
echo "update delete climb.gluglu.org. A" > /root/etc/nsupdate
echo "update add climb.gluglu.org. 60 IN A $ip_addr" >> /root/etc/nsupdate
echo "" >> /root/etc/nsupdate
/usr/bin/nsupdate -k /root/.ssh/Kkey-dns.+157+62637.private -d /root/etc/nsupdate
Pour que la mise à jour soit faite à chaque changement d'ip, j'ai fait un lien dans /etc/ppp/ip-up.d/
où tous les scripts sont éxécutés chaque fois qu'une interface est montée.

La doc