Svoj dinamički DNS pomoću CloudFlare

Predgovor

Svoj dinamički DNS pomoću CloudFlare 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 API. 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 python-cloudflare.

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:

  1. Skripta dobiva popis zona iz konfiguracijske datoteke i prolazi kroz njih u petlji.
  2. U svakoj zoni skripta prolazi u petlji kroz svaku DNS A ili AAAA zapis i uspoređuje javni IP s zapisom.
  3. Ako se IP razlikuje — mijenja ga, ako se ne razlikuje preskoči iteraciju petlje i prelazi na sljedeći.
  4. 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 stranici repozitorija..

Ali za svaki slučaj ću opisati na hrvatskom općenitim riječima:

  1. Provjerite imate li instaliran python3 i python3-pip, ako nemate – instalirajte ih (u Windowsu se python3-pip instalira zajedno s Pythonom).
  2. Kloni ili preuzmi repozitorij.
  3. Instalirajte potrebne ovisnosti.
    python3 -m pip install -r requirements.txt

  4. Pokrenite instalacijski skript.
    Za Linux:
    chmod +x install.sh
    sudo ./install.sh

    Za Windows: windows_install.bat

  5. Uredite datoteku s konfiguracijom.
    Za Linux:
    sudoedit /etc/zen-cf-ddns.conf

    Za 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:

  1. Kreira se korisnik za pokretanje demona, bez stvaranja kućnog direktorija i mogućnosti prijave.
    sudo useradd -r -s /bin/false zen-cf-ddns

  2. Kreira se datoteka za zapisivanje loga u /var/log/
  3. Postavljamo vlasnika datoteke loga na nedavno kreiranog korisnika.
  4. Datoteke se kopiraju na svoja mjesta (konfiguracija u /etc, izvršna datoteka u /usr/bin, datoteka usluge u /lib/systemd/system)
  5. Aktivira se usluga.

windows_install.bat za Windows:

  1. Kopira izvršnu datoteku i datoteku konfiguracije u korisnikom navedenu mapu.
  2. 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.exe

Time je instalacija i postavka završena, uživajte u korištenju.

Za one koji žele vidjeti ne baš lijep kod u Pythonu, evo. repozitorijum na GitHubu.

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

Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere | ProHoster