Jūsu dinamiskais DNS, izmantojot CloudFlare

priekšvārds

Jūsu dinamiskais DNS, izmantojot CloudFlare Personīgām vajadzībām mājās uzinstalēju VSphere, uz kura kā multivides serveri vadu virtuālo rūteri un Ubuntu serveri un vēl kaudzi citu labumu, un šim serverim vajadzētu būt pieejamam no interneta. Bet problēma ir tā, ka mans pakalpojumu sniedzējs par naudu sniedz statiskus datus, kurus vienmēr var izmantot noderīgākiem mērķiem. Tāpēc es izmantoju kombināciju ddclient + cloudflare.

Viss bija labi, līdz ddclient pārstāja darboties. Nedaudz pamūrējis, sapratu, ka ir pienācis laiks kruķiem un velosipēdiem, jo ​​problēmas atrašana prasīja pārāk daudz laika. Galu galā viss pārvērtās par mazu dēmonu, kas vienkārši darbojas, un man nekas cits nav vajadzīgs.
Ja kādam ir interese, laipni aicināti uz kaķi.

Izmantotie rīki un kā tas darbojas

Tāpēc pirmais, ko es uzzināju cloudflare vietnē, ir viss, kas jums jāzina API. Un es jau biju sēdies visu ieviest Python (pēc iepazīšanās ar Python, es to arvien biežāk izmantoju dažiem vienkāršiem uzdevumiem vai tad, kad man ātri jāuztaisa prototips), kad pēkšņi uzgāju gandrīz gatavu implementāciju.
Kopumā par pamatu tika ņemts iesaiņojums python-cloudflare.

Es paņēmu vienu no DNS atjaunināšanas piemēriem un pievienoju konfigurācijas faila izmantošanu un iespēju atjaunināt vairākus A ierakstus zonā un, protams, neierobežotu zonu skaitu.

Loģika ir šāda:

  1. Skripts saņem zonu sarakstu no konfigurācijas faila un veic cilpas caur tām
  2. Katrā zonā skripts iziet cauri katram A vai AAAA tipa DNS ierakstam un pārbauda publisko IP ar ierakstu.
  3. Ja IP atšķiras, tas to maina; ja nē, tas izlaiž cilpas iterāciju un pāriet uz nākamo.
  4. Aizmieg uz konfigurācijā norādīto laiku

Uzstādīšana un konfigurēšana

Droši vien būtu iespējams izveidot .deb pakotni, bet man tas nav labi, un tas nav nemaz tik grūti.
Es ļoti detalizēti aprakstīju procesu vietnē README.md on repozitorija lapa.

Bet katram gadījumam es to aprakstīšu krievu valodā vispārīgi:

  1. Pārliecinieties, vai ir instalēti python3 un python3-pip, ja nē, instalējiet to (operētājsistēmā Windows python3-pip ir instalēts kopā ar Python)
  2. Klonējiet vai lejupielādējiet repozitoriju
  3. Instalējiet nepieciešamās atkarības.
    python3 -m pip install -r requirements.txt

  4. Palaidiet instalācijas skriptu
    Operētājsistēmai Linux:

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

    Operētājsistēmai Windows: windows_install.bat

  5. Rediģējiet konfigurācijas failu
    Operētājsistēmai Linux:

    sudoedit /etc/zen-cf-ddns.conf

    Operētājsistēmai Windows:

    Atveriet failu zen-cf-ddns.conf mapē, kurā instalējāt skriptu.

    Šis ir parasts JSON fails, iestatījumos nav nekas sarežģīts - kā piemēru tajā īpaši aprakstīju 2 dažādas zonas.

Kas slēpjas aiz uzstādītājiem?

install.sh operētājsistēmai Linux:

  1. Lietotājs ir izveidots, lai palaistu dēmonu, neveidojot mājas direktoriju un bez iespējas pieteikties.
    sudo useradd -r -s /bin/false zen-cf-ddns

  2. Žurnāla fails tiek izveidots mapē /var/log/
  3. Padariet jaunizveidoto lietotāju par žurnālfaila īpašnieku
  4. Faili tiek kopēti savās vietās (config mapē /etc, izpildāmais fails mapē /usr/bin, pakalpojuma fails mapē /lib/systemd/system)
  5. Pakalpojums ir aktivizēts

windows_install.bat operētājsistēmai Windows:

  1. Kopē izpildāmo un konfigurācijas failu lietotāja norādītā mapē
  2. Plānotājā izveido uzdevumu, lai palaistu skriptu sistēmas startēšanas laikā
    schtasks /create /tn "CloudFlare Update IP" /tr "%newLocation%" /sc onstart

Pēc konfigurācijas maiņas skripts ir jārestartē; Linux viss ir vienkāršs un pazīstams:

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

operētājsistēmai Windows jums būs jānogalina pythonw process un atkārtoti jāpalaiž skripts (es esmu pārāk slinks, lai rakstītu pakalpojumu Windows C#):

taskkill /im pythonw.exe

Tas pabeidz instalēšanu un konfigurēšanu, izbaudiet to savai veselībai.

Tiem, kas vēlas redzēt ne pārāk skaisto Python kodu, tas ir šeit krātuve vietnē GitHub.

MIT licencēts, tāpēc dariet ar šīm lietām, ko vēlaties.

PS: Es saprotu, ka tas izrādījās mazliet kruķis, bet tas dara savu darbu ar blīkšķi.

UPD: 11.10.2019/17/37 XNUMX:XNUMX
Atradu vēl 1 problēmu, un ja kāds pastāstīs kā to atrisināt, būšu ļoti pateicīgs.
Problēma ir tāda, ka, ja instalējat atkarības bez sudo python -m pip install -r ..., tad moduļi nebūs redzami no pakalpojuma lietotāja, un es negribētu piespiest lietotājus instalēt moduļus zem sudo, un tas ir nav pareizi.
Kā lai tas izskatās skaisti?
UPD: 11.10.2019/19/16 XNUMX:XNUMX Problēma tika atrisināta, izmantojot venv.
Ir notikušas vairākas izmaiņas. Nākamais izlaidums būs tuvāko dienu laikā.

Avots: www.habr.com

Pievieno komentāru