Depuis que nous avons acheté notre maison avec ma femme, j’ai quitté Free et l’Adsl poussif pour passer chez SFR et la fibre (bon, c’est du coax, mais les débits sont excellent ainsi que la latence, le seul point qui change de la vraie fibre, c’est l’upload, limité à 100 Mbits.. (ce qui reste tres large on en convient…).
Bref, je ne suis pas la pour faire de la promo ou quoi qu’est, mais en passant chez SFR, j’ai maintenant une Ip dynamique, ce qui peut être bien dans certains cas, mais dans d’autres (serveurs par ex), c’est vite problématique.
Sachant que je veux que mon serveur à domicile soit accessible par un sous domaine géré par mon dns (qui lui est sur ma dédibox), je dois avoir mon fichier de zone sur la box qui pointe le sous domaine
Alors certes, il existe les ddns, etc… Ou je pourrais le faire à la main…
Un petit système client-serveur en python, ça fera l’affaire, et c’est l’occasion de faire un article.
Pour l’idée, c’est que le serveur tourne sur ma VM DNS sur ma dédibox, en écoute permanente.
Sur mon serveur à domicile, j’ai un client, qui s’exécute de manière régulière (par une tâche cron) et qui se connecte au serveur. Le serveur lit alors le fichier de zone et regarde si l’ip correspondante à mon sous domaine correspond à celle du client. Si ce n’est pas le cas, un nouveau fichier zone est généré (en incrémentant au passage le serial) et bind est rechargé.
Sur le papier, c’est pratique, pas con et simple.
I – Préparatifs
L’avantage du python, c’est que c’est rapide à mettre en place.
# apt-get install python
sur le serveur et le client.
II – Le code
Pour le code, je vous invite à le consulter sur mon serveur Git :
Client : http://git.debugo.fr/niko/python-dns-client/src/branch/master/client.py
Serveur : http://git.debugo.fr/niko/python-dns-serv/src/branch/master/server.py
Récupération sur un linux :
# mkdir xxx # cd xxx # git init
Pour le serveur :
# git remote add origin https://git.debugo.fr/niko/python-dns-serv.git
Pour le client :
# git remote add origin https://git.debugo.fr/niko/python-dns-client.git
Puis :
# git pull remote origin
Côté client, renseignez l’IP du serveur, la key (sur 16 caractères) et le code.
Côté serveur, même key et même code. Renseignez également le sous domaine à rechercher.
III – Installation
Ensuite, pour activer tout cela :
Sur le serveur, on va créer un service. Dans un fichier /etc/systemd/system/pyserv.service :
[Unit] Description=Server Python After=network-online.target [Service] Type=idle ExecStart=/usr/bin/python /srv/server.py [Install] WantedBy=multi-user.target
Puis on l’active et on démarre :
# systemctl enable pyserv.service # systemctl start pyserv.service
Sur le client, une tache cron :
# crontab -e
Et ajoutez :
*/5 * * * * python /srv/client.py >/dev/null 2>&1
Et voila une affaire qui roule !