Vaš vlastiti dinamički DNS koristeći CloudFlare

Predgovor

Vaš vlastiti dinamički DNS koristeći CloudFlare 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 API. I već sam sjeo da implementiram sve u Python-u (nakon upoznavanja sa Pythonom, sve češće ga koristim za neke jednostavne zadatke ili kada trebam brzo napraviti prototip), kada sam iznenada naišao na skoro gotovu implementaciju.
Općenito, omot je uzet kao osnova python-cloudflare.

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:

  1. Skripta prima listu zona iz konfiguracijske datoteke i prolazi kroz njih
  2. U svakoj zoni, skripta prolazi kroz svaki DNS zapis tipa A ili AAAA i provjerava javni IP sa zapisom
  3. Ako je IP drugačiji, mijenja ga; ako nije, preskače iteraciju petlje i prelazi na sljedeću.
  4. 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 stranica repozitorija.

Ali za svaki slučaj, opisat ću to na ruskom općenito:

  1. Uvjerite se da imate instalirane python3 i python3-pip, ako ne, instalirajte ih (na Windows-u, python3-pip je instaliran zajedno s Pythonom)
  2. Klonirajte ili preuzmite spremište
  3. Instalirajte potrebne zavisnosti.
    python3 -m pip install -r requirements.txt

  4. Pokrenite instalacijsku skriptu
    Za Linux:

    chmod +x install.sh
    sudo ./install.sh

    Za Windows: windows_install.bat

  5. 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:

  1. 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

  2. Dnevnik se kreira u /var/log/
  3. Neka novokreirani korisnik bude vlasnik datoteke evidencije
  4. Fajlovi se kopiraju na svoja mjesta (config u /etc, izvršni fajl u /usr/bin, servisni fajl u /lib/systemd/system)
  5. Usluga je aktivirana

windows_install.bat za Windows:

  1. Kopira izvršnu i konfiguracijsku datoteku u korisnički specificiranu mapu
  2. 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 spremište na GitHubu.

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

Dodajte komentar