Vaš lasten dinamični DNS z uporabo CloudFlare

Predgovor

Vaš lasten dinamični DNS z uporabo CloudFlare Za osebne potrebe sem doma namestil VSphere, na katerem poganjam virtualni router in Ubuntu server kot medijski strežnik in še kup drugih priboljškov, ta strežnik pa bi moral biti dostopen iz interneta. Problem pa je v tem, da moj ponudnik za denar daje statične podatke, ki jih je vedno mogoče uporabiti za bolj uporabne namene. Zato sem uporabil kombinacijo ddclient + cloudflare.

Vse je bilo v redu, dokler ddclient ni prenehal delovati. Ko sem malo pobrskal, sem ugotovil, da je prišel čas za bergle in kolesa, saj je iskanje problema vzelo preveč časa. Na koncu se je vse spremenilo v majhnega demona, ki samo dela in ne potrebujem ničesar drugega.
Če koga zanima, dobrodošli v kat.

Uporabljena orodja in kako "to" deluje

Prva stvar, ki sem jo izvedel na spletnem mestu cloudflare, je vse, kar morate vedeti API. In že sem se usedel implementirati vse v Python (po spoznavanju s Pythonom ga vse pogosteje uporabljam za kakšna enostavna opravila ali ko moram na hitro narediti prototip), ko sem nenadoma naletel na skoraj že pripravljeno implementacijo.
Na splošno je bil za osnovo vzet ovoj python-cloudflare.

Vzel sem enega od primerov za posodobitev DNS in dodal uporabo konfiguracijske datoteke ter možnost posodobitve več A zapisov znotraj cone in seveda neomejenega števila con.

Logika je naslednja:

  1. Skript prejme seznam območij iz konfiguracijske datoteke in se premika po njih
  2. V vsakem območju skript preleti vsak zapis DNS tipa A ali AAAA in preveri javni IP z zapisom
  3. Če je IP drugačen, ga spremeni; če ne, preskoči ponovitev zanke in preide na naslednjo.
  4. Zaspi za čas, določen v konfiguraciji

Namestitev in konfiguracija

Verjetno bi bilo možno narediti paket .deb, vendar nisem dober v tem in ni tako težko.
Postopek sem zelo podrobno opisal v README.md na stran skladišča.

Toda za vsak slučaj ga bom opisal v ruščini na splošno:

  1. Prepričajte se, da imate nameščena python3 in python3-pip, če nista, ju namestite (v sistemu Windows je python3-pip nameščen skupaj s Pythonom)
  2. Klonirajte ali prenesite repozitorij
  3. Namestite zahtevane odvisnosti.
    python3 -m pip install -r requirements.txt

  4. Zaženite namestitveni skript
    Za Linux:

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

    Za Windows: windows_install.bat

  5. Uredite konfiguracijsko datoteko
    Za Linux:

    sudoedit /etc/zen-cf-ddns.conf

    Za Windows:

    Odprite datoteko zen-cf-ddns.conf v mapi, v katero ste namestili skript.

    To je običajna datoteka JSON, nastavitve niso nič zapletene - v njej sem posebej opisal 2 različni coni kot primer.

Kaj stoji za monterji?

install.sh za Linux:

  1. Uporabnik je ustvarjen za zagon demona, brez ustvarjanja domačega imenika in brez možnosti prijave.
    sudo useradd -r -s /bin/false zen-cf-ddns

  2. Dnevniška datoteka je ustvarjena v /var/log/
  3. Naredite novo ustvarjenega uporabnika za lastnika dnevniške datoteke
  4. Datoteke se prekopirajo na svoja mesta (konfiguracija v /etc, izvršljiva datoteka v /usr/bin, servisna datoteka v /lib/systemd/system)
  5. Storitev je aktivirana

windows_install.bat za Windows:

  1. Kopira izvršljivo in konfiguracijsko datoteko v mapo, ki jo določi uporabnik
  2. Ustvari nalogo v razporejevalniku za zagon skripta ob zagonu sistema
    schtasks /create /tn "CloudFlare Update IP" /tr "%newLocation%" /sc onstart

Po spremembi konfiguracije je treba skript znova zagnati; v Linuxu je vse preprosto in znano:

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 boste morali ubiti proces pythonw in znova zagnati skript (prelen sem, da bi napisal storitev za Windows v C#):

taskkill /im pythonw.exe

S tem sta namestitev in konfiguracija zaključeni, uživajte na svoje zdravje.

Za tiste, ki želijo videti ne preveč lepo kodo Python, je tukaj repozitorij na GitHubu.

Licenca MIT, zato počnite s temi stvarmi, kar želite.

PS: Razumem, da se je izkazalo za malo berglo, vendar svoje delo opravi z udarcem.

UPD: 11.10.2019. 17. 37 XNUMX:XNUMX
Našel sem še 1 problem in če mi kdo pove, kako ga rešiti, bom zelo hvaležen.
Težava je v tem, da če namestite odvisnosti brez sudo python -m pip install -r ..., potem moduli ne bodo vidni uporabniku storitve in ne bi rad prisilil uporabnikov, da namestijo module pod sudo, in to je nepravilno.
Kako narediti, da bo videti lepo?
UPD: 11.10.2019 19:16 Težava je bila rešena z uporabo venv.
Sprememb je bilo več. Naslednja izdaja bo v naslednjih dneh.

Vir: www.habr.com

Dodaj komentar