Forord
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
Generelt ble innpakningen lagt til grunn
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:
- Skriptet mottar en liste over soner fra konfigurasjonsfilen og går gjennom dem
- I hver sone går skriptet gjennom hver DNS-post av type A eller AAAA og sjekker den offentlige IP-en med posten
- Hvis IP-en er annerledes, endrer den den; hvis ikke, hopper den over loop-iterasjonen og går videre til neste.
- 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å
Men for sikkerhets skyld vil jeg beskrive det på russisk i generelle termer:
- Pass på at du har python3 og python3-pip installert, hvis ikke, installer det (på Windows er python3-pip installert sammen med Python)
- Klon eller last ned depotet
- Installer de nødvendige avhengighetene.
python3 -m pip install -r requirements.txt
- Kjør installasjonsskriptet
For Linux:chmod +x install.sh sudo ./install.sh
For Windows: windows_install.bat
- 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:
- 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
- En loggfil opprettes i /var/log/
- Gjør den nyopprettede brukeren til eieren av loggfilen
- Filene kopieres til sine steder (config i /etc, kjørbar fil i /usr/bin, servicefil i /lib/systemd/system)
- Tjenesten er aktivert
windows_install.bat for Windows:
- Kopierer den kjørbare filen og konfigurasjonsfilen til en brukerspesifisert mappe
- 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
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