Forord
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
Generelt blev indpakningen taget som grundlag
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:
- Scriptet modtager en liste over zoner fra konfigurationsfilen og går gennem dem
- I hver zone går scriptet gennem hver DNS-post af type A eller AAAA og kontrollerer den offentlige IP med posten
- Hvis IP'en er anderledes, ændrer den den; hvis ikke, springer den over loop-iterationen og går videre til den næste.
- 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å
Men for en sikkerheds skyld vil jeg beskrive det på russisk i generelle vendinger:
- Sørg for, at du har python3 og python3-pip installeret, hvis ikke, installer det (på Windows er python3-pip installeret sammen med Python)
- Klon eller download depotet
- Installer de nødvendige afhængigheder.
python3 -m pip install -r requirements.txt
- Kør installationsscriptet
For Linux:chmod +x install.sh sudo ./install.sh
For Windows: windows_install.bat
- 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:
- 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
- En logfil oprettes i /var/log/
- Gør den nyoprettede bruger til ejeren af logfilen
- Filerne kopieres til deres steder (config i /etc, eksekverbar fil i /usr/bin, servicefil i /lib/systemd/system)
- Tjenesten er aktiveret
windows_install.bat til Windows:
- Kopierer den eksekverbare fil og konfigurationsfilen til en brugerspecificeret mappe
- 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
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