Bevezető
Otthoni személyes szükségletekhez felállítottam a VSphere-t, amin virtuális routert és Ubuntu szervert futtatok médiakiszolgálóként, továbbá sokféle érdekes dolgot, és ennek a szervernek elérhetőnek kell lennie az interneten. De a probléma az, hogy a szolgáltatóm pénzért ad statikus IP-címet, amit mindig hasznosabb célra is fel lehetne használni. Ezért a ddclient + cloudflare kombinációt használtam.
Minden jól ment, míg a ddclient meg nem állt. Egy kicsit bogarászva rájöttem, hogy itt az ideje a gyors megoldásoknak, mivel túl sok időt emésztett fel a probléma keresése. Végül mindez egy egyszerű démonba ömlött, ami csak működik, és nekem nem is kell több.
Aki érdekli - üdvözöljük a folytatásban.
Használt eszközök és hogyan működik "ez"
Tehát először is, megtudtam a cloudflare weboldalán, amit tudni érdemes a . És már elkezdtem megvalósítani mindezt Pythonban (miután megismertem a Python-t, egyre inkább alkalmazom egyszerű feladatokhoz vagy amikor gyorsan prototípust kell készítenem), amikor is ráakadtam egy szinte kész megoldásra.
Összességében a .
wrapper alapján elkészítettem egy DNS frissítő példát, amelyhez hozzáadtam a konfigurációs fájl használatát és a lehetőséget, hogy több A rekordot frissítsek egy zónán belül és természetesen korlátlan számú zónát kezelhessen.
A logika a következő:
- A szkript a konfigurációs fájlból megkapja a zónák listáját, és ciklusban végigmegy rajtuk
- Minden zónában a szkript ciklusban átnézi mindegyik A vagy AAAA típusú DNS rekordot, és összehasonlítja a nyilvános IP címet a rekorddal
- Ha az IP címe eltér, módosítja, ha nem, akkor kihagyja a ciklus iterációját, és a következőre lép
- Alszik az adott konfigurációs fájlban megadott ideig
Telepítés és beállítás
Valószínűleg készíthettem volna .deb csomagot is, de nem értek hozzá, és amúgy sem olyan bonyolult az egész.
A folyamatot részletesen leírtam a README.md fájlban a .
De minden esetre leírom oroszul általános szavakkal:
- Győződjön meg róla, hogy telepítve van a python3 és a python3-pip, ha nem - telepítse (Windows alatt a python3-pip a Python-nal együtt települ)
- Klónozza vagy töltse le a repozitóriumot
- Telepítse a szükséges függőségeket.
python3 -m pip install -r requirements.txt - Futtassa a telepítő szkriptet
Linux rendszerre:chmod +x install.sh sudo ./install.shWindowsra: windows_install.bat
- Szerkessze meg a konfigurációs fájlt
Linux rendszerre:sudoedit /etc/zen-cf-ddns.confWindows rendszerre:
Nyissa meg a zen-cf-ddns.conf fájlt abban a mappában, ahova a szkriptet telepítette.
Ez egy szokásos JSON fájl, a beállítások nem bonyolultak – kifejezetten arra írtam példát, hogy két eltérő zónát mutassak be benne.
Mi rejlik a telepítők mögött?
install.sh Linuxhoz:
- Létrehoz egy felhasználót a démon futtatásához, anélkül, hogy létrehozna otthoni könyvtárat vagy lehetőséget logolásra.
sudo useradd -r -s /bin/false zen-cf-ddns - Fájlt hoz létre a napló írásához a /var/log/ könyvtárban.
- A naplófájl tulajdonosává a nemrég létrehozott felhasználót tesszük.
- A fájlokat a megfelelő helyükre másolja (konfig a /etc-be, végrehajtható fájl a /usr/bin-be, szolgáltatás fájl a /lib/systemd/system-be)
- A szolgáltatást aktiválja.
windows_install.bat Windowshoz:
- Másolja a végrehajtható fájlt és a konfigurációs fájlt a felhasználó által megadott mappába.
- Feladatot hoz létre a feladatütemezőben, hogy a szkriptet a rendszer indításakor futtassa.
schtasks /create /tn "CloudFlare Update IP" /tr "%newLocation%" /sc onstart
A konfiguráció módosítása után a szkriptet újra kell indítani, Linuxon ez egyszerű és megszokott:
sudo service zen-cf-ddns start
sudo service zen-cf-ddns stop
sudo service zen-cf-ddns restart
sudo service zen-cf-ddns status
Windows esetén le kell állítani a pythonw folyamatot, és újra kell indítani a szkriptet (nagyon lusta vagyok, hogy Windows-ra szerver szolgáltatást írjak C#-ban):
taskkill /im pythonw.exeEzzel a telepítés és beállítás véget ért, használjátok egészséggel.
Azoknak, akik szeretnének megnézni egy nem túl szép Python kódot, itt van. .
MIT licenc, tehát csinálj vele, amit csak akarsz.
P.S.: Értem, hogy kicsit ügyetlenül sikerült, de a feladatát remekül végzi.
UPD: 2019.10.11 17:37
Találtam még egy problémát, és ha bárki meg tudja mondani, hogyan lehetne megoldani – nagyon hálás lennék.
A probléma az, hogy ha a függőségeket sudo python -m pip install -r ... nélkül telepíted, akkor a szolgáltatás felhasználója nem fogja látni a modulokat, és nem szeretném, ha a felhasználóknak sudo alatt kellene telepíteniük a modulokat, ez nem is helyes.
Hogyan lehetne szépen csinálni?
UPD: 2019.10.11 19:16 A probléma a venv használatával megoldódott.
Több változás született. Hamarosan jön egy új kiadás.
Forrás: habr.com
