Predgovor
Za osebne potrebe sem postavil VSphere, na katerem obrnem virtualni usmerjevalnik in Ubuntu strežnik kot medijski strežnik ter še kup drugih uporabnih stvari, ki morajo biti dostopne iz interneta. Vendar pa je težava v tem, da moj ponudnik zaračunava statični IP, ki ga je mogoče uporabiti za bolj koristne stvari. Zato sem uporabljal kombinacijo ddclient + cloudflare.
Vse je bilo v redu, dokler ddclient ni prenehal delovati. Malo raziskav me je pripeljalo do spoznanja, da je čas za hitre rešitve, saj je iskanje težave postalo preveč časa. Na koncu se je vse zaključilo v majhnem demonu, ki enostavno deluje, in prav to je bilo vse, kar sem potreboval.
Tisti, ki jih zanima – dobrodošli pod kat.
Uporabljena orodja in kako „to“ deluje
Torej, najprej sem na spletni strani cloudflare izvedel vse, kar potrebujem vedeti o . In že sem se pripravljal, da izvedem vse v Pythonu (po spoznanju s Python-om ga vse pogosteje uporabljam za preproste naloge ali kadar potrebujem hitro prototipiranje), ko sem naletel na skoraj končno implementacijo.
Na splošno je bila kot osnova vzeta zavijača .
Vzel sem enega izmed primerov za posodobitev DNS in dodal uporabo konfiguracijske datoteke ter možnost posodabljanja več A zapisov v okviru območja ter seveda neomejeno število območij.
Logika je naslednja:
- Skript dobi iz konfiguracijske datoteke seznam območij in po njih prehaja v zanki
- V vsakem območju skript v zanki preide čez vsak DNS zapis tipa A ali AAAA ter preveri javni IP z zapisom
- Če se IP razlikuje — ga spremeni, če ne, preskoči iteracijo zanke in preide na naslednjo
- Zaspi za čas, naveden v konfiguraciji
Namestitev in nastavitev
Verjetno bi bilo možno narediti tudi .deb paket, vendar se v tem ne spoznam, pa tudi ni tako zelo zapleteno.
Postopek sem kar podrobno opisal v README.md na .
Ampak za vsak slučaj bom to opisal v ruščini s splošnimi besedami:
- Prepričajte se, da imate nameščen python3 in python3-pip, če ne – namestite (v Windows se python3-pip namesti skupaj s Pythonom)
- Kloni ali prenesi repozitorij
- Namestite potrebne odvisnosti.
python3 -m pip install -r requirements.txt - Zaženite namestitveni skript
Za Linux:chmod +x install.sh sudo ./install.shZa Windows: windows_install.bat
- Uredite konfiguracijsko datoteko
Za Linux:sudoedit /etc/zen-cf-ddns.confZa Windows:
Odprite datoteko zen-cf-ddns.conf v mapi, kjer ste namestili skript.
To je obična JSON datoteka, po postavkama ništa jednostavno – posebno sam opisao kao primjer 2 različite zone u njoj.
Što se skriva iza instalatera?
install.sh za Linux:
- Kreira se korisnik za pokretanje demona, bez stvaranja korisničkog direktorija i mogućnosti prijave.
sudo useradd -r -s /bin/false zen-cf-ddns - Stvara se datoteka za zapisivanje loga u /var/log/
- Postavljamo vlasnika datoteke loga nedavno stvorenog korisnika
- Kopiraju se datoteke na svoja mesta (konfiguracijska datoteka u /etc, izvršna datoteka u /usr/bin, datoteka usluge u /lib/systemd/system)
- Aktivira se usluga
windows_install.bat za Windows:
- Kopira izvršnu datoteku i datoteku konfiguracije u korisnikom određenu mapu
- Kreira zadatak u planeru za pokretanje skripte pri pokretanju sistema
schtasks /create /tn "CloudFlare Update IP" /tr "%newLocation%" /sc onstart
Nakon promene konfiguracije, skriptu treba ponovo pokrenuti, u Linuxu je to jednostavno i poznato:
sudo service zen-cf-ddns start
sudo service zen-cf-ddns stop
sudo service zen-cf-ddns restart
sudo service zen-cf-ddns status
za Windows ćete morati da ubijete proces pythonw i ponovo pokrenete skriptu (veoma mi se ne da pisati uslugu za Windows na C#):
taskkill /im pythonw.exeTime je instalacija i podešavanje završeno, koristite sretan.
Za one koji žele da vide ne baš lijep Python kod, evo .
MIT licenca, tako da radite s tim što želite.
P.S.: Razumem da je ispalo malo improvizovano, ali se odlično nosi sa svojim zadatkom.
UPD: 11.10.2019 17:37
Našao sam još jedan problem, a ako neko može da sugeriše kako da ga reši — bio bih veoma zahvalan.
Problem je u tome što ako instalirate zavisnosti bez sudo python -m pip install -r …, moduli neće biti vidljivi iz korisnika usluge, a ne bih voleo da primoram korisnike da instaliraju module pod sudo, a ni to nije ispravno.
Kako pravilno to uraditi da izgleda lepo?
UPD: 11.10.2019 19:16 Problem je rešen korišćenjem venv.
Desilo se nekoliko promena. Novi izlazak će uskoro biti.
Izvor: habr.com
