předmluva
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
Obecně se jako základ bral obal
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í:
- Skript obdrží seznam zón z konfiguračního souboru a prochází je
- 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
- Pokud je IP jiná, změní ji, pokud ne, iteraci smyčky přeskočí a přejde na další.
- 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
Ale pro každý případ to popíšu v ruštině obecně:
- 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)
- Naklonujte nebo stáhněte úložiště
- Nainstalujte požadované závislosti.
python3 -m pip install -r requirements.txt
- Spusťte instalační skript
Pro Linux:chmod +x install.sh sudo ./install.sh
Pro Windows: windows_install.bat
- 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:
- 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
- Soubor protokolu se vytvoří v /var/log/
- Udělejte z nově vytvořeného uživatele vlastníka souboru protokolu
- Soubory jsou zkopírovány na svá místa (config v /etc, spustitelný soubor v /usr/bin, servisní soubor v /lib/systemd/system)
- Služba je aktivována
windows_install.bat pro Windows:
- Zkopíruje spustitelný a konfigurační soubor do uživatelem zadané složky
- 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
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