Váš vlastný dynamický DNS pomocou CloudFlare

Predslov

Váš vlastný dynamický DNS pomocou CloudFlare Pre osobnú potrebu doma som si nainštaloval VSphere, na ktorom prevádzkujem virtuálny router a server Ubuntu ako media server a kopu iných vychytávok a tento server by mal byť dostupný z internetu. Problém je však v tom, že môj poskytovateľ dáva za peniaze statické údaje, ktoré sa dajú vždy použiť na užitočnejšie účely. Preto som použil kombináciu ddclient + cloudflare.

Všetko bolo v poriadku, kým ddclient neprestal fungovať. Keď som sa trochu pohrabal, uvedomil som si, že prišiel čas na barle a bicykle, pretože hľadanie problému zabralo príliš veľa času. Nakoniec sa všetko zmenilo na malého démona, ktorý jednoducho funguje a nič viac nepotrebujem.
Ak má niekto záujem, vitajte na kat.

Použité nástroje a ako „to“ funguje

Takže prvá vec, ktorú som zistil na stránke cloudflare, je všetko, o čom potrebujete vedieť API. A už som si sadol implementovať všetko v Pythone (po zoznámení sa s Pythonom ho čoraz častejšie používam na nejaké jednoduché úlohy alebo keď potrebujem rýchlo vyrobiť prototyp), keď som zrazu narazil na takmer hotovú implementáciu.
Vo všeobecnosti sa ako základ bral obal python-cloudflare.

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

Logika je nasledovná:

  1. Skript dostane zoznam zón z konfiguračného súboru a prechádza cez ne
  2. V každej zóne skript prechádza cez každý DNS záznam typu A alebo AAAA a kontroluje verejnú IP so záznamom
  3. Ak je IP iná, zmení ju, ak nie, preskočí iteráciu slučky a prejde na ďalšiu.
  4. Zaspí na čas uvedený v konfigurácii

Inštalácia a konfigurácia

Pravdepodobne by bolo možné vytvoriť balík .deb, ale nie som v tom dobrý a nie je to také ťažké.
Proces som veľmi podrobne opísal v README.md na stránka úložiska.

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

  1. Uistite sa, že máte nainštalovaný python3 a python3-pip, ak nie, nainštalujte ho (v systéme Windows je python3-pip nainštalovaný spolu s Pythonom)
  2. Naklonujte alebo stiahnite úložisko
  3. Nainštalujte požadované 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 skript nainštalovali.

    Ide o bežný JSON súbor, nastavenia nie sú nič zložité – konkrétne som v ňom ako príklad opísal 2 rôzne zóny.

Čo sa skrýva za inštalatérmi?

install.sh pre Linux:

  1. Používateľ je vytvorený na spustenie démona bez vytvorenia domovského adresára a bez možnosti prihlásiť sa.
    sudo useradd -r -s /bin/false zen-cf-ddns

  2. Súbor denníka sa vytvorí v /var/log/
  3. Urobte z novo vytvoreného používateľa vlastníka súboru denníka
  4. Súbory sa skopírujú na svoje miesta (config v /etc, spustiteľný súbor v /usr/bin, servisný súbor v /lib/systemd/system)
  5. Služba je aktivovaná

windows_install.bat pre Windows:

  1. Skopíruje spustiteľný a konfiguračný súbor do užívateľom zadaného priečinka
  2. Vytvorí úlohu v plánovači na spustenie 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 všetko 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 budete musieť zabiť proces pythonw a znova spustiť skript (som príliš lenivý na to, aby som napísal službu pre Windows v C#):

taskkill /im pythonw.exe

Tým je inštalácia a konfigurácia dokončená, užite si to na svoje zdravie.

Pre tých, ktorí chcú vidieť nie príliš pekný kód Pythonu, tu je úložisko na GitHub.

S licenciou MIT, tak si s týmito vecami robte, čo chcete.

PS: Chápem, že sa to ukázalo ako troška barlička, ale svoju úlohu to robí s ofinou.

UPD: 11.10.2019 17:37
Našiel som ešte 1 problém, a ak mi niekto povie, ako ho vyriešiť, budem veľmi vďačný.
Problém je, že ak nainštalujete závislosti bez sudo python -m pip install -r ..., moduly nebudú viditeľné pre používateľa služby a nerád by som nútil používateľov inštalovať moduly pod sudo, a to je nesprávne.
Ako to urobiť, aby to vyzeralo krásne?
UPD: 11.10.2019 19:16 Problém bol vyriešený pomocou venv.
Došlo k niekoľkým zmenám. Ďalšie vydanie bude v najbližších dňoch.

Zdroj: hab.com

Pridať komentár