DNS-ja juaj dinamike duke përdorur CloudFlare

Parathënie libri

DNS-ja juaj dinamike duke përdorur CloudFlare Për nevoja personale në shtëpi, kam instaluar VSphere, në të cilin kam një ruter virtual dhe një server Ubuntu si server mediatik dhe një mori të mirash të tjera, dhe ky server duhet të jetë i aksesueshëm nga Interneti. Por problemi është se ofruesi im jep të dhëna statike për para, të cilat gjithmonë mund të përdoren për qëllime më të dobishme. Prandaj, përdora kombinimin ddclient + cloudflare.

Gjithçka ishte në rregull derisa ddclient ndaloi së punuari. Pasi u hodha pak, kuptova se kishte ardhur koha për paterica dhe biçikleta, pasi kërkonte shumë kohë për të gjetur problemin. Në fund, gjithçka u shndërrua në një demon të vogël që funksionon dhe nuk kam nevojë për asgjë tjetër.
Nëse dikush është i interesuar, mirëpritur në cat.

Mjetet e përdorura dhe si funksionon "ajo".

Pra, gjëja e parë që zbulova në faqen e internetit cloudflare është gjithçka që duhet të dini rreth API. Dhe unë tashmë isha ulur për të zbatuar gjithçka në Python (pasi u njoha me Python, e përdor gjithnjë e më shumë për disa detyra të thjeshta ose kur më duhet të bëj shpejt një prototip), kur papritmas hasa në një zbatim pothuajse të gatshëm.
Në përgjithësi, mbështjellësi u mor si bazë python-cloudflare.

Mora një nga shembujt për përditësimin e DNS dhe shtova përdorimin e një skedari konfigurimi dhe aftësinë për të përditësuar disa regjistrime A brenda një zone dhe, natyrisht, një numër të pakufizuar zonash.

Logjika është si më poshtë:

  1. Skripti merr një listë zonash nga skedari i konfigurimit dhe kalon nëpër to
  2. Në secilën zonë, skripti kalon nëpër çdo rekord DNS të tipit A ose AAAA dhe kontrollon IP-në publike me regjistrimin
  3. Nëse IP-ja është e ndryshme, ai e ndryshon atë; nëse jo, ai anashkalon përsëritjen e ciklit dhe kalon në tjetrin.
  4. Bie në gjumë për kohën e specifikuar në konfigurim

Instalimi dhe konfigurimi

Ndoshta do të ishte e mundur të bëhej një paketë .deb, por unë nuk jam i mirë në këtë dhe nuk është aq e vështirë.
Unë e përshkrova procesin në detaje në README.md në faqe depoje.

Por për çdo rast, unë do ta përshkruaj në rusisht në terma të përgjithshëm:

  1. Sigurohuni që të keni të instaluar python3 dhe python3-pip, nëse jo, instaloni (në Windows, python3-pip është instaluar së bashku me Python)
  2. Klononi ose shkarkoni depon
  3. Instaloni varësitë e kërkuara.
    python3 -m pip install -r requirements.txt

  4. Ekzekutoni skriptin e instalimit
    Për Linux:

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

    Për Windows: windows_install.bat

  5. Redaktoni skedarin e konfigurimit
    Për Linux:

    sudoedit /etc/zen-cf-ddns.conf

    Për Windows:

    Hapni skedarin zen-cf-ddns.conf në dosjen ku keni instaluar skriptin.

    Ky është një skedar i rregullt JSON, cilësimet nuk janë asgjë të komplikuar - unë përshkrova në mënyrë specifike 2 zona të ndryshme në të si shembull.

Çfarë fshihet pas instaluesve?

install.sh për Linux:

  1. Një përdorues është krijuar për të ekzekutuar daemon, pa krijuar një direktori kryesore dhe pa aftësinë për t'u identifikuar.
    sudo useradd -r -s /bin/false zen-cf-ddns

  2. Një skedar log krijohet në /var/log/
  3. Bëjeni përdoruesin e krijuar rishtazi pronar të skedarit të regjistrit
  4. Skedarët kopjohen në vendet e tyre (konfigurimi në /etc, skedari i ekzekutueshëm në /usr/bin, skedari i shërbimit në /lib/systemd/system)
  5. Shërbimi është aktivizuar

windows_install.bat për Windows:

  1. Kopjon skedarin e ekzekutueshëm dhe të konfigurimit në një dosje të specifikuar nga përdoruesi
  2. Krijon një detyrë në planifikues për të ekzekutuar skriptin në fillimin e sistemit
    schtasks /create /tn "CloudFlare Update IP" /tr "%newLocation%" /sc onstart

Pas ndryshimit të konfigurimit, skripti duhet të rifillohet; në Linux gjithçka është e thjeshtë dhe e njohur:

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

për Windows do t'ju duhet të vrisni procesin e pythonw dhe të ridrejtoni skriptin (jam shumë dembel të shkruaj një shërbim për Windows në C#):

taskkill /im pythonw.exe

Kjo përfundon instalimin dhe konfigurimin, kënaquni me shëndetin tuaj.

Për ata që duan të shohin kodin jo aq të bukur Python, ja ku është depo në GitHub.

MIT i licencuar, kështu që bëni me këto gjëra çfarë të doni.

PS: E kuptoj qe doli pak paterica, por e ben punen me buke.

UPD: 11.10.2019/17/37 XNUMX:XNUMX
Kam gjetur edhe 1 problem dhe nëse dikush më thotë se si ta zgjidh, do të jem shumë mirënjohës.
Problemi është se nëse instaloni varësi pa sudo python -m pip install -r ..., atëherë modulet nuk do të jenë të dukshme nga përdoruesi i shërbimit dhe nuk do të doja t'i detyroja përdoruesit të instalojnë module nën sudo, dhe kjo është nuk është e saktë.
Si ta bëni atë të duket bukur?
UPD: 11.10.2019/19/16 XNUMX:XNUMX Problemi u zgjidh duke përdorur venv.
Ka pasur disa ndryshime. Publikimi i radhës do të jetë në ditët në vijim.

Burimi: www.habr.com

Shto një koment