Vaš vlastiti dinamički DNS koristeći CloudFlare

predgovor

Vaš vlastiti dinamički DNS koristeći CloudFlare Za osobne potrebe kod kuće sam instalirao VSphere na kojem vrtim virtualni router i Ubuntu server kao media server i hrpu drugih sitnica, a ovom serveru bi trebao biti dostupan s interneta. Ali problem je što moj provajder daje statične podatke za novac, koji se uvijek mogu iskoristiti u korisnije svrhe. Stoga sam koristio kombinaciju ddclient + cloudflare.

Sve je bilo u redu dok ddclient nije prestao raditi. Nakon malo čeprkanja, 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 malog demona koji samo radi i ništa drugo mi ne treba.
Ako je netko zainteresiran, dobrodošli u cat.

Alati koji se koriste i kako "to" funkcionira

Dakle, prva stvar koju sam saznao na web stranici Cloudflare je sve što trebate znati API. I već sam sjeo sve implementirati u Python (nakon što sam se upoznao s Pythonom sve ga češće koristim za neke jednostavne zadatke ili kad trebam na brzinu napraviti prototip), kad sam odjednom naišao na gotovo 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 konfiguracijske datoteke i mogućnost ažuriranja nekoliko A zapisa unutar zone i, naravno, neograničen broj zona.

Logika je sljedeća:

  1. Skripta prima popis 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 različit, mijenja ga; ako nije, preskače iteraciju petlje i prelazi na sljedeću.
  4. Zaspi za vrijeme navedeno u konfiguraciji

Instalacija i konfiguracija

Vjerojatno bi bilo moguće napraviti .deb paket, ali nisam dobar u tome, a i nije tako teško.
Proces sam opisao vrlo detaljno u README.md na stranica spremišta.

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

  1. Provjerite imate li instalirane python3 i python3-pip, ako niste, instalirajte ih (na Windowsima, python3-pip je instaliran uz Python)
  2. Klonirajte ili preuzmite repozitorij
  3. Instalirajte potrebne ovisnosti.
    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 konfiguracijsku datoteku
    Za Linux:

    sudoedit /etc/zen-cf-ddns.conf

    Za Windows:

    Otvorite datoteku zen-cf-ddns.conf u mapi u kojoj ste instalirali skriptu.

    Ovo je obična JSON datoteka, postavke nisu ništa komplicirano - posebno sam opisao 2 različite zone u njoj kao primjer.

Što stoji iza instalatera?

install.sh za Linux:

  1. Korisnik je stvoren za pokretanje demona, bez stvaranja matičnog imenika i bez mogućnosti prijave.
    sudo useradd -r -s /bin/false zen-cf-ddns

  2. Dnevnik se stvara u /var/log/
  3. Učinite novostvorenog korisnika vlasnikom datoteke dnevnika
  4. Datoteke se kopiraju na svoja mjesta (config u /etc, izvršna datoteka u /usr/bin, servisna datoteka u /lib/systemd/system)
  5. Usluga je aktivirana

windows_install.bat za Windows:

  1. Kopira izvršnu i konfiguracijsku datoteku u mapu koju odredi korisnik
  2. Stvara zadatak u planeru za pokretanje skripte pri pokretanju sustava
    schtasks /create /tn "CloudFlare Update IP" /tr "%newLocation%" /sc onstart

Nakon promjene konfiguracije, potrebno je ponovno pokrenuti skriptu; 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 morat ćete ubiti pythonw proces i ponovno pokrenuti skriptu (previše sam lijen da napišem uslugu za Windows u C#):

taskkill /im pythonw.exe

Ovo dovršava instalaciju i konfiguraciju, uživajte u svom zdravlju.

Za one koji žele vidjeti ne tako lijep Python kod, evo ga repozitorij na GitHubu.

MIT ima licencu, pa radite s ovim stvarima što hoćete.

PS: Razumijem da je ispalo malo zategnuto, ali svoj posao radi s praskom.

UPD: 11.10.2019/17/37 XNUMX:XNUMX
Našao sam još 1 problem, i ako mi netko kaže kako da ga riješim, bit ću mu jako zahvalan.
Problem je u tome što ako instalirate ovisnosti bez sudo python -m pip install -r ..., tada moduli neće biti vidljivi korisniku usluge, a ne bih želio tjerati korisnike da instaliraju module pod sudo, a ovo je Netočno.
Kako učiniti da izgleda lijepo?
UPD: 11.10.2019/19/16 XNUMX:XNUMX Problem je riješen pomoću venv.
Bilo je nekoliko promjena. Sljedeće izdanje bit će u sljedećih nekoliko dana.

Izvor: www.habr.com

Dodajte komentar