dimanche 9 août 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 !

3 commentaires:

  1. Salut Lermit,

    Je te remercie pour ton script et tes explications. C'est parfait pour moi !

    RépondreSupprimer
  2. Un grand merci! Exactement ce qu'il me fallait.
    De plus, ce script est customisable si l'on a plusieurs sous-domaine chez OVH.

    Encore merci

    RépondreSupprimer
  3. Merci beaucoup !
    Incroyable qu'il y ait si peu de doc sur le sujet...
    J'ai juste modifié ton script pour qu'il aille récupérer mon ip public sur une page de mon routeur plutôt qu'un site distant.

    RépondreSupprimer