Avant-propos
Pour des besoins personnels à la maison, j'ai installé VSphere, sur lequel j'exécute un routeur virtuel et un serveur Ubuntu en tant que serveur multimédia et un tas d'autres goodies, et ce serveur doit être accessible depuis Internet. Mais le problème est que mon fournisseur fournit des données statiques contre de l'argent, qui peuvent toujours être utilisées à des fins plus utiles. Par conséquent, j'ai utilisé la combinaison ddclient + cloudflare.
Tout allait bien jusqu'à ce que ddclient cesse de fonctionner. Après avoir fouillé un peu, je me suis rendu compte que le moment était venu des béquilles et des vélos, car il fallait trop de temps pour trouver le problème. En fin de compte, tout s'est transformé en un petit démon qui fonctionne et je n'ai besoin de rien d'autre.
Si quelqu'un est intéressé, bienvenue chez Cat.
Outils utilisés et comment « ça » fonctionne
Donc la première chose que j'ai découverte sur le site cloudflare, c'est tout ce que vous devez savoir sur
En général, l'emballage a été pris comme base
J'ai pris l'un des exemples de mise à jour DNS et ajouté l'utilisation d'un fichier de configuration et la possibilité de mettre à jour plusieurs enregistrements A au sein d'une zone et, bien sûr, un nombre illimité de zones.
La logique est la suivante:
- Le script reçoit une liste de zones du fichier de configuration et les parcourt
- Dans chaque zone, le script parcourt chaque enregistrement DNS de type A ou AAAA et vérifie l'adresse IP publique avec l'enregistrement
- Si l’adresse IP est différente, il la change ; sinon, il saute l’itération de la boucle et passe à la suivante.
- S'endort pendant le temps spécifié dans la configuration
Installation et configuration
Il serait probablement possible de créer un package .deb, mais je ne suis pas doué pour cela et ce n’est pas si difficile.
J'ai décrit le processus en détail dans README.md sur
Mais juste au cas où, je vais le décrire en russe en termes généraux :
- Assurez-vous que python3 et python3-pip sont installés, sinon, installez-les (sous Windows, python3-pip est installé avec Python)
- Cloner ou télécharger le référentiel
- Installez les dépendances requises.
python3 -m pip install -r requirements.txt
- Exécutez le script d'installation
Pour Linux:chmod +x install.sh sudo ./install.sh
Pour Windows : windows_install.bat
- Modifier le fichier de configuration
Pour Linux:sudoedit /etc/zen-cf-ddns.conf
Fenêtres :
Ouvrez le fichier zen-cf-ddns.conf dans le dossier où vous avez installé le script.
Il s'agit d'un fichier JSON ordinaire, les paramètres n'ont rien de compliqué - j'y ai spécifiquement décrit 2 zones différentes à titre d'exemple.
Qu'y a-t-il derrière les installateurs ?
install.sh pour Linux :
- Un utilisateur est créé pour exécuter le démon, sans créer de répertoire personnel et sans possibilité de se connecter.
sudo useradd -r -s /bin/false zen-cf-ddns
- Un fichier journal est créé dans /var/log/
- Faire de l'utilisateur nouvellement créé le propriétaire du fichier journal
- Les fichiers sont copiés à leur place (config dans /etc, fichier exécutable dans /usr/bin, fichier de service dans /lib/systemd/system)
- Le service est activé
windows_install.bat pour Windows :
- Copie l'exécutable et le fichier de configuration dans un dossier spécifié par l'utilisateur
- Crée une tâche dans le planificateur pour exécuter le script au démarrage du système
schtasks /create /tn "CloudFlare Update IP" /tr "%newLocation%" /sc onstart
Après avoir modifié la configuration, le script doit être redémarré ; sous Linux, tout est simple et familier :
sudo service zen-cf-ddns start
sudo service zen-cf-ddns stop
sudo service zen-cf-ddns restart
sudo service zen-cf-ddns status
pour Windows, vous devrez tuer le processus pythonw et réexécuter le script (je suis trop paresseux pour écrire un service pour Windows en C#) :
taskkill /im pythonw.exe
Ceci termine l'installation et la configuration, profitez-en pour votre santé.
Pour ceux qui veulent voir le code pas si joli de Python, le voici
Licence MIT, alors faites ce que vous voulez avec ce genre de choses.
PS : je comprends que cela s'est avéré être un peu une béquille, mais il fait son travail avec brio.
MISE À JOUR : 11.10.2019/17/37 XNUMX:XNUMX
J'ai trouvé 1 autre problème, et si quelqu'un me dit comment le résoudre, je lui en serai très reconnaissant.
Le problème est que si vous installez des dépendances sans sudo python -m pip install -r ..., alors les modules ne seront pas visibles depuis l'utilisateur du service, et je ne voudrais pas forcer les utilisateurs à installer des modules sous sudo, et c'est Pas correcte.
Comment le rendre beau ?
UPD : 11.10.2019/19/16 XNUMX:XNUMX Le problème a été résolu en utilisant venv.
Il y a eu plusieurs changements. La prochaine version arrivera dans les prochains jours.
Source: habr.com