Predgovor
Za lične potrebe kod kuće sam instalirao VSphere na kojem pokrećem virtuelni ruter i Ubuntu server kao medijski server i gomilu drugih dobrota, a ovom serveru bi trebalo da se pristupi sa interneta. Ali problem je što moj provajder daje statične podatke za novac, koji se uvijek mogu koristiti u korisnije svrhe. Stoga sam koristio kombinaciju ddclient + cloudflare.
Sve je bilo u redu dok ddclient nije prestao raditi. Nakon što sam malo čačkao, shvatio sam da je došlo vrijeme za štake i bicikle, jer je trebalo previše vremena da se pronađe problem. Na kraju se sve pretvorilo u mali demon koji samo radi i ne treba mi ništa drugo.
Ako je neko zainteresovan, dobrodošao u mačku.
Korišteni alati i kako “to” funkcionira
Dakle, prva stvar koju sam saznao na web stranici cloudflare je sve što trebate znati o tome
Općenito, omot je uzet kao osnova
Uzeo sam jedan od primjera za ažuriranje DNS-a i dodao korištenje konfiguracijskog fajla i mogućnost ažuriranja nekoliko A zapisa unutar zone i, naravno, neograničen broj zona.
Logika je sljedeća:
- Skripta prima listu zona iz konfiguracijske datoteke i prolazi kroz njih
- U svakoj zoni, skripta prolazi kroz svaki DNS zapis tipa A ili AAAA i provjerava javni IP sa zapisom
- Ako je IP drugačiji, mijenja ga; ako nije, preskače iteraciju petlje i prelazi na sljedeću.
- Zaspi na vrijeme navedeno u konfiguraciji
Instalacija i konfiguracija
Vjerovatno bi bilo moguće napraviti .deb paket, ali ja nisam dobar u tome i nije sve tako teško.
Proces sam opisao veoma detaljno u README.md na
Ali za svaki slučaj, opisat ću to na ruskom općenito:
- Uvjerite se da imate instalirane python3 i python3-pip, ako ne, instalirajte ih (na Windows-u, python3-pip je instaliran zajedno s Pythonom)
- Klonirajte ili preuzmite spremište
- Instalirajte potrebne zavisnosti.
python3 -m pip install -r requirements.txt
- Pokrenite instalacijsku skriptu
Za Linux:chmod +x install.sh sudo ./install.sh
Za Windows: windows_install.bat
- Uredite konfiguracijski fajl
Za Linux:sudoedit /etc/zen-cf-ddns.conf
Za Windows:
Otvorite datoteku zen-cf-ddns.conf u fascikli u koju ste instalirali skriptu.
Ovo je običan JSON fajl, podešavanja nisu ništa komplikovana - posebno sam opisao 2 različite zone u njemu kao primer.
Šta se krije iza instalatera?
install.sh za Linux:
- Korisnik je kreiran za pokretanje demona, bez kreiranja kućnog direktorija i bez mogućnosti prijave.
sudo useradd -r -s /bin/false zen-cf-ddns
- Dnevnik se kreira u /var/log/
- Neka novokreirani korisnik bude vlasnik datoteke evidencije
- Fajlovi se kopiraju na svoja mjesta (config u /etc, izvršni fajl u /usr/bin, servisni fajl u /lib/systemd/system)
- Usluga je aktivirana
windows_install.bat za Windows:
- Kopira izvršnu i konfiguracijsku datoteku u korisnički specificiranu mapu
- Kreira zadatak u planeru za pokretanje skripte pri pokretanju sistema
schtasks /create /tn "CloudFlare Update IP" /tr "%newLocation%" /sc onstart
Nakon promjene konfiguracije, skriptu je potrebno ponovo pokrenuti; u Linuxu je sve 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 ubiti pythonw proces i ponovo pokrenuti skriptu (previše sam lijen da napišem uslugu za Windows u C#):
taskkill /im pythonw.exe
Ovim je završena instalacija i konfiguracija, uživajte u svoje zdravlje.
Za one koji žele vidjeti ne baš lijep Python kod, evo ga
MIT licenciran, pa radite s ovim stvarima šta želite.
PS: Shvaćam da se ispostavilo da je malo štaka, ali radi svoj posao sa praskom.
UPD: 11.10.2019. 17:37
Našao sam još 1 problem, i ako mi neko kaže kako da ga riješim, bit ću jako zahvalan.
Problem je u tome što ako instalirate zavisnosti bez sudo python -m pip install -r ..., tada moduli neće biti vidljivi od korisnika servisa, a ne bih da prisiljavam korisnike da instaliraju module pod sudo, a ovo je nije tačno.
Kako da izgleda lepo?
UPD: 11.10.2019/19/16 XNUMX:XNUMX Problem je riješen korištenjem venv.
Bilo je nekoliko promjena. Sljedeće izdanje će biti u narednih nekoliko dana.
izvor: www.habr.com