Förord
För personliga ÀndamÄl hemma har jag installerat VSphere, dÀr jag kör en virtuell router och en Ubuntu-server som medieserver samt en massa andra trevligheter, och denna server mÄste vara tillgÀnglig frÄn Internet. Problemet Àr att min leverantör tar betalt för statiska IP-adresser, vilket alltid kan anvÀndas till nÄgot mer nyttigt. SÄ jag anvÀnde en kombination av ddclient + cloudflare.
Det gick bra tills ddclient slutade fungera. Efter att ha grÀvt lite i det insÄg jag att det var dags för provisoriska lösningar och cyklar, eftersom jag la ner för mycket tid pÄ att leta efter problemet. I slutÀndan resulterade det i en liten daemon som bara fungerar, och det Àr allt jag behöver.
Den som Àr intresserad Àr vÀlkommen under kat.
AnvÀnda verktyg och hur "det" fungerar
SÄ först kollade jag pÄ cloudflare:s webbplats för allt som behövdes veta om . Jag hade redan börjat implementera allt i Python (efter att ha lÀrt mig Python anvÀnder jag det allt oftare för enkla uppgifter eller nÀr jag snabbt behöver göra en prototyp), nÀr jag plötsligt snubblade över en nÀstan fÀrdig implementation.
Som grundval anvÀndes en wrapper .
Jag tog ett av exemplen för att uppdatera DNS och lade till anvÀndningen av en konfigurationsfil samt möjligheten att uppdatera flera A-poster inom en zon och naturligtvis ett obegrÀnsat antal zoner.
Logiken Àr följande:
- Skriptet hÀmtar zonlistan frÄn konfigurationsfilen och gÄr igenom dem i en loop
- I varje zon gÄr skriptet igenom varje DNS-post av typ A eller AAAA i en loop och jÀmför den offentliga IP-adressen med posten
- Om IP-adressen skiljer sig â Ă€ndrar det den, annars hoppar det över iterationen av loopen och gĂ„r vidare till nĂ€sta
- Skripten sover under den tid som anges i konfigurationsfilen
Installation och konfiguration
Det hade kanske varit möjligt att skapa ett .deb-paket, men jag Àr inte sÄ duktig pÄ det, och det Àr inte sÄ komplicerat.
Processen har jag beskrivit ganska detaljerat i README.md pÄ .
Men för sÀkerhets skull ska jag kortfattat beskriva det pÄ svenska:
- Se till att du har python3 och python3-pip installerat, om inte â installera (i Windows installeras python3-pip tillsammans med Python)
- Klona eller ladda ner repositoryt
- Installerar de nödvÀndiga beroenden.
python3 -m pip install -r requirements.txt - Kör installationsskriptet
För Linux:chmod +x install.sh sudo ./install.shFör Windows: windows_install.bat
- Redigera konfigurationsfilen
För Linux:sudoedit /etc/zen-cf-ddns.confFör Windows:
Ăppna filen zen-cf-ddns.conf i mappen dĂ€r du installerade skriptet.
Det hĂ€r Ă€r en vanlig JSON-fil, instĂ€llningarna Ă€r inte komplicerade â jag har specifikt beskrivit tvĂ„ olika omrĂ„den som exempel i den.
Vad döljer sig bakom installatörerna?
install.sh för Linux:
- En anvÀndare skapas för att köra demon, utan att skapa en hemmakatalog och utan inloggningsmöjlighet.
sudo useradd -r -s /bin/false zen-cf-ddns - En fil skapas för att skriva loggar i /var/log/
- Vi gör den nyligen skapade anvÀndaren till Àgare av loggfilen
- Filer kopieras till sina platser (konfigurering i /etc, körbar fil i /usr/bin, servicemanifest i /lib/systemd/system)
- TjÀnsten aktiveras
windows_install.bat för Windows:
- Kopierar den körbara filen och konfigurationsfilen till den angivna mappen av anvÀndaren
- Skapar en uppgift i schemalÀggaren för att köra skriptet vid systemstart
schtasks /create /tn "CloudFlare Update IP" /tr "%newLocation%" /sc onstart
Efter att ha Àndrat konfigurationen mÄste skriptet startas om, i Linux Àr det enkelt och bekant:
sudo service zen-cf-ddns start
sudo service zen-cf-ddns stop
sudo service zen-cf-ddns restart
sudo service zen-cf-ddns status
för Windows mÄste man döda processen pythonw och starta skriptet igen (jag har inte lust att skriva en tjÀnst för Windows i C#):
taskkill /im pythonw.exeDetta avslutar installationen och konfigurationen, anvÀnd det med glÀdje.
För dem som vill se lite oestetisk Python-kod, hÀr Àr den .
MIT-licens, sÄ gör vad du vill med detta.
P.S.: Jag förstÄr att det blev lite hackigt, men det fungerar utmÀrkt för mitt syfte.
UPD: 11.10.2019 17:37
Jag har hittat ett problem till, och om nĂ„gon kan ge rĂ„d om hur man löser det â skulle jag vara mycket tacksam.
Problemet Ă€r att om du installerar beroenden utan sudo python -m pip install -r âŠ, sĂ„ kommer modulerna inte att vara synliga för tjĂ€nstanvĂ€ndaren, och jag skulle ogilla att tvinga anvĂ€ndare att installera moduler med sudo, vilket dessutom inte Ă€r korrekt.
Hur gör man rÀtt sÄ att det blir snyggt?
UPD: 11.10.2019 19:16 Problemet löst genom att anvÀnda venv.
Det blev nÄgra Àndringar. En ny version kommer snart.
KĂ€lla: habr.com
