Script de mise à jour DDNS ZoneEdit.com en bash/sh

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: http://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

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *