Din egen dynamiske DNS ved hjælp af CloudFlare

Forord

Din egen dynamiske DNS ved hjælp af CloudFlare Til personlige behov derhjemme installerede jeg VSphere, hvorpå jeg kører en virtuel router og en Ubuntu-server som medieserver og en masse andet godt, og denne server skulle være tilgængelig fra internettet. Men problemet er, at min udbyder giver statiske data for penge, som altid kan bruges til mere brugbare formål. Derfor brugte jeg kombinationen ddclient + cloudflare.

Alt var fint, indtil ddclient holdt op med at fungere. Efter at have rodet lidt rundt indså jeg, at tiden var inde til krykker og cykler, da det tog for lang tid at finde problemet. I sidste ende blev alt til en lille dæmon, der bare virker, og jeg har ikke brug for andet.
Hvis nogen er interesseret, så velkommen til kat.

Brugte værktøjer og hvordan "det" virker

Så det første jeg fandt ud af på cloudflares hjemmeside er alt hvad du behøver at vide om API. Og jeg havde allerede sat mig for at implementere alt i Python (efter at have stiftet bekendtskab med Python, bruger jeg det i stigende grad til nogle simple opgaver eller når jeg hurtigt skal lave en prototype), da jeg pludselig stødte på en næsten færdigimplementeret implementering.
Generelt blev indpakningen taget som grundlag python-cloudflare.

Jeg tog et af eksemplerne på opdatering af DNS og tilføjede brugen af ​​en konfigurationsfil og muligheden for at opdatere flere A-poster inden for en zone og selvfølgelig et ubegrænset antal zoner.

Logikken er som følger:

  1. Scriptet modtager en liste over zoner fra konfigurationsfilen og går gennem dem
  2. I hver zone går scriptet gennem hver DNS-post af type A eller AAAA og kontrollerer den offentlige IP med posten
  3. Hvis IP'en er anderledes, ændrer den den; hvis ikke, springer den over loop-iterationen og går videre til den næste.
  4. Falder i søvn i det tidsrum, der er angivet i konfigurationen

Installation og konfiguration

Det ville nok være muligt at lave en .deb-pakke, men jeg er ikke god til det her, og det er ikke så svært.
Jeg beskrev processen meget detaljeret i README.md på repository side.

Men for en sikkerheds skyld vil jeg beskrive det på russisk i generelle vendinger:

  1. Sørg for, at du har python3 og python3-pip installeret, hvis ikke, installer det (på Windows er python3-pip installeret sammen med Python)
  2. Klon eller download depotet
  3. Installer de nødvendige afhængigheder.
    python3 -m pip install -r requirements.txt

  4. Kør installationsscriptet
    For Linux:

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

    For Windows: windows_install.bat

  5. Rediger konfigurationsfilen
    For Linux:

    sudoedit /etc/zen-cf-ddns.conf

    Til Windows:

    Åbn filen zen-cf-ddns.conf i den mappe, hvor du installerede scriptet.

    Dette er en almindelig JSON-fil, indstillingerne er ikke noget komplicerede - jeg beskrev specifikt 2 forskellige zoner i den som et eksempel.

Hvad er der bag installatørerne?

install.sh til Linux:

  1. En bruger oprettes til at køre dæmonen uden at oprette en hjemmemappe og uden mulighed for at logge på.
    sudo useradd -r -s /bin/false zen-cf-ddns

  2. En logfil oprettes i /var/log/
  3. Gør den nyoprettede bruger til ejeren af ​​logfilen
  4. Filerne kopieres til deres steder (config i /etc, eksekverbar fil i /usr/bin, servicefil i /lib/systemd/system)
  5. Tjenesten er aktiveret

windows_install.bat til Windows:

  1. Kopierer den eksekverbare fil og konfigurationsfilen til en brugerspecificeret mappe
  2. Opretter en opgave i skemalæggeren for at køre scriptet ved systemstart
    schtasks /create /tn "CloudFlare Update IP" /tr "%newLocation%" /sc onstart

Efter at have ændret konfigurationen, skal scriptet genstartes; i Linux er alt enkelt og velkendt:

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

til Windows bliver du nødt til at dræbe pythonw-processen og køre scriptet igen (jeg er for doven til at skrive en service til Windows i C#):

taskkill /im pythonw.exe

Dette fuldender installationen og konfigurationen, nyd det til dit helbred.

For dem, der ønsker at se den knap så smukke Python-kode, er den her repository på GitHub.

MIT licenseret, så gør med disse ting, hvad du vil.

PS: Jeg forstår godt, at det viste sig at være lidt af en krykke, men den gør sit arbejde med et brag.

UPD: 11.10.2019/17/37 XNUMX:XNUMX
Jeg fandt 1 problem mere, og hvis nogen fortæller mig, hvordan jeg løser det, vil jeg være meget taknemmelig.
Problemet er, at hvis du installerer afhængigheder uden sudo python -m pip install -r ..., så vil modulerne ikke være synlige fra servicebrugeren, og jeg vil ikke tvinge brugerne til at installere moduler under sudo, og dette er ikke korrekt.
Hvordan får man det til at se smukt ud?
UPD: 11.10.2019/19/16 XNUMX:XNUMX Problemet blev løst ved hjælp af venv.
Der er sket flere ændringer. Den næste udgivelse kommer i løbet af de næste par dage.

Kilde: www.habr.com

Tilføj en kommentar