Accueil > Domotique > DynHost d’OVH avec une LiveBox Play d’Orange

DynHost d’OVH avec une LiveBox Play d’Orange

vendredi 11 septembre 2015, par Steve

Introduction

Je souhaitais rendre accessible un CubieTruck qui me sert pour Seafile (cloud privé) et pour une application de domotique. Mon choix s’est porté sur OVH avec sa solution DynHost incluse dans l’offre Nom de domaine.

Configuration de DynHost

Il faut évidemment se connecter à son compte. On sélectionne ensuite le nom de domaine que l’on souhaite utiliser. Puis on choisit l’onglet DynHost.

Là, sur la droite, on choisit Ajouter un DynHost.

Une boîte de dialogue apparaît dans laquelle on indique le sous-domaine ainsi que l’adresse IP actuelle de sa Livebox Play.

Maintenant, on va créer un identifiant pour pouvoir mettre à jour l’adresse IP de manière automatique. Pour cela, on choisit Gérer les accès sur la droite.

Toujours sur la droite, on sélectionne Créer un identifiant.

On saisit l’identifiant, le nom de sous-domaine ainsi que le mot de passe choisi.

C’est tout pour la partie DynHost. Un peu de patience est nécessaire avant que le sous-domaine soit accessible.
De plus, la page d’Adrin FURET [1] me fût d’un grand secours pour comprendre le service DynHost d’OVH.

Configuration de la Livebox Play

Ici, il faut aller dans la configuration avancée puis choisir configuration réseau sur la gauche. Moi, j’ai choisi de diriger tous les flux vers mon pare-feu avec la fonction DMZ de la Livebox Play.

Je n’ai rien fait de plus pour ce point-là.

Le script de mise à jour

Ce script est fortement inspiré par celui de Zwindler [2]. J’y ai corrigé quelques bourdes et, surtout, remplacer l’appel à des services de type « http://ifconfig.me/ip» et « http://checkip.dyndns.com/» par l’appel à un json via curl [3].
Il comporte aussi une condition qui limite la taille du fichier de consignation.
Je vous livre le résultat ci-dessous :

#! /bin/bash
# Mainly inspired by DynHost script given by OVH
# New version by zwindler (zwindler.fr/wordpress)
# Newer version stores the return code in the logfile (smuller@s-muller.fr)
#
# Initial version was doing nasty grep/cut on local ppp0 interface
#
# This coulnd't work in a NATed environnement like on ISP boxes
# on private networks.
#
# Also got rid of ipcheck.py thanks to mafiaman42
#
# This script uses curl to get the public IP, and then uses wget
# to update DynHost entry in OVH DNS
#
# Logfile: dynhost.log
#
# CHANGE: "HOST", "LOGIN" and "PASSWORD" to reflect YOUR account variables

HOST="sous-domaine"
LOGIN="identifiant"
PASSWORD="mot de passe"
LOG_PATH="chemin pour le stockage des fichiers de journalisation"
LIVEBOX="adresse IP de la Livebox Play"

echo ---------------------------------- >> $LOG_PATH/dynhost.log
echo `date` >> $LOG_PATH/dynhost.log
echo 'DynHost' >> $LOG_PATH/dynhost.log

TMPFILE=`tempfile`

IP=`curl -s -X POST -H "Content-Type: application/json" -d '{"parameters":{}}'  http://$LIVEBOX/sysbus/NMC:getWANStatus | sed -e 's/.*"IPAddress":"\(.*\)","Remo.*/\1/g'`
IPv6=`curl -s -X POST -H "Content-Type: application/json" -d '{"parameters":{}}'  http://$LIVEBOX/sysbus/NMC:getWANStatus | sed -e 's/.*"IPv6Address":"\(.*\)","IPv6D.*/\1/g'`
OLDIP=`dig +short @$LIVEBOX $HOST`

if [ $IP ]; then
       if [ $OLDIP != $IP ]; then
               echo -n 'Old IP: ' >> $LOG_PATH/dynhost.log
               echo $OLDIP >> $LOG_PATH/dynhost.log
               echo -n 'New IP: ' >> $LOG_PATH/dynhost.log
               echo $IP >> $LOG_PATH/dynhost.log
               echo 'Try to update!' >> $LOG_PATH/dynhost.log
               wget -q -O $TMPFILE "http://www.ovh.com/nic/update?system=dyndns&hostname=$HOST&myip=$IP" --user="$LOGIN" --password="$PASSWORD" >> $LOG_PATH/dynhost.log
               RESULT=`cat $TMPFILE`
               echo "Result: $RESULT" >> $LOG_PATH/dynhost.log
               if [[ $RESULT =~ ^(good|nochg).* ]]; then
                       echo ---------------------------------- >> $LOG_PATH/dynhost-changes.log
                       echo `date` >> $LOG_PATH/dynhost-changes.log
                       echo "New IP : $IP" >> $LOG_PATH/dynhost-changes.log
               fi
               rm $TMPFILE
       else
               echo "IP $HOST $OLDIP is identical to WAN $IP! No update required." >> $LOG_PATH/dynhost.log
       fi
else
       echo 'WAN IP not found. Exiting!' >> $LOG_PATH/dynhost.log
fi

# Some implementations of 'wc' use tabulation as separator others use space.
NB_LINES=`wc -l $LOG_PATH/dynhost.log | cut -d" " -f1 | cut -f1`
if [ "$NB_LINES" -gt "200" ]; then
       tail -n100 $LOG_PATH/dynhost.log >> $TMPFILE
       mv $TMPFILE $LOG_PATH/dynhost.log
fi

crontab

J’ai simplement rajouté la ligne ci-dessous au fichier /etc/crontab afin de vérifier le changement d’adresse IP toutes les 5 minutes :

       */5     *       *       *       *       root    /chemin vers le script executable/dynhost

Conclusion

La mise en œuvre n’est pas bien compliqué mais la recherche de tous les éléments a été chronophage d’où cette synthèse qui, je l’espère, profitera au plus grand nombre. J’allais oublier, j’ai trouvé les codes de retour du moteur DynDNS sur le site de Matthias PIERSCHEL [4]

Messages

Un message, un commentaire ?

modération a priori

Ce forum est modéré a priori : votre contribution n’apparaîtra qu’après avoir été validée par un administrateur du site.

Qui êtes-vous ?
Votre message
  • Pour créer des paragraphes, laissez simplement des lignes vides.