Dyndns: Mettre à jour son nom de domaine

Bonjour,

Aujourd’hui nous verrons comment mettre à jour son domaine dyndns avec sa propre adresse ip externe. La particularité est que la machine se trouve dans un réseau privé et n’est pas la passerelle de ce réseau.

Pour le contexte, j’ai une connexion internet chez moi et l’adresse ip qui m’est fournie est dynamique. J’ai besoin de pouvoir me connecter chez moi de l’extérieur et donc d’avoir une information fixe qui me le permette. C’est là toute l’utilité d’un système comme dyndns.

Pour avoir chercher un solution déjà existante, je me suis trouvé confronter à différents problèmes :

  • updatedd : problèmes de mises à jour
  • opendd : prend l’adresse des interfaces réseaux interne de la machine
  • ez-ipupdate : idem opendd
  • inadyn : idem updatedd
  • ipcheck : nécessite python


  • Je souhaitais trouver une application qui soit écrite en shell ou C, pas de perl, de python, etc … Ne trouvant pas mon bonheur, je me suis aidé de cette page https://www.dyndns.com/developers/specs/syntax.html pour écrire mon propre script shell. On utilise uniquement les commandes intégrés au système de base.

    Script nommé simplement dyndns.sh et placé dans /root :

    #!/bin/sh
     
    FETCH="/usr/bin/fetch"
    CUT="/usr/bin/cut"
    TR="/usr/bin/tr"
     
    SERVICE="dyndns"
    CACHEFILE="/tmp/$SERVICE.cache"
    HOSTNAME="monddnshostname"
    DDNSUSER="monddnsuser"
    DDNSPASSWD="monddnspasswd"
    LOGFILE="/var/log/$SERVICE.log"
     
    echo "" >> $LOGFILE
    echo "`basename $0` started at `date`" >> $LOGFILE
     
    # recupere l'adresse ip externe
    MYIP=`$FETCH -q -o - http://checkip.dyndns.org | $CUT -d: -f2 | $CUT -d'<' -f1 | $TR -d " "`
    if [ -z $MYIP ]
    then
            echo "Impossible de recuperer l'adresse ip externe." >> $LOGFILE
            echo "Processus arrete !" >> $LOGFILE
            exit 1
    fi
     
    echo "Adresse IP externe actuelle: $MYIP" >> $LOGFILE
     
    if ! [ -f $CACHEFILE ]
    then
            echo "Fichier $CACHEFILE cree le `date`" >> $LOGFILE
            echo "Adresse $MYIP mise en cache" >> $LOGFILE
            echo $MYIP > $CACHEFILE
            $FETCH -q -o - "http://$DDNSUSER:$DDNSPASSWD@members.dyndns.org/nic/update?hostname=$HOSTNAME&myip=$MYIP&wildcard=NOCHG&mx=NOCHG&backmx=NOCHG" > /dev/null
    else
            CACHEIP=`cat $CACHEFILE`
            echo "Adresse en cache : $CACHEIP" >> $LOGFILE
            if [ $MYIP = $CACHEIP ]
            then
                    echo "Adresses IP reelle et en cache identique : Pas de mise a jour" >> $LOGFILE
            else
                    echo "Nouvelle Adresse IP : $MYIP. Mise a jour" >> $LOGFILE
                    $FETCH -q -o - "http://$DDNSUSER:$DDNSPASSWD@members.dyndns.org/nic/update?hostname=$HOSTNAME&myip=$MYIP&wildcard=NOCHG&mx=NOCHG&backmx=NOCHG" > /dev/null
                    echo $MYIP > $CACHEFILE
            fi
    fi

    Il suffit d’adapter le script avec ses propres valeurs pour :

    HOSTNAME=”hostname.dyndns.org”
    DDNSUSER=”ddnsuser”
    DDNSPASSWD=”ddnspassword”


    On pense à rendre le script executable :

    # chmod a+x /root/dyndns.sh

    On exécute le script toute les deux minutes à l’aide de cron :

    */2 * * * * root /root/dyndns.sh

    Puis on relance le service cron:

    # service cron restart

    Voila donc un petit script shell simple, sans fioritures qui permet de mettre à jour son adresse ip chez dyndns.org.

    A bientot.

    Leave a Reply

    Your email address will not be published. Required fields are marked *


    − 1 = deux