Vaše vlastní dynamické DNS pomocí CloudFlare

předmluva

Vaše vlastní dynamické DNS pomocí CloudFlare Pro osobní potřebu doma jsem si nainstaloval VSphere, na kterém provozuji virtuální router a server Ubuntu jako media server a spoustu dalších vychytávek a tento server by měl být přístupný z internetu. Problém je ale v tom, že můj poskytovatel dává za peníze statická data, která se dají vždy použít k užitečnějším účelům. Proto jsem použil kombinaci ddclient + cloudflare.

Vše bylo v pořádku, dokud ddclient přestal fungovat. Když jsem se trochu pohrabal, uvědomil jsem si, že nastal čas pro berle a kola, protože hledání problému zabralo příliš mnoho času. Nakonec se vše proměnilo v malého démona, který prostě funguje, a nic víc nepotřebuji.
Pokud má někdo zájem, vítejte na kočičce.

Používané nástroje a jak „to“ funguje

Takže první věc, kterou jsem na webu cloudflare zjistil, je vše, o čem potřebujete vědět API. A už jsem si sedl k implementaci všeho v Pythonu (po seznámení s Pythonem ho stále častěji používám na nějaké jednoduché úkoly nebo když potřebuji rychle vyrobit prototyp), když jsem najednou narazil na téměř hotovou implementaci.
Obecně se jako základ bral obal python-cloudflare.

Vzal jsem jeden z příkladů aktualizace DNS a přidal použití konfiguračního souboru a možnost aktualizovat několik záznamů A v rámci zóny a samozřejmě neomezený počet zón.

Logika je následující:

  1. Skript obdrží seznam zón z konfiguračního souboru a prochází je
  2. V každé zóně skript prochází každý záznam DNS typu A nebo AAAA a kontroluje veřejnou IP se záznamem
  3. Pokud je IP jiná, změní ji, pokud ne, iteraci smyčky přeskočí a přejde na další.
  4. Usne na dobu zadanou v konfiguraci

Instalace a konfigurace

Pravděpodobně by bylo možné vytvořit balíček .deb, ale nejsem v tom dobrý a není to vůbec těžké.
Proces jsem velmi podrobně popsal v README.md na stránka úložiště.

Ale pro každý případ to popíšu v ruštině obecně:

  1. Ujistěte se, že máte nainstalované python3 a python3-pip, pokud ne, nainstalujte je (ve Windows je python3-pip nainstalován spolu s Pythonem)
  2. Naklonujte nebo stáhněte úložiště
  3. Nainstalujte požadované závislosti.
    python3 -m pip install -r requirements.txt

  4. Spusťte instalační skript
    Pro Linux:

    chmod +x install.sh
    sudo ./install.sh

    Pro Windows: windows_install.bat

  5. Upravte konfigurační soubor
    Pro Linux:

    sudoedit /etc/zen-cf-ddns.conf

    Pro Windows:

    Otevřete soubor zen-cf-ddns.conf ve složce, do které jste skript nainstalovali.

    Jedná se o běžný JSON soubor, nastavení není nic složitého – konkrétně jsem v něm jako příklad popsal 2 různé zóny.

Co se skrývá za instalátory?

install.sh pro Linux:

  1. Je vytvořen uživatel, který spustí démona bez vytvoření domovského adresáře a bez možnosti přihlášení.
    sudo useradd -r -s /bin/false zen-cf-ddns

  2. Soubor protokolu se vytvoří v /var/log/
  3. Udělejte z nově vytvořeného uživatele vlastníka souboru protokolu
  4. Soubory jsou zkopírovány na svá místa (config v /etc, spustitelný soubor v /usr/bin, servisní soubor v /lib/systemd/system)
  5. Služba je aktivována

windows_install.bat pro Windows:

  1. Zkopíruje spustitelný a konfigurační soubor do uživatelem zadané složky
  2. Vytvoří úlohu v plánovači pro spuštění skriptu při spuštění systému
    schtasks /create /tn "CloudFlare Update IP" /tr "%newLocation%" /sc onstart

Po změně konfigurace je třeba skript restartovat; v Linuxu je vše jednoduché a známé:

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

pro Windows budete muset zabít proces pythonw a znovu spustit skript (jsem příliš líný napsat službu pro Windows v C#):

taskkill /im pythonw.exe

Tím je instalace a konfigurace dokončena, užijte si to na své zdraví.

Pro ty, kteří chtějí vidět nepříliš hezký kód Pythonu, tady je úložiště na GitHubu.

S licencí MIT, tak si s tím dělejte, co chcete.

PS: Chápu, že se to ukázalo jako trochu berlička, ale svou práci dělá s nádechem.

UPD: 11.10.2019. 17. 37 XNUMX:XNUMX
Našel jsem ještě 1 problém a pokud mi někdo poradí, jak to vyřešit, budu moc vděčný.
Problém je, že pokud nainstalujete závislosti bez sudo python -m pip install -r ..., pak moduly nebudou viditelné pro uživatele služby a nerad bych nutil uživatele instalovat moduly pod sudo, a to je nesprávné.
Jak to udělat, aby to vypadalo krásně?
UPD: 11.10.2019 19:16 Problém byl vyřešen pomocí venv.
Došlo k několika změnám. Další vydání bude v nejbližších dnech.

Zdroj: www.habr.com

Přidat komentář