Votre DNS dynamique avec CloudFlare

Préface

Votre DNS dynamique avec CloudFlare Pour des besoins personnels, j'ai mis en place VSphere à la maison, sur lequel je fais tourner un routeur virtuel et un serveur Ubuntu en tant que serveur multimédia ainsi que plein d'autres choses intéressantes, et ce serveur doit être accessible depuis Internet. Le problème, c'est que mon fournisseur impose des frais pour la connexion statique, que j'aimerais utiliser à des fins plus utiles. C'est pourquoi j'utilisais une combinaison de ddclient et cloudflare.

Tout allait bien jusqu'à ce que ddclient cesse de fonctionner. Après un petit examen, j'ai compris qu'il était temps de bricoler, car chercher le problème devenait trop chronophage. Au final, cela a donné naissance à un petit démon qui fonctionne simplement, ce qui me suffit.
Pour ceux que cela intéresse – bienvenue sous le capot.

Outils utilisés et comment « ça » fonctionne

Alors d'abord, je me suis renseigné sur le site de cloudflare, tout ce que je devais savoir sur API. Et j'étais déjà prêt à tout implémenter en Python (depuis que j'ai découvert Python, je l'utilise de plus en plus pour des tâches simples ou quand je dois rapidement créer un prototype), quand je suis tombé sur une implémentation presque prête.
En gros, j'ai pris comme base un wrapper python-cloudflare.

J'ai pris un des exemples pour mettre à jour le DNS et ajouté l'utilisation d'un fichier de configuration ainsi que la possibilité de mettre à jour plusieurs enregistrements A dans une zone et, bien sûr, un nombre illimité de zones.

La logique est la suivante :

  1. Le script obtient de fichier de configuration une liste de zones et les parcourt en boucle
  2. Dans chaque zone, le script parcourt en boucle chaque enregistrement DNS de type A ou AAAA et compare l'IP publique à l'enregistrement
  3. Si l'IP diffère, il la change, sinon il passe à l'itération suivante de la boucle.
  4. Il fait une pause pour le temps indiqué dans le fichier de configuration

Installation et configuration

Il serait probablement possible de créer un paquet .deb, mais je ne suis pas très compétent dans ce domaine, et ce n'est pas si compliqué.
J'ai décrit le processus assez en détail dans le README.md sur la page du dépôt.

Mais au cas où, je vais expliquer en russe de manière générale :

  1. Assurez-vous d'avoir installé python3 et python3-pip, sinon installez-les (sur Windows, python3-pip s'installe avec Python)
  2. Clonez ou téléchargez le dépôt
  3. Installez les dépendances nécessaires.
    python3 -m pip install -r requirements.txt

  4. Exécutez le script d'installation
    Pour Linux :
    chmod +x install.sh
    sudo . /install.sh

    Pour Windows : windows_install.bat

  5. Modifiez le fichier de configuration
    Pour Linux :
    sudoedit /etc/zen-cf-ddns.conf

    Pour Windows :

    Ouvrez le fichier zen-cf-ddns.conf dans le dossier où vous avez installé le script.

    C'est un fichier JSON ordinaire, avec des paramètres simples - j'ai spécialement décrit comme exemple 2 zones différentes.

Que cache les installateurs ?

install.sh pour Linux :

  1. Un utilisateur est créé pour lancer le démon, sans création de répertoire personnel et sans possibilité de connexion.
    sudo useradd -r -s /bin/false zen-cf-ddns

  2. Un fichier est créé pour écrire des logs dans /var/log/
  3. Nous devenons le propriétaire du fichier log du nouvel utilisateur créé
  4. Les fichiers sont copiés à leurs emplacements respectifs (configuration dans /etc, fichier exécutable dans /usr/bin, fichier de service dans /lib/systemd/system)
  5. Le service est activé

windows_install.bat pour Windows :

  1. Il copie le fichier exécutable et le fichier de configuration dans le dossier spécifié par l'utilisateur
  2. Il 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, c'est simple et habituel :

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, il faudra tuer le processus pythonw et redémarrer le script (je n'ai vraiment pas envie d'écrire un service sous Windows en C#) :

taskkill /im pythonw.exe

Voilà, l'installation et la configuration sont terminées, utilisez-le en toute santé.

Pour ceux qui souhaitent voir un code Python pas très joli, le voici dépôt sur GitHub.

Licence MIT, donc faites ce que vous voulez avec ce bon.

P.S. : Je comprends que cela semble un peu bancal, mais il remplit sa tâche à merveille.

UPD : 11.10.2019 17:37
J'ai trouvé un autre problème, et si quelqu'un peut m'aider à 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 avec sudo, ce n'est pas normal.
Comment faire correctement pour que ce soit joli ?
UPD : 11.10.2019 19:16 Le problème est résolu en utilisant venv.
Il y a eu plusieurs changements. Une nouvelle version sera disponible dans quelques jours.

Source : habr.com

Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS 🔥 Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster