Jūsų dinaminis DNS naudojant „CloudFlare“.

pratarmė

Jūsų dinaminis DNS naudojant „CloudFlare“. Asmeniniams poreikiams namuose įsidiegiau VSphere, kuriame kaip media serverį paleidžiu virtualų maršrutizatorių ir Ubuntu serverį bei dar krūvą kitų gėrybių, o šis serveris turėtų būti pasiekiamas iš interneto. Tačiau problema ta, kad mano teikėjas už pinigus pateikia statinius duomenis, kuriuos visada galima panaudoti naudingesniems tikslams. Todėl naudojau ddclient + cloudflare derinį.

Viskas buvo gerai, kol ddclient nustojo veikti. Šiek tiek pasimaišęs supratau, kad atėjo laikas ramentams ir dviračiams, nes reikėjo per daug laiko surasti problemą. Galų gale viskas virto mažu demonu, kuris tiesiog veikia, ir man daugiau nieko nereikia.
Jei kam įdomu, kviečiame į katę.

Naudojami įrankiai ir kaip tai veikia

Taigi pirmas dalykas, kurį sužinojau „Cloudflare“ svetainėje, yra viskas, ką reikia žinoti API. Ir jau buvau susėdęs viską diegti Python (susipažinęs su Python vis dažniau naudoju jį kai kurioms paprastoms užduotims atlikti ar kai reikia greitai pasidaryti prototipą), kai netikėtai aptikau beveik paruoštą diegimą.
Apskritai įvyniojimas buvo laikomas pagrindu python-cloudflare.

Aš paėmiau vieną iš DNS atnaujinimo pavyzdžių ir pridėjau konfigūracijos failo naudojimą bei galimybę atnaujinti kelis A įrašus zonoje ir, žinoma, neribotą zonų skaičių.

Logika yra tokia:

  1. Scenarijus gauna zonų sąrašą iš konfigūracijos failo ir perkelia juos
  2. Kiekvienoje zonoje scenarijus pereina per kiekvieną A arba AAAA tipo DNS įrašą ir patikrina viešąjį IP su įrašu
  3. Jei IP skiriasi, jis jį pakeičia; jei ne, jis praleidžia ciklo iteraciją ir pereina prie kito.
  4. Užmiega konfigūracijoje nurodytą laiką

Diegimas ir konfigūravimas

Tikriausiai būtų įmanoma sukurti .deb paketą, bet man tai nelabai sekasi ir tai nėra taip sunku.
Procesą labai išsamiai aprašiau README.md on saugyklos puslapis.

Bet tik tuo atveju apibendrinsiu tai rusiškai:

  1. Įsitikinkite, kad įdiegėte python3 ir python3-pip, jei ne, įdiekite (Windows sistemoje python3-pip įdiegtas kartu su Python)
  2. Klonuokite arba atsisiųskite saugyklą
  3. Įdiekite reikiamas priklausomybes.
    python3 -m pip install -r requirements.txt

  4. Paleiskite diegimo scenarijų
    „Linux“:

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

    „Windows“: windows_install.bat

  5. Redaguokite konfigūracijos failą
    „Linux“:

    sudoedit /etc/zen-cf-ddns.conf

    „Windows“:

    Atidarykite zen-cf-ddns.conf failą aplanke, kuriame įdiegėte scenarijų.

    Tai įprastas JSON failas, nustatymuose nieko sudėtingo – kaip pavyzdį jame konkrečiai aprašiau 2 skirtingas zonas.

Kas slypi už montuotojų?

install.sh, skirtas Linux:

  1. Vartotojas sukurtas paleisti demoną, nesukuriant namų katalogo ir neturint galimybės prisijungti.
    sudo useradd -r -s /bin/false zen-cf-ddns

  2. /var/log/ sukuriamas žurnalo failas
  3. Padarykite naujai sukurtą vartotoją žurnalo failo savininku
  4. Failai nukopijuojami į savo vietas (config / etc, vykdomasis failas / usr/bin, paslaugos failas / lib/systemd/system)
  5. Paslauga suaktyvinta

windows_install.bat, skirtas Windows:

  1. Nukopijuoja vykdomąjį ir konfigūracijos failą į vartotojo nurodytą aplanką
  2. Sukuria užduotį planuoklyje paleisti scenarijų paleidžiant sistemą
    schtasks /create /tn "CloudFlare Update IP" /tr "%newLocation%" /sc onstart

Pakeitus konfigūraciją, scenarijų reikia paleisti iš naujo; Linux sistemoje viskas paprasta ir pažįstama:

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

„Windows“ turėsite nužudyti pythonw procesą ir iš naujo paleisti scenarijų (aš per tingus rašyti paslaugą „Windows“ C#):

taskkill /im pythonw.exe

Tai užbaigia diegimą ir konfigūravimą, mėgaukitės tuo savo sveikatai.

Tiems, kurie nori pamatyti ne tokį gražų Python kodą, čia jis yra „GitHub“ saugykla.

MIT licencijuota, todėl darykite su šia medžiaga ką norite.

PS: Suprantu, kad tai pasirodė šiek tiek ramentas, bet jis atlieka savo darbą su kaupu.

UPD: 11.10.2019-17-37 XNUMX:XNUMX
Radau dar 1 problemą ir jei kas pasakys kaip ją išspręsti, būsiu labai dėkingas.
Problema ta, kad jei įdiegiate priklausomybes be sudo python -m pip install -r ..., tada moduliai nebus matomi iš paslaugos vartotojo, ir aš nenorėčiau versti vartotojų diegti modulius pagal sudo, ir tai yra ne teisinga.
Kaip padaryti, kad jis gražiai atrodytų?
UPD: 11.10.2019/19/16 XNUMX:XNUMX Problema išspręsta naudojant venv.
Buvo keletas pakeitimų. Kitas leidimas bus per kelias ateinančias dienas.

Šaltinis: www.habr.com

Добавить комментарий