Au radio club, nous disposons d’une connexion Internet dont l’IP publique est dynamique. Ce qui n’est pas idéal pour héberger quelques services.
Heureusement, nous avons un nom de domaine auprès du bureau d’enregistrement Gandi, nous allons pouvoir utiliser un script python pour mettre à jour l’enregistrement DNS correspondant à notre IP publique en créant un enregistrement de type A.
Pour cela, nous allons utiliser un script disponible sur Github : https://github.com/cavebeat/gandi-live-dns et l’API « Live DNS » de Gandi.
Il faut tout d’abord se rendre sur votre compte Gandi afin de récupérer votre clé pour l’API, à l’adresse suivante : https://account.gandi.net/fr puis cliquer sur « Sécurité » et enfin « générer la clef d’API ».
Vous devez ensuite créer l’entrée DNS que vous souhaitez modifier.
Cette procédure a été testée avec une Debian sur pc et Raspberry-pi (raspbian) :
Mettre à jour notre distribution :
apt-get update && apt-get upgrade
Puis installons les paquets nécessaires :
apt-get install unzip python-requests python-args python-simplejson git
Récupérez le script python :
git clone https://github.com/cavebeat/gandi-live-dns.git
Puis, il faut se rendre dans répertoire du script et créer le fichier de config :
cd gandi-live-dns/src/
cp example.config.py config.py
Nous allons éditer le fichier config afin de modifier plusieurs paramètres :
api_secret = 'renseigner_ici_la_clé_API_que_vous_avez_généré'
domain = 'votrenomdedomaine.fr'
subdomains = ["votre_sous-domaine_à mettre_à_jour"]
ifconfig = 'la_page_web_permettant_de_connaitre_votre_ip'
(il y a une liste d’exemple de site que vous pouvez renseigner).
Vous pouvez tester le bon fonctionnement du script en l’exécutant :
./gandi-live-dns.py
Si vous n’avez pas d’erreur et que votre enregistrement dns a été mis à jour, vous pouvez ajouter une tâche CRON en l’éditant avec la commande :
$ crontab -e
Puis ajouter la ligne suivante :
*/5 * * * * /chemin_vers_le_dossier/gandi-live-dns/src/gandi-live-dns.py >/dev/null 2>&1
Vous pouvez enregistrer et quitter crontab.