EDIT 30.08.2012:
Mon script a arrêté de fonctionné il y a quelques mois. Je n’ai pas pris le temps de résoudre le problème avant aujourd’hui.
En fait, whatismyip.org a décidé de bloquer les requêtes par script, et pour ce faire en remplacer l’adresse IP retournée sur sa page par une image. Bien sûr, l’impact a été pour tous les clients de ce type se servant de whatismyip.org y compris dydns.org. Ceux-ci ont réagit en créant la page checkip.dydns.org.
Afin de résoudre le problème donc, j’ai du trouver la parade pour extraire l’adresse IP de checkip.dydns.org, ce que j’ai trouvé sur un forum. Vive la communauté. Le script ci-dessous est donc corrigé.
J’ai un compte ZoneEdit.com que j’utilise pour accéder facilement à mon réseau domestique. Jusque là, j’avais un routeur avec client ddns intégré. Ca fonctionne très bien, mais comme j’ai un serveur, et que j’ai commencé à déplacer tous les services dessus, je me suis penché sur la possibilité de faire les update ddns directement depuis mon serveur. Voilà ce que ça donne.
L’exécution se fait par
./ddns [hote]
hote étant le nom cours, la zone étant paramétrée dans le script ci-dessous.
hote = nom d’une machine (par exemple www ou maison ou tintin)
zone = domaine.tld (par exemple mondomain.com ou chezmoi.fr ou milou.be)
Tous les commentaires dans le scripts son normalement suffisemment explicite. Mais si vous avez des questions, postez un commentaire. J’y répondrai volontiers.
#!/bin/sh
#
# script de mise à jour DDNS pour un compte zoneedit.com
# Auteur: Akim Sissaoui
# Site web: https://akim.sissaoui.com
#
# Exécution du script: ./ddns [hostname]
#
# ATTENTION: NE pas exécuter ./ddns [fqdn] mais bien ./ddns [hostname] avec le nom court du système.
#
# Si aucun hôte n'est spécifié, l'adresse IP sera adressée à toute la zone en @.domaine.dlt
# Indication des détails de votre compte zoneedit.com et adresse email pour la confirmation de mise à jour
USER=[nom d'utilisateur zoneedit]
PASS=[mot de passe zoneedit]
ZONE=[domaine.ext]
EMAIL=votre@adresse.email
# Constantes nécessaires pour l'enregistrement des messages de retour
TMP1=/tmp/ddns_tmp1
TMP2=/tmp/ddns_tmp2
# Récupération de l'adresse IP actuelle
currentip=`wget --no-check-certificate -q checkip.dyndns.org -O index.html && cat index.html|cut -d ' ' -f 6 | cut -d '<' -f 1`
# Création de la fonction de mise à jour du DynDNS chez Zoneedit.com updateddns() { # Envoie de la mise à jour pour le hôte indiqué et envoi d'un email de confirmation
wget -O $TMP1 --http-user=$USER --http-passwd=$PASS --no-check-certificate "https://dynamic.zoneedit.com/auth/dynamic.html?host=$1.$ZONE"
echo ZoneEdit.com - Mise à jour DDNS > $TMP2
echo Heure: `date '+%T - %e %B'` >> $TMP2
echo Hôte: $1 >> $TMP2
echo Zone: $ZONE >> $TMP2
echo IP: $currentip >> $TMP2
cat $TMP1 >> $TMP2
cat $TMP2 | mail -s "ZoneEdit.com - Mise à jour pour $1.$ZONE" $EMAIL
rm -f $TMP1 $TMP2
}
# Vérification et si nécessaire création de la constante /tmp/myip contenant l'adresse IP publique
# et exécution immédiate de la mise à jour
if [ ! -f /tmp/$1.myip ]
then
echo $currentip > /tmp/$1.myip
updateddns $1
echo "Il semble que c'était la première exécution. La mise à jour a été demandée et la constante crée."
exit
fi
# Vérification de la date de création de la constante myip (recréée à chaque exécution). Si moins de deux minutes, abandon du script
lastcheck=`date -ur /tmp/$1.myip +%s`
frequency=$(( `date -u +%s` - $lastcheck ))
if [ "$frequency" -lt "120" ]
then
echo "Dernière vérification il y a moins de deux minutes. Patientez un peu avant de recommencer afin d'éviter d'attirer les foudres de dyndns.org"
exit
fi
# Vérification de l'IP et comparaison à l'IP précédemment enregistrée. Si l'IP a changé, on recrée la constante /tmp/myip avec la nouvelle IP, et on demande l'update de zoneedit.com
if [ "$currentip" != "`cat /tmp/$1.myip`" ]
then
echo "L'IP a changé. La mise à jour va être effectuée"
rm /tmp/$1.myip
echo $currentip > /tmp/$1.myip
updateddns $1
echo "Mise à jour effectuée"
else
echo "L'adresse IP n'a pas changé. La mise à jour n'est pas nécessaire"
rm /tmp/$1.myip
echo $currentip > /tmp/$1.myip
fi