Jou eie dinamiese DNS met CloudFlare

voorwoord

Jou eie dinamiese DNS met CloudFlare Vir persoonlike behoeftes by die huis het ek VSphere grootgemaak, waarop ek 'n virtuele router en 'n Ubuntu-bediener as 'n mediabediener en 'n klomp ander lekkernye bestuur, en hierdie bediener behoort toeganklik te wees vanaf die internet. Maar die probleem is dat my ISP staties verskaf vir geld, wat altyd beter aangewend kan word. Daarom het ek 'n klomp ddclient + cloudflare gebruik.

Alles was in orde totdat ddclient ophou werk het. Nadat ek dit bietjie opgetel het, het ek besef die tyd het aangebreek vir krukke en fietse, aangesien dit te veel tyd begin neem het om na 'n probleem te soek. Op die ou end het alles in 'n klein demoon verander wat net werk, maar ek het nie meer nodig nie.
Wie gee om - welkom onder kat.

Gereedskap wat gebruik word en hoe "dit" werk

Die eerste ding wat ek dus op die cloudflare-webwerf geleer het, is alles waaroor u moet weet API. En ek het al gaan sit om alles in Python te implementeer (nadat ek met Python kennis gemaak het, gebruik ek dit toenemend vir 'n paar eenvoudige take of wanneer ek vinnig 'n prototipe moet maak), toe ek skielik op 'n amper klaargemaakte implementering afgekom het.
Oor die algemeen is die omhulsel as basis geneem luislang-wolkvlam.

Ek het een van die voorbeelde vir die opdatering van DNS geneem en die gebruik van 'n konfigurasielêer bygevoeg en die vermoë om verskeie A-rekords binne 'n sone op te dateer en natuurlik 'n onbeperkte aantal sones.

Die logika is die volgende:

  1. Die skrif ontvang 'n lys van sones vanaf die konfigurasielêer en loop deur hulle
  2. In elke sone loop die skrif deur elke DNS-rekord van tipe A of AAAA en kontroleer die publieke IP teen die rekord
  3. As die IP anders is, verander dit dit; indien nie, slaan dit die iterasie van die lus oor en beweeg na die volgende een.
  4. Slaap vir die tyd gespesifiseer in die konfigurasie

Installasie en konfigurasie

Waarskynlik sou dit moontlik wees om 'n .deb-pakket te maak, maar ek is nie sterk hierin nie, en dit is nie so moeilik nie.
Ek het die proses in detail beskryf in README.md op bewaarplek bladsy.

Maar net vir ingeval, sal ek in Russies in algemene terme beskryf:

  1. Maak seker dat jy python3 en python3-pip geïnstalleer het, indien nie, installeer (op Windows is python3-pip met Python geïnstalleer)
  2. Kloon of laai die bewaarplek af
  3. Installeer die vereiste afhanklikhede.
    python3 -m pip install -r requirements.txt

  4. Begin die installasieskrip
    Vir Linux:

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

    Vir Windows: windows_install.bat

  5. Wysig die konfigurasielêer
    Vir Linux:

    sudoedit /etc/zen-cf-ddns.conf

    Vir Windows:

    Maak die zen-cf-ddns.conf-lêer oop in die gids waar jy die skrip geïnstalleer het.

    Dit is 'n gewone JSON-lêer, die instellings is niks ingewikkeld nie - ek het spesifiek 2 verskillende sones daarin beskryf as 'n voorbeeld.

Wat is agter die installeerders?

install.sh vir Linux:

  1. 'n Gebruiker word geskep om die daemon te laat loop, sonder om 'n tuisgids te skep en om aan te meld.
    sudo useradd -r -s /bin/false zen-cf-ddns

  2. 'n Lêer word geskep om die log te skryf na /var/log/
  3. Stel die eienaar van die loglêer na die nuutgeskepte gebruiker
  4. Lêers word na hul plekke gekopieer (konfigureer in /etc, uitvoerbare lêer in /usr/bin, dienslêer in /lib/systemd/system)
  5. Diens is geaktiveer

windows_install.bat vir Windows:

  1. Kopieer die uitvoerbare en konfigurasielêer na 'n gebruikergespesifiseerde vouer
  2. Skep 'n taak in die skeduleerder om 'n skrip te laat loop wanneer die stelsel begin
    schtasks /create /tn "CloudFlare Update IP" /tr "%newLocation%" /sc onstart

Nadat die konfigurasie verander is, moet die skrip herbegin word, in Linux is alles eenvoudig en bekend:

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

vir Windows sal jy die pythonw-proses moet doodmaak en die skrip weer laat loop (ek is te lui om 'n diens onder Windows in C # te skryf):

taskkill /im pythonw.exe

Dit voltooi die installasie en konfigurasie, gebruik dit vir jou gesondheid.

Vir diegene wat na die nie-so-mooi Python-kode wil kyk, hier is bewaarplek op GitHub.

MIT-lisensie, so doen daarmee wat jy wil.

NS: Ek verstaan ​​dat dit 'n bietjie kruk geword het, maar dit hanteer sy taak met 'n knal.

UPD: 11.10.2019/17/37 XNUMX:XNUMX
Ek het nog 1 probleem gevind, en as iemand my vertel hoe om dit op te los, sal ek baie dankbaar wees.
Die probleem is dat as jy afhanklikhede installeer sonder sudo python -m pip install -r ..., dan sal die modules nie van onder die diensgebruiker sigbaar wees nie, en ek wil nie gebruikers dwing om modules onder sudo te installeer nie, en dit is nie korrek nie.
Hoe om dit mooi te maak?
UPD: 11.10.2019/19/16 XNUMX:XNUMX Probleem opgelos met behulp van venv.
Daar was verskeie veranderinge. Die volgende vrystelling sal in die volgende paar dae wees.

Bron: will.com

Voeg 'n opmerking