Figurez-vous qu’après mes pérégrinations dans le monde de l’Internet nomade, j’ai eu l’occasion de passer à la Fibre. Et avec elle son lot de « malheurs » : une IP dynamique.

En quoi est-ce problématique ?

Une IP fixe permet de bénéficier d’une adresse constante, c’est à dire qu’elle permet, par exemple, d’avoir un nom de domaine qui redirige vers une à plusieurs machines de la maison. Par exemple avec bogossdu69.fr je pourrais éventuellement arriver sur mon partage de fichiers.

Expansion de lumière

Photo trouvée sur le profil de sattygalle sur Flickr sous licence CC BY-SA 2.0.

La situation

Mon but est donc de mettre à jour régulièrement mes noms de domaine lorsque mon IP change.

Je dispose de :

  • une box Bouygues nommée bbox
  • une ip dynamique
  • un nom de domaine chez Gandi.net
  • une machine allumée en permanence sur la box

L’objectif

Mettre à jour régulièrement le nom de domaine pour qu’il pointe vers ma box en permanence.

Ma solution en 1 commande

En une commande :

curl -s https://mabbox.bytel.fr/api/v1/wan/ip |jq '.[0].wan.ip.address'| xargs -I{} curl -X PUT -H "X-Api-key: LaSuperCleAPIdeGandiV5" -H "Content-Type: application/json" -d '{"rrset_ttl":"1800","rrset_values":["{}"]}' https://dns.api.gandi.net/api/v5/domains/domain.tld/records/bogossdu69/A

En remplaçant :

  • LaSuperCleAPIdeGandiV5 par la clé de sécurité dans votre interface Gandi sur Tableau de Bord > Paramètres > Sécurité > (Re)Générer la clé d’API
  • domain.tld par votre domaine, par exemple dossmann.net
  • bogossdu69 par votre sous-domaine, par exemple olivier (ce qui donnera olivier.dossmann.net)

Le détail

L’idée est de lancer un script régulièrement (par exemple toutes les 5 minutes) sur la machine branchée à la Box.

Pour cela on va utiliser les outils suivants :

L’API de notre box va fournir l’IP publique dynamique de notre connexion internet. jq va permettre la récupération de la bonne information parmi l’ensemble fourni par notre box. Après quoi curl mettra à jour les DNS dynamiques de Gandi (notre fournisseur de nom de domaine).

Il ne nous reste plus qu’à taper la commande entière dans le fichier /etc/systemd/system/maj_domaine.service sous la forme suivante :

[Unit]
Description=Mise a jour du domaine Gandi

[Service]
Environment="API_KEY=oefijzoifjzeoifjzeoifjeo"
ExecStart=/usr/bin/bash /home/user/maj_domaine.sh
Type=simple

N’oubliez pas d’adapter API_KEY avec votre clé d’API et /home/user/ par l’adresse où se trouve le script !

Puis de renseigner le fichier /etc/systemd/system/maj_domaine.timer avec :

[Unit]
Description=Lance maj du domaine toutes les 8 min

[Timer]
OnBootSec=8min
OnUnitActiveSec=8min
Persistent=True
Unit=maj_domaine.service

[Install]
WantedBy=multi-user.target

Il ne nous reste plus qu’à prévenir systemd via les commandes suivantes :

sudo systemctl daemon-reload
sudo systemctl enable maj_domaine.timer
sudo systemctl start maj_domaine.timer
sudo systemctl start maj_domaine.service

Et le tour est joué !

Conclusion

À l’aide des outils listés dans ce billet on peut sans problème survivre à une IP dynamique à la maison chez Bouygues Telecom. Je n’ai eu jusqu’à ce jour aucun problème et espère que cela continuera ainsi.