DNS Dynamique avec un DynHost OVH

Contexte

Mise à jour 10/09/2014

Je me suis apercu que parfois l’IP n’était pas correctement mise à jour malgré le fait que le script tourne réguliérement.

Il semble que parfois ipcheck.py renvoie une erreur, qui n’est pas prise en compte. La nouvelle IP est sauvegardée dans le fichier ; au lancement suivant, le script agit comme si l’IP était à jour.

J’ai tenté un moment de tout remplacer par ddclient, mais IMPOSSIBLE de le faire fonctionner sur ma box linux.

J’ai donc revu et corrigé le script en V2 !

FAI et IP dynamique

Récemment, je suis passé de Free ADSL à une offre Numéricable FTTLA.

Pour l’instant, le service est de bonne qualité. Download x20, Upload x10 par rapport à Free. On est encore loin d’une bonne ligne FTTH symétrique, mais on ne va pas se plaindre, au regard de la connexion "moyenne" en France.

Point noir : La partie routeur de la box est vraiment basique de chez basique.

En vrac : On ne peut pas associer de nom à une adresse mac fixe (pas très pratique), le forwarding de port ne permet pas d’avoir un port extérieur différent de l’intérieur (franchement énervant). J’attends sagement de trouver un remplacant à mon WRT54G, quelque peu dépassé par ces débits. En attendant on fait avec.

Autre soucis, objet de cet article : Pas d’IP fixe chez Numéricable (L’option semble exister mais est payante).

Pour bénéficier d’un point d’accès permanent depuis l’extérieur, il faut donc se rabattre sur une solution type "DynDNS".

Le (double) hic :

  • DynDNS est devenu payant (25$/an)

  • La box Numéricable ne propose seulement que ce service

Une solution alternative à DynDNS

La solution alternative : Utiliser un DynHost (c’est compris avec mon domaine enregistré chez OVH) et le mettre à jour depuis une box Linux via un script.

Cette solution est décrite sur cette page par OVH.

Avantages :

  • Moins cher qu’un compte DynDNS (25$ vs 6€ annuel)

  • Nom de domaine personnalisable

  • Le nom de domaine peut servir à d’autres usages…​

Inconvénients :

  • Nécessite une box Linux allumée en permanence

  • Un peu de config et de shell…​

Pré-requis :

  • Une box Linux (ou un RasPi..) allumée en permanence

  • Un domaine OVH, ou équivalent proposant l’option DynHost (6€ / an chez OVH)

Mise en oeuvre

Configuration DynHost OVH

Étape 1

  • Se connecter à la console OVH

  • Sélectionner le domaine concerné (si il y en a plusieurs sur le compte)

  • Puis dans l’onglet de navigation "Domaine & DNS"

  • Puis "Zone DNS"

ovh1
Figure 1. Manager OVH étape 1

Étape 2

Créer un Alias "Type DynHOST".

Il permet la création d’un sous domaine dynamique.

ovh2
Figure 2. Manager OVH étape 2

Étape 3

  • Entrer un nom de sous-domaine au choix,

  • L’IP actuelle de votre box,

  • Et cocher "Voulez-vous créer un identifiant DynHOST ?"

ovh3
Figure 3. Manager OVH étape 3

Étape 4

  • Revenir à l’écran "Zone DNS"

  • Sélectionner "Identifiants DynHOST"

Ces identifiants permettent une mise à jour extérieure de la zone dynamique précédemment créée

ovh4
Figure 4. Manager OVH étape 4

Étape 5

Remplir les champs avec :

  • Un login au choix

  • Le sous-domaine précédemment créé (Choix dans le select)

  • Un mot de passe

Ces informations seront à reporter dans le script de mise à jour.

ovh5
Figure 5. Manager OVH étape 5

Script de mise à jour de l’IP

Le script suivant, appelé à intervalle régulier à l’aide d’une règle cron, permet de vérifier l’adresse IP publique de la box.

Il est basé sur le script proposé par OVH et nécessite le script python qui y est également fourni.

A chaque appel, le script vérifie l’adresse IP courante. Si cette dernière est modifiée depuis la dernière occurence, la zone DynHost est modifiée.

J’ai modifié le script fourni par OVH :

  • Pour obtenir l’adresse IP publique depuis Internet (monip.org) et non depuis l’interface ppp

  • Pour permettre un meilleur fonctionnement avec cron (chemins complets, plus de log..)

DynHost script
#/bin/sh

#
# CONFIG GOES HERE
#

HOST=myhost.mydomain.net
LOGIN=mylogin
PASSWORD=mypassword

PATH_APP=/home/kemkem/work/dyndns/DynHost
PATH_LOG=$PATH_APP/log
PATH_FILE_OLD_IP=$PATH_APP/old_ip

#
# CONFIG END
#

#prevent error when ipcheck.err exists
rm -f $PATH_APP/ipcheck.err

IP=`lynx -dump http://monip.org | grep 'IP' | sed 's/.*: //;'`
OLD_IP=`cat $PATH_FILE_OLD_IP`

echo > $PATH_LOG
echo "Run dynhost" >> $PATH_LOG
date >> $PATH_LOG

echo "Current IP" >> $PATH_LOG
echo "$IP" >> $PATH_LOG
echo "Previous IP" >> $PATH_LOG
echo "$OLD_IP" >> $PATH_LOG

if [ -z $IP ]; then
       echo "No IP retrieved" >> $PATH_LOG
else
       if [ "$OLD_IP" != "$IP" ]; then
               echo "IP has changed" >> $PATH_LOG
               RESULT=""
               RESULT=`$PATH_APP/ipcheck.py -a $IP $LOGIN $PASSWORD $HOST`
               echo "ipcheck returns : $RESULT" >> $PATH_LOG
               if [ -z "$RESULT" ]; then
                       echo "Success" >> $PATH_LOG
                       echo -n "$IP" > $PATH_FILE_OLD_IP
               else
                       echo "Error : $RESULT" >> $PATH_LOG
               fi
       else
               echo "No IP change" >> $PATH_LOG
       fi
fi

Il ne reste qu’a mettre en place une règle cron adéquate, qui lance le script toute les 5 minutes par exemple.

Pour cela, éditer la crontab courante crontab -e.

Puis ajouter une entrée :

`*/5 * * * * /home/YOURUSER/DynHost/dynhost.sh

Ouvrir le fichier de log dynhost.log pour vérifier que les appels depuis cron passent.

Depuis l’interface OVH, on constatera également les changements d’IP. Pour éviter d’attendre un changement d’IP de la box internet, forcer une adresse IP fictive dans le script)

Version sans vérification de changement d’IP

Ce script permet de forcer la mise à jour de l’IP sans vérifier de vérification au préalable.

Attention à ne pas tomber en abuse.

DynHost script sans vérification d’IP
#/bin/sh

#
# CONFIG GOES HERE
#

HOST=myhost.mydomain.net
LOGIN=mylogin
PASSWORD=mypassword

PATH_APP=/home/kemkem/work/dyndns/DynHost
PATH_LOG=$PATH_APP/log
PATH_IPCHECK=$PATH_APP/ipcheck.py

#
# CONFIG END
#

#prevent error when ipcheck.err exists
rm -f $PATH_APP/ipcheck.err

IP=`lynx -dump http://monip.org | grep 'IP' | sed 's/.*: //;'`

echo >> $PATH_LOG
echo "Run dynhost" >> $PATH_LOG
date >> $PATH_LOG

echo "Current IP" >> $PATH_LOG
echo "$IP" >> $PATH_LOG

if [ -z "$IP" ]; then
       echo "No IP retrieved" >> $PATH_LOG
else
       echo "Update IP" >> $PATH_LOG
       RESULT=`$PATH_IPCHECK -a $IP $LOGIN $PASSWORD $HOST`
       echo "Result : $RESULT" >> $PATH_LOG
       if [ -z $RESULT ]; then
               echo "Success" >> $PATH_LOG
       else
               echo "Error : $RESULT" >> $PATH_LOG
       fi
fi
comments powered by Disqus