Din egen dynamiske DNS ved hjelp av CloudFlare

Forord

Din egen dynamiske DNS ved hjelp av CloudFlare For personlige behov hjemme installerte jeg VSphere, hvor jeg kjører en virtuell ruter og en Ubuntu-server som medieserver og en haug med andre godbiter, og denne serveren skal være tilgjengelig fra Internett. Men problemet er at leverandøren min gir statiske data for penger, som alltid kan brukes til mer nyttige formål. Derfor brukte jeg kombinasjonen ddclient + cloudflare.

Alt var bra til ddclient sluttet å fungere. Etter å ha rotet litt, skjønte jeg at tiden var inne for krykker og sykler, siden det tok for lang tid å finne problemet. Til slutt ble alt til en liten demon som bare fungerer, og jeg trenger ikke noe annet.
Hvis noen er interessert, velkommen til katt.

Verktøy som brukes og hvordan "det" fungerer

Så det første jeg fant ut på cloudflare-nettstedet er alt du trenger å vite om API. Og jeg hadde allerede satt meg ned for å implementere alt i Python (etter å ha blitt kjent med Python bruker jeg det i økende grad til noen enkle oppgaver eller når jeg raskt skal lage en prototype), da jeg plutselig kom over en nesten ferdig implementering.
Generelt ble innpakningen lagt til grunn python-cloudflare.

Jeg tok et av eksemplene for oppdatering av DNS og la til bruken av en konfigurasjonsfil og muligheten til å oppdatere flere A-poster innenfor en sone og selvfølgelig et ubegrenset antall soner.

Logikken er som følger:

  1. Skriptet mottar en liste over soner fra konfigurasjonsfilen og går gjennom dem
  2. I hver sone går skriptet gjennom hver DNS-post av type A eller AAAA og sjekker den offentlige IP-en med posten
  3. Hvis IP-en er annerledes, endrer den den; hvis ikke, hopper den over loop-iterasjonen og går videre til neste.
  4. Sovner for tiden angitt i konfigurasjonen

Installasjon og konfigurasjon

Det ville nok vært mulig å lage en .deb-pakke, men jeg er ikke god på dette, og det er ikke så vanskelig.
Jeg beskrev prosessen i detalj i README.md på repository side.

Men for sikkerhets skyld vil jeg beskrive det på russisk i generelle termer:

  1. Pass på at du har python3 og python3-pip installert, hvis ikke, installer det (på Windows er python3-pip installert sammen med Python)
  2. Klon eller last ned depotet
  3. Installer de nødvendige avhengighetene.
    python3 -m pip install -r requirements.txt

  4. Kjør installasjonsskriptet
    For Linux:

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

    For Windows: windows_install.bat

  5. Rediger konfigurasjonsfilen
    For Linux:

    sudoedit /etc/zen-cf-ddns.conf

    For Windows:

    Åpne filen zen-cf-ddns.conf i mappen der du installerte skriptet.

    Dette er en vanlig JSON-fil, innstillingene er ikke noe komplisert - jeg beskrev spesifikt 2 forskjellige soner i den som et eksempel.

Hva ligger bak installatørene?

install.sh for Linux:

  1. En bruker er opprettet for å kjøre daemonen, uten å opprette en hjemmekatalog og uten mulighet til å logge på.
    sudo useradd -r -s /bin/false zen-cf-ddns

  2. En loggfil opprettes i /var/log/
  3. Gjør den nyopprettede brukeren til eieren av loggfilen
  4. Filene kopieres til sine steder (config i /etc, kjørbar fil i /usr/bin, servicefil i /lib/systemd/system)
  5. Tjenesten er aktivert

windows_install.bat for Windows:

  1. Kopierer den kjørbare filen og konfigurasjonsfilen til en brukerspesifisert mappe
  2. Oppretter en oppgave i planleggeren for å kjøre skriptet ved systemoppstart
    schtasks /create /tn "CloudFlare Update IP" /tr "%newLocation%" /sc onstart

Etter å ha endret konfigurasjonen, må skriptet startes på nytt; i Linux er alt enkelt og kjent:

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

for Windows må du drepe pythonw-prosessen og kjøre skriptet på nytt (jeg er for lat til å skrive en tjeneste for Windows i C#):

taskkill /im pythonw.exe

Dette fullfører installasjonen og konfigurasjonen, nyt det for helsen din.

For de som vil se den ikke fullt så pene Python-koden, her er den repository på GitHub.

MIT-lisensiert, så gjør med disse tingene hva du vil.

PS: Jeg forstår at det ble litt av en krykke, men den gjør jobben sin med et smell.

UPD: 11.10.2019/17/37 XNUMX:XNUMX
Jeg fant 1 problem til, og hvis noen forteller meg hvordan jeg skal løse det, vil jeg være veldig takknemlig.
Problemet er at hvis du installerer avhengigheter uten sudo python -m pip install -r ..., så vil ikke modulene være synlige fra tjenestebrukeren, og jeg vil ikke tvinge brukere til å installere moduler under sudo, og dette er Ikke korrekt.
Hvordan få det til å se vakkert ut?
UPD: 11.10.2019/19/16 XNUMX:XNUMX Problemet ble løst ved hjelp av venv.
Det har vært flere endringer. Neste utgivelse kommer i løpet av de neste dagene.

Kilde: www.habr.com

Legg til en kommentar