Vorwort
FĂŒr persönliche Zwecke habe ich zu Hause VSphere eingerichtet, auf dem ich einen virtuellen Router und einen Ubuntu-Server als Medienserver sowie viele andere nĂŒtzliche Dinge betreibe. Dieser Server sollte ĂŒber das Internet zugĂ€nglich sein. Das Problem ist jedoch, dass mein Anbieter fĂŒr statische IPs GebĂŒhren verlangt, fĂŒr die man immer eine sinnvollere Verwendung finden kann. Daher habe ich ddclient + cloudflare verwendet.
Alles lief gut, bis ddclient nicht mehr funktionierte. Nach ein wenig Herumprobieren wurde mir klar, dass es Zeit fĂŒr Workarounds und kreative Lösungen war, da ich zu viel Zeit mit der Fehlersuche verbrachte. Am Ende entstand ein kleiner Daemon, der einfach lĂ€uft, mehr brauche ich nicht.
Interessierte sind herzlich eingeladen, weiterzulesen.
Verwendete Werkzeuge und wie »das« funktioniert
Als erstes habe ich auf der CloudFlare-Website alles nachgelesen, was man ĂŒber wissen muss. Nachdem ich bereits eine Weile mit Python gearbeitet hatte (seit meiner Bekanntschaft mit Python verwende ich es hĂ€ufiger fĂŒr einfache Aufgaben oder um schnell Prototypen zu erstellen), stieĂ ich plötzlich auf eine fast fertige Implementierung.
Im Grunde wurde der Wrapper .
als Basis genommen. Ich nahm eines der Beispiele zum Aktualisieren von DNS und fĂŒgte die Verwendung einer Konfigurationsdatei sowie die Möglichkeit hinzu, mehrere A-EintrĂ€ge innerhalb einer Zone und natĂŒrlich eine unbegrenzte Anzahl von Zonen zu aktualisieren.
Die Logik ist folgende:
- Das Skript liest aus der Konfigurationsdatei eine Liste von Zonen und durchlÀuft sie in einer Schleife.
- Innerhalb jeder Zone durchlÀuft das Skript in einer Schleife jede DNS-Eintragung vom Typ A oder AAAA und vergleicht die öffentliche IP mit dem Eintrag.
- Wenn sich die IP unterscheidet, Ă€ndert es sie, andernfalls ĂŒberspringt es die aktuelle Iteration und wechselt zur nĂ€chsten.
- Es schlÀft die Zeit, die in der Konfiguration angegeben ist,
Installation und Konfiguration
Vielleicht hÀtte ich auch ein .deb-Paket erstellen können, aber damit kenne ich mich nicht aus, und so kompliziert ist es nicht.
Den Prozess habe ich ausfĂŒhrlich in der README.md auf der .
Aber zur Sicherheit beschreibe ich es auf Russisch in allgemeinen Worten:
- Stellen Sie sicher, dass Sie python3 und python3-pip installiert haben. Falls nicht, installieren Sie es (unter Windows wird python3-pip zusammen mit Python installiert).
- Klonen oder laden Sie das Repository herunter.
- Installieren Sie die benötigten AbhÀngigkeiten.
python3 -m pip install -r requirements.txt - FĂŒhren Sie das Installationsskript aus.
FĂŒr Linux:chmod +x install.sh sudo ./install.shFĂŒr Windows: windows_install.bat
- Bearbeiten Sie die Konfigurationsdatei.
FĂŒr Linux:sudoedit /etc/zen-cf-ddns.confFĂŒr Windows:
Ăffnen Sie die Datei zen-cf-ddns.conf im Ordner, in den Sie das Skript installiert haben.
Das ist eine gewöhnliche JSON-Datei, die in den Einstellungen nichts Kompliziertes enthĂ€lt â ich habe absichtlich zwei verschiedene Bereiche als Beispiel beschrieben.
Was steckt hinter den Installationsprogrammen?
install.sh fĂŒr Linux:
- Ein Benutzer wird erstellt, um den Daemon ohne Erstellung eines Home-Verzeichnisses und ohne Anmeldemöglichkeiten zu starten.
sudo useradd -r -s /bin/false zen-cf-ddns - Eine Datei zur Protokollierung wird in /var/log/ erstellt.
- Wir machen den neu erstellten Benutzer zum EigentĂŒmer der Protokolldatei.
- Dateien werden an ihren Platz kopiert (Konfiguration in /etc, ausfĂŒhrbare Datei in /usr/bin, Dienstdatei in /lib/systemd/system).
- Der Dienst wird aktiviert.
windows_install.bat fĂŒr Windows:
- Kopiert die ausfĂŒhrbare Datei und die Konfigurationsdatei in den vom Benutzer angegebenen Ordner.
- Erstellt einen Task im Task Scheduler, um das Skript beim Systemstart auszufĂŒhren.
schtasks /create /tn "CloudFlare Update IP" /tr "%newLocation%" /sc onstart
Nach der Ănderung der Konfiguration muss das Skript neu gestartet werden. In Linux ist das einfach und vertraut:
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 muss ich den Prozess pythonw beenden und das Skript erneut starten (ich habe keine Lust, einen Dienst unter Windows in C# zu schreiben):
taskkill /im pythonw.exeDamit ist die Installation und Konfiguration abgeschlossen, viel SpaĂ damit.
FĂŒr diejenigen, die sich den nicht sehr schönen Python-Code ansehen möchten, hier ist er. .
MIT-Lizenz, also macht, was ihr wollt.
P.S.: Ich verstehe, dass es etwas umstĂ€ndlich geraten ist, aber es erfĂŒllt seinen Zweck hervorragend.
UPD: 11.10.2019 17:37
Ich habe noch ein Problem gefunden, und wenn jemand einen Tipp zur Lösung hat, wÀre ich sehr dankbar.
Das Problem ist, dass, wenn man die AbhĂ€ngigkeiten ohne sudo python -m pip install -r ... installiert, die Module fĂŒr den Servicenutzer nicht sichtbar sind. Ich möchte nicht, dass die Benutzer die Module mit sudo installieren mĂŒssen; das wĂ€re auch nicht richtig.
Wie kann ich es richtig machen, damit es schön aussieht?
UPD: 11.10.2019 19:16 Das Problem wurde durch die Verwendung von venv gelöst.
Es gab mehrere Ănderungen. Ein weiteres Release wird in den nĂ€chsten Tagen verfĂŒgbar sein.
Quelle: habr.com
