Bonjour,
Objectif :
Je vous propose ce petit tuto pour mettre à jour votre Ddns en dialoguant uniquement avec votre Livebox, sans utiliser un service extérieur tiers pour récupérer son IP public.
Motivation :
J'ai mis en place cette solution, en remplacement de l'image Docker DuckDNS qui spam le réseau Wan tout les 3 à 7 minutes et fausse mes stats PiHole.
Solution :
Je vais présenter deux solutions :
- Une utilisant un Workflow n8n (un fichier JSON) : simple, il y a juste à remplacer les emails, mot de passe, token et chemin pour le stockage du fichier contenant votre ip actuelle dans le fichier JSON.
- Une méthode avec cURL ou il faudra bidouiller avec le cron et des scripts Bash sur votre machine.
Perso, j'utilise le Workflow sous n8n que j'ai créé n'ayant pas trouver d"équivalent sur le net (le seul que j'ai trouvé, spammait le WAN sans dialogue avec la Box)
- La méthode n8n :
Ce que cela donne graphiquement :
Le principe : Tous les deux minutes, il fait deux requêtes HTTP avec la Livebox pour récupérer son IP public et la compare avec l'IP actuel sauvegardée dans un fichier local.
Si l'IP est différente, on met à jour DuckDNS et on envoi un email. Même fonctionnement au 1er lancement (en cas d'absence du fichier local contenant l'IP).

Et le fichier JSON :
Il est en pièce jointe ; DuckDNSUpdate.json.txt
Il faut simplement l'importer dans votre éditeur n8n.
Il est plus simple de personnaliser vos paramètres dans le fichier JSON avant de l'importer.
Vous pouvez le faire après coup aussi graphiquement, mais cela sera plus long.
- La méthode curl :
Pré-requis facultatif : commande rq (apt install rq)
Je vous donne les principales requêtes à effectuer :
- Identification avec la Livebox :
La requête vas vous retourner cette séquence :
Il faut maintenant récupérer le cookie et le contextID pour former un 'token' pour la requête prochaine :
Le Token doit avoir cette forme là :
Les commandes en Bash que je faisais sous n8n à adapter :
Cela doit donner ca :
Une fois le Token construit ($TOKEN dans la requête), on envoi la requête pour récupérer l'IP public :
La requête retourne :
Puis il faut récupérer l'IP public sous le nom IPAddress :
Méthode rapide : vous rechercher l'IP précédant dans la chine avec un simple 'grep' et si vous le trouvez pas, il faut le mettre à jour chez DuckDNS.
Pour mettre à jour lIP public chez DuckDNS :
A Terminer (script complet et cron à définir)
Objectif :
Je vous propose ce petit tuto pour mettre à jour votre Ddns en dialoguant uniquement avec votre Livebox, sans utiliser un service extérieur tiers pour récupérer son IP public.
Motivation :
J'ai mis en place cette solution, en remplacement de l'image Docker DuckDNS qui spam le réseau Wan tout les 3 à 7 minutes et fausse mes stats PiHole.
Solution :
Je vais présenter deux solutions :
- Une utilisant un Workflow n8n (un fichier JSON) : simple, il y a juste à remplacer les emails, mot de passe, token et chemin pour le stockage du fichier contenant votre ip actuelle dans le fichier JSON.
- Une méthode avec cURL ou il faudra bidouiller avec le cron et des scripts Bash sur votre machine.
Perso, j'utilise le Workflow sous n8n que j'ai créé n'ayant pas trouver d"équivalent sur le net (le seul que j'ai trouvé, spammait le WAN sans dialogue avec la Box)
- La méthode n8n :
Ce que cela donne graphiquement :
Le principe : Tous les deux minutes, il fait deux requêtes HTTP avec la Livebox pour récupérer son IP public et la compare avec l'IP actuel sauvegardée dans un fichier local.
Si l'IP est différente, on met à jour DuckDNS et on envoi un email. Même fonctionnement au 1er lancement (en cas d'absence du fichier local contenant l'IP).

Et le fichier JSON :
Il est en pièce jointe ; DuckDNSUpdate.json.txt
Il faut simplement l'importer dans votre éditeur n8n.
Il est plus simple de personnaliser vos paramètres dans le fichier JSON avant de l'importer.
Vous pouvez le faire après coup aussi graphiquement, mais cela sera plus long.
- La méthode curl :
Pré-requis facultatif : commande rq (apt install rq)
Je vous donne les principales requêtes à effectuer :
- Identification avec la Livebox :
Code:
HTTP=$(curl --fail -i -S -s http://192.168.1.1/ws -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":"'"passwd"'"}}')
La requête vas vous retourner cette séquence :
Code:
TTP/1.1 200 OK
Set-Cookie: cdda1e19/sessid=Tkht4SU2Sx/O/t3w2qFBSdfF; path=/; SameSite=Strict; HttpOnly
Cache-Control: no-cache
Pragma: no-cache
TE: chunked
Transfer-Encoding: chunked
Content-Type: application/x-sah-ws-4-call+json
X-Content-Type-Options: nosniff
{"status":0,"data":{"contextID":"BTWEBSEywSG3j6mdQnnMXuE4kzLFkiu//4gbeip4nwn1HFQw2vUsbD7LFOs8PMN9","username":"admin","groups":"http,admin"}}%
Il faut maintenant récupérer le cookie et le contextID pour former un 'token' pour la requête prochaine :
Le Token doit avoir cette forme là :
Code:
Cookie: cdda1e19/sessid=Tkht4SU2Sx/O/t3w2qFBSdfF; path=/; SameSite=Strict; HttpOnly
Authorization: X-Sah BTWEBSEywSG3j6mdQnnMXuE4kzLFkiu//4gbeip4nwn1HFQw2vUsbD7LFOs8PMN9
Les commandes en Bash que je faisais sous n8n à adapter :
Code:
COOKIE="{{ $json.headers['set-cookie'] }}"
printf '[{ "Cookie": "%s" , ' "$COOKIE"
AUTH="{{ $json.data }}"
TMP=$(echo $AUTH | cut -d':' -f 4)
AUTH=$(echo $TMP | cut -d',' -f 1)
printf '"auth" : "X-Sah %s" }]' "$AUTH"
Cela doit donner ca :
Code:
TOKEN=$(
echo "$HTTP" | grep ^Set-Cookie | sed 's/^Set-//' | xargs -0 printf "%s"
echo "$HTTP" | tail -n1 | jq -r .data.contextID | xargs -0 printf "Authorization: X-Sah %s"
)
Une fois le Token construit ($TOKEN dans la requête), on envoi la requête pour récupérer l'IP public :
Code:
HTTP=$(curl --fail -s -S -X POST "http://192.168.1.1/ws" -H "$TOKEN" -H "Content-Type: application/x-sah-ws-1-call+json" -d '{"service":"NMC","method":"getWANStatus","parameters":{}}')
La requête retourne :
JSON:
{"result":{"status":true,"data":{"WanState":"up","LinkType":"dsl","LinkState":"up","MACAddress":"64:66:24:CB:26:4E","Protocol":"dhcp","ConnectionState":"Bound","LastConnectionError":"None","IPAddress":"83.197.23.xxx","RemoteGateway":"83.197.16.1","DNSServers":"80.10.246.130,81.253.149.1","IPv6Address":"2a01:cb08:8dae:e900:6666:24ff:fecb:264e","IPv6DelegatedPrefix":"2a01:cb08:8dae:e900::/56"}}}
Puis il faut récupérer l'IP public sous le nom IPAddress :
Méthode rapide : vous rechercher l'IP précédant dans la chine avec un simple 'grep' et si vous le trouvez pas, il faut le mettre à jour chez DuckDNS.
Pour mettre à jour lIP public chez DuckDNS :
Code:
https://www.duckdns.org/update?domains={YOURVALUE}&token={YOURVALUE}[&ip={YOURVALUE}][&verbose=true][&clear=true]
A Terminer (script complet et cron à définir)
Pièces jointes
Dernière édition: