Vorwort

Aus persönlichen Gründen hat er VSphere entwickelt, auf dem ich einen virtuellen Router und einen Ubuntu-Server als Medienserver und eine Reihe von Extras drehe. Dieser Server sollte über das Internet zugänglich sein. Das Problem ist jedoch, dass mein Anbieter Statik für Geld anbietet, für die Sie immer eine nützlichere Anwendung finden. Daher habe ich ein paar ddclient + cloudflare verwendet.
Alles war in Ordnung, bis ddclient aufhörte zu arbeiten. Nachdem ich ein wenig gegraben hatte, stellte ich fest, dass die Zeit für Krücken und Fahrräder gekommen war, da es zu lange dauerte, das Problem zu finden. Am Ende wurde alles zu einem kleinen Dämon, der einfach funktioniert, aber ich brauche ihn nicht mehr.
Wen kümmert es - willkommen bei Katze.
Gebrauchte Werkzeuge und wie "es" funktioniert
Das erste, was ich auf der Cloudflare-Site gelernt habe, ist alles, was Sie über die
API wissen müssen. Und ich habe mich bereits hingesetzt, um alles in Python zu implementieren (nachdem ich Python kennengelernt habe, verwende ich es häufiger für einige einfache Aufgaben oder wenn ich schnell einen Prototyp erstellen muss), als ich plötzlich auf eine fast fertige Implementierung stieß.
Im Allgemeinen wurde der Wrapper
Python-Cloudflare als Basis verwendet.
Ich habe ein Beispiel für die Aktualisierung von DNS genommen und die Verwendung einer Konfigurationsdatei und die Möglichkeit hinzugefügt, mehrere A-Einträge innerhalb einer Zone und natürlich eine unbegrenzte Anzahl von Zonen zu aktualisieren.
Die Logik lautet wie folgt:
- Das Skript empfängt eine Liste von Zonen aus der Konfigurationsdatei und durchläuft diese in einer Schleife
- In jeder Zone durchläuft das Skript jeden DNS-Eintrag vom Typ A oder AAAA und überprüft die öffentliche IP mit dem Eintrag
- Wenn IP anders ist, ändern Sie es. Wenn nicht, überspringen Sie die Iteration der Schleife und fahren Sie mit der nächsten fort
- Schläft zu der in der Konfiguration angegebenen Zeit ein
Installation und Einrichtung
Wahrscheinlich wäre es möglich, ein .deb-Paket zu erstellen, aber ich bin nicht stark darin, und es ist nicht so kompliziert.
Ich habe den Prozess in README.md auf
der Repository-Seite ausführlich beschrieben.
Aber nur für den Fall, ich werde allgemein auf Russisch beschreiben:
- Stellen Sie sicher, dass Sie Python3 und Python3-Pip installiert haben. Wenn nicht, installieren Sie (unter Windows ist Python3-Pip mit Python installiert).
- Klonen oder laden Sie das Repository herunter
- Installieren Sie die erforderlichen Abhängigkeiten.
python3 -m pip install -r requirements.txt
- Führen Sie das Installationsskript aus
Für Linux:
chmod +x install.sh sudo ./install.sh
Für Windows: windows_install.bat
- Bearbeiten Sie die Konfigurationsdatei
Für Linux:
sudoedit /etc/zen-cf-ddns.conf
Für Windows:
Öffnen Sie die Datei zen-cf-ddns.conf in dem Ordner, in dem Sie das Skript installiert haben.
Dies ist eine reguläre JSON-Datei, nichts wird durch die Einstellungen kompliziert - ich habe speziell als Beispiel 2 verschiedene Zonen darin beschrieben.
Was verbirgt sich hinter den Installateuren?
install.sh für Linux:
- Ein Benutzer wird erstellt, um den Dämon zu starten, ohne ein Basisverzeichnis und Anmeldefunktionen zu erstellen.
sudo useradd -r -s /bin/false zen-cf-ddns
- Eine Protokolldatei wird in / var / log / erstellt
- Wir machen den Besitzer der Protokolldatei des neu erstellten Benutzers
- Dateien werden an ihren Speicherorten kopiert (Konfiguration in / etc, ausführbare Datei in / usr / bin, Servicedatei in / lib / systemd / system)
- Service ist aktiviert
windows_install.bat für Windows:
- Kopieren Sie die ausführbare Datei und die Konfigurationsdatei in den benutzerdefinierten Ordner
- Erstellt im Scheduler eine Aufgabe, um beim Systemstart ein Skript auszuführen
schtasks /create /tn "CloudFlare Update IP" /tr "%newLocation%" /sc onstart
Nach dem Ändern der Konfiguration muss das Skript neu gestartet werden. Unter Linux ist alles 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 müssen Sie den Pythonw-Prozess beenden und das Skript erneut ausführen (es ist sehr faul für mich, einen Dienst unter Windows in C # zu schreiben):
taskkill /im pythonw.exe
Verwenden Sie nach Abschluss dieser Installation und Konfiguration Ihre Gesundheit.
Für diejenigen, die sich nicht den schönsten Python-Code ansehen möchten, gibt es hier ein
Repository auf GitHub .
MIT-Lizenz, also machen Sie mit diesem Gut, was Sie wollen.
PS: Ich verstehe, dass es sich als kleine Krücke herausstellte, aber die Aufgabe mit einem Knall bewältigt.
UPD: 10.10.2019 17:37
Ich habe noch ein Problem gefunden, und wenn mir jemand sagt, wie ich es lösen soll, bin ich sehr dankbar.
Das Problem ist, dass wenn Sie Abhängigkeiten ohne sudo python -m pip install -r ... installieren, die Module unter dem Dienstbenutzer nicht sichtbar sind, aber ich möchte Benutzer nicht zwingen, Module unter sudo zu installieren, und dies ist nicht korrekt.
Wie macht man es schön?
UPD: 10/11/2019 19:16 Das Problem wird mit venv gelöst.
Es stellte sich ein paar Änderungen heraus. Die nächste Veröffentlichung wird neulich sein.