Teie enda dünaamiline DNS, kasutades CloudFlare'i

Eessõna

Teie enda dünaamiline DNS, kasutades CloudFlare'i Isiklikeks vajadusteks kodus installisin VSphere'i, millel käitan meediumiserverina virtuaalruuterit ja Ubuntu serverit ning hunniku muud head-paremat ja see server peaks olema internetist ligipääsetav. Aga probleem on selles, et minu pakkuja annab raha eest staatilisi andmeid, mida saab alati kasulikumatel eesmärkidel kasutada. Seetõttu kasutasin kombinatsiooni ddclient + cloudflare.

Kõik oli korras, kuni ddclient lakkas töötamast. Natuke tuhnides sain aru, et karkude ja jalgrataste aeg on kätte jõudnud, kuna probleemi leidmine võttis liiga palju aega. Lõpuks muutus kõik väikeseks deemoniks, mis lihtsalt töötab ja ma ei vaja midagi muud.
Kui kellelgi huvi, siis tere tulemast kassile.

Kasutatavad tööriistad ja kuidas see toimib

Nii et esimene asi, mille ma cloudflare'i veebisaidilt teada sain, on kõik, mida peate teadma API. Ja olin juba istunud Pythonis kõike juurutama (pärast Pythoniga tutvumist kasutan seda üha enam mõne lihtsa töö tegemiseks või siis, kui on vaja kiirelt prototüüp teha), kui järsku sattusin peaaegu valmis teostusega.
Üldiselt võeti aluseks ümbris python-cloudflare.

Võtsin ühe näite DNS-i värskendamise kohta ja lisasin konfiguratsioonifaili kasutamise ja võimaluse värskendada mitut A-kirjet tsooni sees ja loomulikult piiramatul arvul tsoone.

Loogika on järgmine:

  1. Skript saab konfiguratsioonifailist tsoonide loendi ja liigub need läbi
  2. Igas tsoonis teeb skript läbi iga A- või AAAA-tüüpi DNS-kirje ja kontrollib selle kirjega avalikku IP-d
  3. Kui IP on erinev, muudab see seda; kui mitte, jätab see silmuse iteratsiooni vahele ja liigub järgmise juurde.
  4. Jääb konfiguratsioonis määratud ajaks magama

Paigaldamine ja seadistamine

Tõenäoliselt oleks võimalik teha .deb-pakett, kuid ma ei ole selles hea ja see pole nii keeruline.
Ma kirjeldasin protsessi üksikasjalikult saidil README.md on hoidla leht.

Aga igaks juhuks kirjeldan seda üldiselt vene keeles:

  1. Veenduge, et teil on installitud python3 ja python3-pip, kui mitte, installige see (Windowsis installitakse python3-pip koos Pythoniga)
  2. Kloonige või laadige hoidla alla
  3. Installige vajalikud sõltuvused.
    python3 -m pip install -r requirements.txt

  4. Käivitage installiskript
    Linuxi jaoks:

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

    Windowsi jaoks: windows_install.bat

  5. Muutke konfiguratsioonifaili
    Linuxi jaoks:

    sudoedit /etc/zen-cf-ddns.conf

    Windowsi jaoks:

    Avage fail zen-cf-ddns.conf kaustas, kuhu skripti installisite.

    See on tavaline JSON-fail, seadetes pole midagi keerulist - ma kirjeldasin selles näitena konkreetselt 2 erinevat tsooni.

Mis on paigaldajate taga?

install.sh Linuxi jaoks:

  1. Kasutaja luuakse deemoni käivitamiseks ilma kodukataloogi loomata ja sisselogimisvõimaluseta.
    sudo useradd -r -s /bin/false zen-cf-ddns

  2. Logifail luuakse kaustas /var/log/
  3. Muutke vastloodud kasutaja logifaili omanikuks
  4. Failid kopeeritakse oma kohtadesse (config / etc, käivitatav fail / usr/bin, teenusefail /lib/systemd/system)
  5. Teenus on aktiveeritud

windows_install.bat Windowsile:

  1. Kopeerib käivitatava ja konfiguratsioonifaili kasutaja määratud kausta
  2. Loob ajakavas ülesande skripti käivitamiseks süsteemi käivitamisel
    schtasks /create /tn "CloudFlare Update IP" /tr "%newLocation%" /sc onstart

Pärast konfiguratsiooni muutmist tuleb skript taaskäivitada, Linuxis on kõik lihtne ja tuttav:

sudo service zen-cf-ddns start
sudo service zen-cf-ddns stop
sudo service zen-cf-ddns restart
sudo service zen-cf-ddns status

Windowsi jaoks peate pythonw protsessi tapma ja skripti uuesti käivitama (ma olen liiga laisk, et Windowsile C#-s teenust kirjutada):

taskkill /im pythonw.exe

See lõpetab installimise ja seadistamise, nautige seda oma tervise nimel.

Neile, kes soovivad näha mitte nii ilusat Pythoni koodi, on see siin hoidla GitHubis.

MIT litsentsitud, nii et tehke selle kraamiga, mida soovite.

PS: Ma saan aru, et see osutus natuke karguks, kuid see teeb oma tööd pauguga.

UPD: 11.10.2019 17:37
Leidsin veel 1 probleemi ja kui keegi ütleb, kuidas seda lahendada, siis olen väga tänulik.
Probleem on selles, et kui installite sõltuvusi ilma sudo python -m pip install -r ..., siis ei ole moodulid teenuse kasutajale nähtavad ja ma ei tahaks sudo kasutajaid sudo alla mooduleid installima ja see on ei ole õige.
Kuidas muuta see ilusaks?
UPD: 11.10.2019/19/16 XNUMX:XNUMX Probleem lahendati venv abil.
Muutusi on toimunud mitmeid. Järgmine väljalase ilmub lähipäevil.

Allikas: www.habr.com

Lisa kommentaar