Featured image of post Client DynDNS pour une Livebox

Client DynDNS pour une Livebox

Client DynDNS pour DuckDNS avec une Livebox

Introduction

Nous avions vu dans un précédant article comment installer l’image Docker de DuckDNS pour mettre à jour automatiquement l’IP de votre nom de domaine gratuit DuckDNS.

C’est une solution simple mais qui génère trés régulierement des requêtes vers l’extérieur pour vérifier si votre IP Wan a changé.

Je vous propose ici un script ‘shell’ qui vas dialoguer directement avec votre LiveBox pour récupérer son IP Wan et c’est seulement dans le cas ou celle ci aura changer qu’il enverra une requête vesr l’extérieur à destination de DuckDNS.

Nous utiliserons le ‘cron’ de votre NAS ou de votre Proxmox pour éxécuter le script régulièrement.

Le script est concu pour fonctionner avec DuckDNS, mais la procédure sera quasi identique pour un autre fournisseur DynDNS (si celui ci n’est pas géré directement votre LiveBox); seul l’URL de lla requête sera différente.

Le script en détail

Il faut remplacer dans le script les champs suivant pour les adapter à votre configuration :

  • FILE_IP_WAN : Le fichier local sur votre machine qui contiendra l’IP Wan en cours,

  • EMAIL : Votre email pour le reporting,

  • DUCKDNS : Vous devrez modifier les champs : ‘subdomain’ et ‘votre_token’,

  • VotreMotDepPasse : Votre mot de passe pour vous connecter à votre Livebox.

      #!/usr/bin/bash
    
      BOX=http://192.168.1.1/ws
      FILE_IP_WAN=/chemin_fichier/ipwan.box
      EMAIL=votre_email@domain.fr
      DUCKDNS="https://www.duckdns.org/update?domains=subdomain.duckdns.org&token=votre_token&ip="
    
      # Login
      RESPONSE=$(curl --fail -i -S -s $BOX -H "Authorization: X-Sah-Login" -H "Content-Type: application/x-sah-ws-4-call+json" \
      -d '{"service":"sah.Device.Information","method":"createContext","parameters":{"applicationName":"webui","username":"admin","password":"VotreMotDepPasse"}}')
    
      # Build Token
      TOKEN=$(
          echo "$RESPONSE" | grep ^Set-Cookie | sed 's/^Set-//' | xargs -0 printf "%s"
          echo "$RESPONSE" | tail -n1 | jq -r .data.contextID | xargs -0 printf "Authorization: X-Sah %s"
      )
    
      RESPONSE=$(curl --fail -s -S -X POST $BOX -H "$TOKEN" -H "Content-Type: application/x-sah-ws-1-call+json" -d '{"service":"NMC","method":"getWANStatus","parameters":{}}')
      IP=$(echo $RESPONSE | jq -r .result.data.IPAddress)
    
      if [ -r $FILE_IP_WAN ]; then 
          if grep -q $IP $FILE_IP_WAN ; then
              DUCKDNS_UPDATED=0;
          else
              DUCKDNS_UPDATED=1;
          fi
      else
          DUCKDNS_UPDATED=1
      fi
    
      if [ "$DUCKDNS_UPDATED" = 1 ]; then
          if [ -z "$IP" ]; then
              echo $IP > $FILE_IP_WAN
              RESPONSE=$(curl $DUCKDNS$IP)
              BODY="La nouvelle adresse IP de la Livebox est "$IP" ("$RESPONSE")"
              echo $BODY | mail -s "[DuckDNS] Updated" $EMAIL
          fi
      fi
    

Vous recevrez un email à chaque modification de votre IP Wan et la première fois que vous lancerer le script.

La tâche cron

Il faudra créer un fichier dans le répertoire /etc/cron.d/ ou utilisez un fichier contenant déja des tâches cron. Je prends l’exemple de création d’un fichier ‘scripts

cd /etc/cron.d
nano scripts

Puis on rajoute la tâche en rajoutant le chemin ou se trouve votre script dans le ‘PATH’ du cron si necessaire. Le script s’é xécutera toutes les minutes.

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/chemin_script
* * * * * root bash /chemin_script/dyndns.sh
Généré avec Hugo
Thème Stack conçu par Jimmy