Predgovor
Postavio sam VSphere za osobne potrebe kod kuće, na kojem pokrećem virtualni usmjerivač i Ubuntu server kao medijski server te hrpu drugih sitnica, a taj server trebam učiniti dostupnim s Interneta. Međutim, problem je u tome što moj pružatelj usluga naplaćuje statičnu IP adresu, a novac se uvijek može iskoristiti za korisnije stvari. Stoga sam koristio kombinaciju ddclient + cloudflare.
Sve je bilo u redu dok ddclient nije prestao raditi. Nakon malo istraživanja shvatio sam da je došlo vrijeme za improvizaciju, jer je previše vremena prolazilo u pronalaženju problema. Na kraju je sve završilo u malom demonu koji jednostavno radi, a meni to više i ne treba.
Kome je zanimljivo – dobrodošli ispod koda.
Korišteni alati i kako ‘to’ radi
Prvo sam na web stranici cloudflare saznao sve što trebam znati o . Već sam bila spremna implementirati sve u Pythonu (nakon što sam se upoznala s Pythonom, sve češće ga koristim za jednostavne zadatke ili kada trebam brzo napraviti prototip), kada sam iznenada naletjela na gotovo gotovu implementaciju.
Uglavnom, kao osnovu sam uzela wrapper .
Uzela sam jedan od primjera za ažuriranje DNS-a i dodala korištenje konfiguracijske datoteke i mogućnost ažuriranja više A zapisa unutar zone, a naravno i neograničen broj zona.
Logika je sljedeća:
- Skripta dobiva popis zona iz konfiguracijske datoteke i prolazi kroz njih u petlji.
- U svakoj zoni skripta prolazi u petlji kroz svaku DNS A ili AAAA zapis i uspoređuje javni IP s zapisom.
- Ako se IP razlikuje — mijenja ga, ako se ne razlikuje preskoči iteraciju petlje i prelazi na sljedeći.
- Zaspati na vrijeme navedeno u konfiguraciji.
Instalacija i postavljanje
Vjerojatno bi bilo moguće napraviti i .deb paket, ali nisam stručna u tome, a i nije sve tako komplicirano.
Proces sam opširno opisala u README.md na .
Ali za svaki slučaj ću opisati na hrvatskom općenitim riječima:
- Provjerite imate li instaliran python3 i python3-pip, ako nemate – instalirajte ih (u Windowsu se python3-pip instalira zajedno s Pythonom).
- Kloni ili preuzmi repozitorij.
- Instalirajte potrebne ovisnosti.
python3 -m pip install -r requirements.txt - Pokrenite instalacijski skript.
Za Linux:chmod +x install.sh sudo ./install.shZa Windows: windows_install.bat
- Uredite datoteku s konfiguracijom.
Za Linux:sudoedit /etc/zen-cf-ddns.confZa Windows:
Otvorite datoteku zen-cf-ddns.conf u mapi gdje ste instalirali skriptu.
Ovo je obična JSON datoteka, ništa komplicirano po postavkama – posebno sam opisao 2 različite zone u njoj kao primjer.
Što se krije iza instalacija?
install.sh za Linux:
- Kreira se korisnik za pokretanje demona, bez stvaranja kućnog direktorija i mogućnosti prijave.
sudo useradd -r -s /bin/false zen-cf-ddns - Kreira se datoteka za zapisivanje loga u /var/log/
- Postavljamo vlasnika datoteke loga na nedavno kreiranog korisnika.
- Datoteke se kopiraju na svoja mjesta (konfiguracija 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 navedenu mapu.
- Stvara se zadatak u planerU za pokretanje skripte prilikom pokretanja sustava.
schtasks /create /tn "CloudFlare Update IP" /tr "%newLocation%" /sc onstart
Nakon promjene konfiguracije, skriptu je potrebno ponovno 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 će biti potrebno ubiti proces pythonw i ponovno pokrenuti skriptu (vrlo mi se ne da pisati uslugu pod Windows na C#):
taskkill /im pythonw.exeTime je instalacija i postavka završena, uživajte u korištenju.
Za one koji žele vidjeti ne baš lijep kod u Pythonu, evo. .
MIT licenca, tako da radite s ovim dobrom što želite.
P.S.: Shvaćam da je ispalo malo improvizirano, ali svoj zadatak obavlja sjajno.
UPD: 11.10.2019 17:37
Pronašao sam još 1 problem, i ako netko može dati savjet kako ga riješiti – bio bih vrlo zahvalan.
Problem je u tome što ako se ovisnosti instaliraju bez sudo python -m pip install -r …, moduli neće biti vidljivi pod korisnikom usluge, a ne bih volio prisiljavati korisnike da instaliraju module pod sudo, to nije ispravno.
Kako pravilno napraviti da izgleda lijepo?
UPD: 11.10.2019 19:16 Problem je riješen korištenjem venv.
Bilo je nekoliko promjena. Novi release dolazi uskoro.
Izvor: habr.com
