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