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’
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.
* * * * * root bash /chemin_script/dyndns.sh