Predslov
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ť
Vo všeobecnosti sa ako základ bral obal
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á:
- Skript dostane zoznam zón z konfiguračného súboru a prechádza cez ne
- 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
- Ak je IP iná, zmení ju, ak nie, preskočí iteráciu slučky a prejde na ďalšiu.
- 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
Ale pre každý prípad to opíšem v ruštine všeobecne:
- 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)
- Naklonujte alebo stiahnite úložisko
- Nainštalujte požadované závislosti.
python3 -m pip install -r requirements.txt
- Spustite inštalačný skript
Pre Linux:chmod +x install.sh sudo ./install.sh
Pre Windows: windows_install.bat
- 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:
- 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
- Súbor denníka sa vytvorí v /var/log/
- Urobte z novo vytvoreného používateľa vlastníka súboru denníka
- 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)
- Služba je aktivovaná
windows_install.bat pre Windows:
- Skopíruje spustiteľný a konfiguračný súbor do užívateľom zadaného priečinka
- 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
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