DynDNS, deux noms, une seule adresse
DynDNS permet d'avoir un nom FQDN pointant sur une adresse IP dynamique (ADSL par exemple). Il existe plusieurs sociétés proposant un tel service gratuitement pour un ou deux noms. Parmi elles, DynDNS. J'ai un compte DynDNS depuis… pfff… longtemps, associé au nom kabs.homeunix.org
. Ma box ADSL a un client DynDNS et gère très bien les mises à jour, je n'ai donc pas à m'en soucier.
Problème : j'ai un deuxième hôte qui doit pointer sur la même adresse or la box ADSL ne sait pas gérer ça.
Solution : utiliser ddclient. Ce script Perl permet de mettre à jour un enregistrement. Il sait gérer différent fournisseurs dont celui qui nous intéresse. Il sait utiliser plusieurs méthodes pour récupérer l'adresse IP à renseigner :
- interrogation d'une page Web
- interrogation d'un modem / routeur
- interrogation d'un script
- utilisation d'une adresse IP fixe
- utilisation de l'adresse d'une interface réseau
Ma box ADSL se gère via une interface Web. Plusieurs solutions s'offrent alors dont en particulier :
- interroger l'interface Web pour récupérer l'adresse publique
- faire confiance au client DynDNS de la box ADSL pour qu'il ait correctement mis à jour le premier enregistrement
kabs.homeunix.org
Étant flemmard de nature, j'ai choisi la seconde solution. Le script trivial :
#!/bin/sh /usr/bin/host kabs.homeunix.org |/usr/bin/egrep -o "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+"
récupère donc l'adresse telle qu'enregistrée par le client sur ma box (script stocké dans /usr/local/scripts/dyndns-foobar.sh
). Plus qu'à l'indiquer au client Perl ; dans le fichier de configuration ddclient.conf
, indiquer :
syslog=yes pid=/var/run/ddclient.pid cache=/var/db/ddclient.cache use=cmd cmd=/usr/local/scripts/dyndns-foobar.sh protocol=dyndns2 server=members.dyndns.org login=plop password=xxx server=members.dyndns.org, \ protocol=dyndns2 \ foobar.dyndns-wiki.com
Lancer :
# ddclient -daemon 500 -syslog
et on voit apparaître dans le journal (/var/log/messages
chez moi) :
ddclient[2617]: SUCCESS: updating foobar.dyndns-wiki.com: good: IP address set to 83.202.88.23
On vérifie que l'adresse est correctement changée.
L'autre solution eut été de récupérer (wget(1)
, curl(1)
, etc.) sur ma box ADSL puis d'extraire du code HTML l'adresse publique avec sed(1)
ou awk(1)
ou… et de l'afficher. Un jour, si je suis courageux…
Mise à jour C'est trivial :
#!/bin/ksh /usr/bin/ftp -o /tmp/i http://r.local/ >/dev/null /usr/bin/egrep -o "\<[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+\>" /tmp/i