Svoj dynamický DNS pomocou CloudFlare

Úvod

Svoj dynamický DNS pomocou CloudFlare Pre osobné potreby doma som spustil VSphere, na ktorom spravujem virtuálny router a server Ubuntu ako mediálny server a ešte množstvo ďalších vecí, a tento server by mal byť prístupný z internetu. Ale problém je, že môj poskytovateľ ponúka statickú IP za peniaze, ktoré by sa dali využiť na užitočnejšie účely. Preto som používal kombináciu ddclient + cloudflare.

Všetko bolo v poriadku, pokiaľ ddclient prestal fungovať. Trochu som ho skúmal a zistil som, že prišiel čas na núdzové riešenia, pretože hľadanie problému začalo zaberať príliš veľa času. Nakoniec to vyústilo do malého démona, ktorý jednoducho funguje, a to je presne to, čo potrebujem.
Kto má záujem – vitajte pod katom.

Použité nástroje a ako "to" funguje

Tak najprv som na stránke cloudflare zistil všetko, čo potrebujem vedieť o API. A už som sa chystal realizovať všetko na Pythone (po zoznámení sa s Pythonom, ho čoraz častejšie používam na nejaké jednoduché úlohy alebo keď potrebujem rýchlo vytvoriť prototyp), keď som narazil na prakticky hotovú realizáciu.
Celkom na základe bola použitá obálka python-cloudflare.

Vzali sme jeden z príkladov na aktualizáciu DNS a pridali sme použitie konfiguračného súboru a možnosť aktualizovať niekoľko A záznamov v rámci zóny a prirodzene aj neobmedzený počet zón.

Logika je nasledovná:

  1. Skript získa zo súboru konfigurácie zoznam zón a prejde ich cyklom
  2. V každej zóne skript prechádza cyklom cez každú DNS záznam typu A alebo AAAA a porovnáva verejnú IP s týmto záznamom
  3. Ak sa IP líši — mení ho, ak nie, preskočí iteráciu cyklu a prejde na ďalšiu
  4. Zaspí na čas uvedený v konfiguračnom súbore

Inštalácia a nastavenie

Asi by sa dalo spraviť aj .deb balík, ale v tomto nie som silný, a nie je to až také zložité.
Celý proces som podrobne opísal v README.md na stránke repozitára.

Ale pre každý prípad to opíšem po rusky všeobecne:

  1. Uistite sa, že máte nainštalovaný python3 a python3-pip, ak nie — nainštalujte (v systéme Windows sa python3-pip inštaluje spolu s Pythonom)
  2. Klónujte alebo stiahnite repozitár
  3. Nainštalujte potrebné závislosti.
    python3 -m pip install -r requirements.txt

  4. Spustite inštalačný skript
    Pre Linux:
    chmod +x install.sh
    sudo ./install.sh

    Pre Windows: windows_install.bat

  5. Upravte konfiguračný súbor
    Pre Linux:
    sudoedit /etc/zen-cf-ddns.conf

    Pre Windows:

    Otvorte súbor zen-cf-ddns.conf v priečinku, do ktorého ste nainštalovali skript.

    Toto je bežný JSON súbor, nastavenia nie sú zložité – špeciálne som popísal ako príklad 2 rôzne zóny v ňom.

Čo sa skrýva za inštalátormi?

install.sh pre Linux:

  1. Vytvára sa používateľ pre spustenie démona, bez vytvorenia domovského adresára a možnosti prihlásenia.
    sudo useradd -r -s /bin/false zen-cf-ddns

  2. Vytvára sa súbor pre zápis logu v /var/log/
  3. Robíme vlastníkom súboru logu nedávno vytvoreného používateľa
  4. Súbory sa kopírujú na svoje miesto (konfiguračný súbor do /etc, spustiteľný súbor do /usr/bin, súbor služby do /lib/systemd/system)
  5. Služba sa aktivuje

windows_install.bat pre Windows:

  1. Kopíruje spustiteľný súbor a konfiguračný súbor do priečinka zvoleného používateľom
  2. Vytvára úlohu v plánovači na spúšťanie skriptu pri štarte systému
    schtasks /create /tn "CloudFlare Update IP" /tr "%newLocation%" /sc onstart

Po zmene konfigurácie je potrebné skript reštartovať, v Linuxe je to jednoduché a známe:

sudo service zen-cf-ddns start
sudo service zen-cf-ddns stop
sudo service zen-cf-ddns restart
sudo service zen-cf-ddns status

pre Windows bude potrebné ukončiť proces pythonw a znovu spustiť skript (veľmi sa mi nechce písať službu pre Windows v C#):

taskkill /im pythonw.exe

Na tomto sa inštalácia a nastavenie dokončili, používajte to k šťastiu.

Pre tých, ktorí chcú vidieť nie veľmi pekný kód v Pythone, tu je repozitár na GitHub.

Licencia MIT, takže s týmto materiálom robte, čo chcete.

P.S.: Chápem, že to vyšlo trochu kostrbato, ale so svojou úlohou si poradí skvele.

UPD: 11.10.2019 17:37
Našiel som ešte 1 problém a ak by mi niekto poradil, ako ho vyriešiť – bol by som veľmi vďačný.
Problém je v tom, že ak nainštalujete závislosti bez sudo python -m pip install -r …, tak moduly nebudú viditeľné z používateľskej služby a nechcem nútiť používateľov inštalovať moduly cez sudo, čo nie je správne.
Ako správne to urobiť, aby to bolo pekné?
UPD: 11.10.2019 19:16 Problém bol vyriešený použitím venv.
Objavilo sa niekoľko zmien. Nové vydanie bude čoskoro.

Zdroj: habr.com

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster