DNS dinamik me CloudFlare

Parathënie

DNS dinamik me CloudFlare Për nevojat personale në shtëpi, ngrita VSphere, në të cilin kruaj një ruter virtual dhe një server Ubuntu si server mediatik dhe shumë të tjera gjëra të këndshme, dhe ky server duhet të jetë i aksesueshëm nga Interneti. Por problemi është se ofruesi im jep statik për para, të cilat gjithmonë mund të përdoren për diçka më të dobishme. Prandaj kam përdorur një kombinim ddclient + cloudflare.

Gjithçka shkonte mirë, derisa ddclient ndaloi së funksionuari. Duke e hetuar pak, kuptova se ishte koha për zgjidhje të shpejta dhe të improvizuara, pasi koha që po shpenzoja për të gjetur problemin ishte bërë shumë e madhe. Në fund, gjithçka përfundoi me një demon të vogël që funksionon thjesht, dhe më shumë se kaq nuk më nevojitet.
Kush Ă«shtĂ« i interesuar – mirĂ«seerdhĂ«t nĂ«n kat.

Mjetet e përdorura dhe si funksionon "kjo"

Pra, fillimisht mësova në faqen e cloudflare, gjithçka që duhet të di për API. Dhe isha duke filluar ta realizoja gjithçka në Python (pasi pas njohjes me Python, e aplikoj gjithnjë e më shpesh për disa detyra të thjeshta ose kur duhet të krijoj shpejt një prototip), kur papritmas u ndesha me një implementim praktikisht të gatshëm.
Në përgjithësi, si bazë u mor një wrapper python-cloudflare.

Kam një nga shembujt për përditësimin e DNS dhe shtova përdorimin e skedarit të konfigurimit dhe mundësinë për të përditësuar disa A zapisa brenda zonës dhe natyrisht një numër të pakufizuar zonash.

Logjika është si më poshtë:

  1. Skripti merr nga skedari i konfigurimit listën e zonave dhe kalon përmes tyre në një cikël.
  2. Në çdo zonë, skripti kalon në cikël për çdo regjistrim DNS të tipit A ose AAAA dhe krahasohet IP Publik me regjistrimin.
  3. Nëse IP ndryshon, e ndërron, nëse jo, kalon iteracionin e ciklit dhe kalon në të ardhmen.
  4. Blen për një kohë të caktuar, e cila është e caktuar në konfigurim.

Instalimi dhe konfigurimi

Mund ta kisha bërë edhe një paketë .deb, por nuk jam aq i aftë në këtë, dhe gjithashtu nuk është kaq e komplikuar.
Procesi është përshkruar mjaft hollësisht në README.md në façën e repositorit..

Por për çdo rast, do ta përshkruaj në rusisht me fjalë të përgjithshme:

  1. Sigurohuni qĂ« tĂ« keni instaluar python3 dhe python3-pip, nĂ«se jo — instaloni (nĂ« Windows, python3-pip instalohet sĂ« bashku me Python).
  2. Klononi ose shkarkoni repositorin.
  3. Instaloni varësitë e nevojshme.
    python3 -m pip install -r requirements.txt

  4. Dilni skriptin e instalimit.
    Për Linux:
    chmod +x install.sh
    sudo ./install.sh

    Për Windows: windows_install.bat

  5. Modifikoni skedarin e konfigurimit.
    Për Linux:
    sudoedit /etc/zen-cf-ddns.conf

    Për Windows:

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

    Ky Ă«shtĂ« njĂ« skedar i zakonshĂ«m JSON, nuk ka asgjĂ« tĂ« komplikuar nĂ« konfigurime – kam pĂ«rshkruar si shembull 2 zona tĂ« ndryshme nĂ« tĂ«.

ÇfarĂ« fshihet pas instaluesve?

install.sh për Linux:

  1. Krijohet një përdorues për të drejtuar demonin, pa krijuar një direktori shtëpie dhe pa mundësi logimi.
    sudo useradd -r -s /bin/false zen-cf-ddns

  2. Krijohet një skedar për regjistrimin e logut në /var/log/
  3. Bëni pronar të skedarit të logut përdoruesin e sapokrijuar
  4. Skedarët kopjohen në vendet e tyre (konfigurimi në /etc, skedari ekzekutues në /usr/bin, skedari i shërbimit në /lib/systemd/system)
  5. Aktivizohet shërbimi

windows_install.bat për Windows:

  1. Kopjon skedarin ekzekutues dhe skedarin e konfigurimit në dosjen e specifikuar nga përdoruesi
  2. Krijon një detyrë në planifikues për të nisur skriptin gjatë nisjes së sistemit
    schtasks /create /tn "CloudFlare Update IP" /tr "%newLocation%" /sc onstart

Pas ndryshimit të konfigurimit, skripti duhet të rinishet, në Linux është gjithçka e thjeshtë dhe e zakonshme:

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ë duhet të mbyllni procesin pythonw dhe ta rinisni përsëri skriptin (mua më vjen shumë ndyrë të shkruaj një shërbim për Windows në C#):

taskkill /im pythonw.exe

Këtu përfundojnë instalimi dhe konfigurimi, shfrytëzoni me shëndet.

Për ata që duan të shohin kodin Python, ja. repo në GitHub.

Licenca MIT, kështu që bëni çfarë dëshironi me këtë.

P.S.: E kuptoj që doli pak si improvizuar, por përmbush detyrën me sukses.

UPD: 11.10.2019 17:37
Gjeta njĂ« problem tjetĂ«r, dhe nĂ«se ndokush mund tĂ« mĂ« ndihmojĂ« ta zgjidh kĂ«tĂ« — do jem shumĂ« mirĂ«njohĂ«s.
Problemi është se, nëse instaloni varësitë 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 doja t'i detyroja përdoruesit të instalonin modulët nën sudo, sepse nuk është e drejtë.
Si të bëj që ta kem të bukur?
UPD: 11.10.2019 19:16 Problemi është zgjidhur përmes përdorimit të venv.
I kemi disa ndryshime. Një version i ri do të jetë së shpejti.

Burimi: habr.com

Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« đŸ”„ Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« | ProHoster