UBUNTU – OVH Dynhost


Je me suis heurté aujourd’hui à un bien grave problème. La synchronisation de mon IP dynamique (de chez orange) 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/

Installation des dépendances qui peuvent manquer :

sudo apt-get install build-essential
sudo apt-get install w3m w3m-img

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

Rendre le script exécutable :

sudo chmod +x dynhost.sh

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

sudo su
crontab -e
*/10 * * * * /bin/bash /home/scripts/dynhost.sh
,