Teie dünaamiline DNS CloudFlare'i abil

Eessõna

Teie dünaamiline DNS CloudFlare'i abil Isiklikuks kasutamiseks kodus seadistasin VSphere'i, millel töötab virtuaalne ruuter ja Ubuntu server meediaserverina ning palju muid meeldivaid asju, ja see server peab olema Internetis ligipääsetav. Kuid probleem seisneb selles, et minu teenusepakkuja pakub staatilist IP-aadressi raha eest, millele võiks leida palju kasulikumaid rakendusi. Seetõttu kasutasin ddclient + Cloudflare'i kombinatsiooni.

Kõik oli hästi, kuni ddclient enam ei töötanud. Natuke seda nuputades sain aru, et on aeg mõtlema alternatiivsete lahenduste ja tööriistade peale, kuna probleemide leidmiseks kulus liiga palju aega. Lõppkokkuvõttes kujunes see välja väikeseks demoniks, mis lihtsalt töötab, ja rohkem ei olegi vaja.
Kellel huvi, on oodatud lugema edasi.

Kasutatud tööriistad ja kuidas "see" töötab

Esmalt uurisin Cloudflare'i saidilt kõike, mida on vaja teada API. Ja olin juba asumas seda Pythonis rakendama (pärast Pythoniga tutvumist kasutan seda järjest sagedamini mõnede lihtsate ülesannete jaoks või kui on vaja kiiresti prototüüp luua), kui äkki sattusin praktiliselt valmisse lahendusse.
Kokkuvõttes võeti aluseks wrapper python-cloudflare.

Võtsin ühe näitest DNS-i värskendamiseks ja lisasin konfiguratsiooni faili kasutamise ning mitme A-kirje värskendamise võimaluse tsoonis ja loomulikult piiramatu arvu tsoonide värskendamise.

Loogika on järgmine:

  1. Skripti kaudu saadakse konfiguratsioonifailist tsoonide nimekiri ja käiakse neist läbi tsüklis
  2. Igas tsoonis käib skript tsüklis läbi iga A- või AAAA tüüpi DNS-kirje ja võrdleb avalikku IP-aadressi kirjetega
  3. Kui IP-d on erinev, muudab selle, kui mitte, jätkab tsükli iteratsiooniga järgmisele
  4. Magab konfiguratsioonifailis määratud aja

Paigaldamine ja seadistamine

Tõenäoliselt oleksin saanud teha ka .deb paketi, aga ma ei ole selles tugev, ja tegelikult ei ole see kuigi keeruline.
Protsessi olen üsna põhjalikult kirjeldanud README.md-s repositori lehe.

Kuid igaks juhuks kirjeldan üldiselt vene keeles:

  1. Veenduge, et teil oleks paigaldatud python3 ja python3-pip, kui ei ole – installige need (Windowsis paigaldatakse python3-pip koos Pythoniga)
  2. Kloonige või laadige alla repositoorium
  3. Paigaldage vajalikud sõltuvused.
    python3 -m pip install -r requirements.txt

  4. Käivitage installatsiooniskript
    Linuxi jaoks:
    chmod +x install.sh
    sudo ./install.sh

    Windowsile: windows_install.bat

  5. Redigeerige konfiguratsioonifaili
    Linuxi jaoks:
    sudoedit /etc/zen-cf-ddns.conf

    Windowsi jaoks:

    Avage fail zen-cf-ddns.conf kaustas, kuhu skript paigaldatud.

    See on tavaline JSON-fail, konfiguratsioonide osas pole midagi keerulist – kirjutasin spetsiaalselt, et näidata kahte erinevat ala.

Mis peitub installijate taga?

install.sh Linuxile:

  1. Kasutaja luuakse deemonite käitamiseks, kodukausta loomata ja sisselogimist võimaldamata.
    sudo useradd -r -s /bin/false zen-cf-ddns

  2. Luuakse logifail /var/log/ jaoks.
  3. Muudame logifaili omanikuks hiljuti loodud kasutaja.
  4. Failid kopeeritakse oma kohtadesse (konfiguraatsioon /etc, käivitatav fail /usr/bin, teenuse fail /lib/systemd/system)
  5. Teenust aktiveeritakse.

windows_install.bat Windowsile:

  1. Kopeerib käivitatava faili ja konfigureerimisfaili kasutaja määratud kausta.
  2. Luuakse ülesanne ajakavades, et skripti käivitada süsteemi käivitamisel.
    schtasks /create /tn "CloudFlare Update IP" /tr "%newLocation%" /sc onstart

Pärast konfiguratsiooni muutmist tuleb skript uuesti käivitada, Linuxis on see lihtne ja harjumuspärane:

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

Windowsis tuleb tappida pythonw protsess ja skript uuesti käivitada (mul pole eriti tahtmist kirjutada teenust Windowsile C#-ga):

taskkill /im pythonw.exe

Sellega on install ja seadistamine lõpetatud, nautige tervist.

Neile, kes soovivad vaadata mitte kõige ilusamat Pythonikoodi, siin see on. GitHubi hoidla.

MIT litsents, seega tehke sellega, mida soovite.

P.S.: Mõistan, et see tuli veidi kätsepuhkusele, kuid oma ülesande täidab see suurepäraselt.

UPD: 11.10.2019 17:37
Leidsin veel 1 probleemi, ja kui keegi oskab öelda, kuidas seda lahendada – oleksin väga tänulik.
Probleem on selles, et kui installida sõltuvused ilma sudo-ita python -m pip install -r ..., siis teenuse kasutaja alt mooduleid ei nähta, aga ma ei tahaks, et kasutajad sunnitaksid mooduleid sudo alt paigaldama, see on vale.
Kuidas õigesti teha, et see oleks ilus?
UPD: 11.10.2019 19:16 Probleem lahendatud venv'i kasutamisega.
Tuli mitmeid muudatusi. Uus versioon tuleb varsti.

Allikas: habr.com

Osta usaldusväärne veebimajutus DDoS-kaitsega veebisaitidele, VPS VDS serverid 🔥 Osta usaldusväärne veebimajutus DDoS-kaitsega veebisaitidele, VPS VDS serverid - ProHoster