Lerm-IT

Blog traitant de technologies informatiques. Logiciel libre, AdminSys, DevOps et GNU/Linux !

09 Aug 2009

[OVH] Le DynHost de OVH et updatedd

Je me suis heurté aujourd’hui à un bien grave problème. La synchronisation de mon IP dynamique (de chez SFR – anciennement neuf-cegetel) et d’un domaine OVH. Alors voilà la solution !

Tout d’abord il convient de se créer un compte DynHost. Pour cela je vous renvoi à la documentation d’OVH : http://guides.ovh.com/DynDns. Une foie notre compte créé et un domaine paramétré nous utiliserons comme le propose OVH l’utilitaire updatedd dont les sources sont téléchargeables à cette adresse : http://nongnu.askapache.com/updatedd/

Décompressons l’archive

~$ tar xvf updatedd_2.6.tar.gz

Avant d’installer l’utilitaire il convient de le modifier car il y a une petite erreur sur l’adresse de OVH. Pour cela modifier le fichier src/plugins/libovh.h.

~$ nano updatedd-2.6/src/plugins/libovh.h

A la ligne 24, il faudra modifier le ovh.com par www.ovh.com. Ainsi la ligne ressemblera à celle-ci.

#define DYNDNSHOST “www.ovh.com

Il ne nous reste qu'à installer updatedd maintenant.

~$ ./configure
~$ make
~$ su
Mot de passe :
# make install

L’utilisation pour OVH de updatedd ce passe comme suit :

updatedd ovh - –ipv4 ip username:password host

J’ai donc rédigé un script bash pour vérifier l’IP actuelle, la comparer à l’ancienne et faire les mises à jour si c’est nécessaire. Le voici :

#!/bin/bash

## CONFIGURATION ##

# Connection to OVH DynHost
username=user
password=pass
host=my-host.tld

# How to log
# 1 = true, 0 = false
log_change=1
log_no_change=0
log_file=/var/log/dynhost.log

# File with old IP
old_ip_file=/var/cache/ip_old

# To avoid error “file not found”
touch ${old_ip_file}
touch ${log_file}

# Get Public IP
ip=`w3m -dump http://www.monip.org/ | awk -F’: ' ‘/IP/ { print $2 }'`

# Get Old Public IP
ip_old=`cat ${old_ip_file}`

# Test if IPs are equal
if [ “${ip}” = “${ip_old}” ]
then
if [ “${log_no_change}” = “1” ]
then
echo `date`: No IP change was found » ${log_file}
fi
else
echo ${ip} > ${old_ip_file}
if [ “${log_change}” = “1” ]
then
echo “`date`:IP has change. (Old : ${ip_old}, New : ${ip})” » ${log_file}
updatedd ovh - –ipv4 ${ip} ${username}:${password} ${host} » ${log_file}
else
updatedd ovh - –ipv4 ${ip} ${username}:${password} ${host}
fi
fi

Ensuite il suffit de placer ce script quelque part 😉 (pour ma part dans /usr/local/bin) et de configurer un cron pour l’exécution périodique du script 😉 !

Voilà bon courage !

PS : Je ne sais pas si j’ai fait une bonne utilisation des dossiers linux. Donc si quelqu’un d’avertis sur le sujet venait à passer par là je serai preneur d’informations !
PS2 : Le script n’est pas parfait, si j’ai du temps un jour j’en ferai un meilleur !