Ihr eigenes dynamisches DNS mit CloudFlare

Vorwort

Ihr eigenes dynamisches DNS mit CloudFlare Für den persönlichen Bedarf zu Hause habe ich VSphere installiert, auf dem ich einen virtuellen Router und einen Ubuntu-Server als Medienserver und eine Menge anderer Extras betreibe, und dieser Server sollte über das Internet erreichbar sein. Das Problem ist aber, dass mein Provider gegen Geld statische Daten zur Verfügung stellt, die immer für sinnvollere Zwecke genutzt werden können. Daher habe ich die Kombination ddclient + cloudflare verwendet.

Alles war in Ordnung, bis ddclient nicht mehr funktionierte. Nachdem ich ein wenig herumgeschnüffelt hatte, wurde mir klar, dass die Zeit für Krücken und Fahrräder gekommen war, da es zu lange dauerte, das Problem zu finden. Am Ende ist alles zu einem kleinen Daemon geworden, der einfach funktioniert, und ich brauche nichts anderes.
Wenn jemand Interesse hat, herzlich willkommen bei cat.

Verwendete Werkzeuge und wie „es“ funktioniert

Das erste, was ich auf der Cloudflare-Website herausgefunden habe, ist also alles, was Sie wissen müssen API. Und ich hatte mich schon hingesetzt, um alles in Python zu implementieren (nachdem ich mich mit Python vertraut gemacht hatte, nutze ich es zunehmend für einige einfache Aufgaben oder wenn ich schnell einen Prototypen erstellen muss), als ich plötzlich auf eine fast fertige Implementierung stieß.
Im Allgemeinen wurde die Hülle als Grundlage genommen Python-Cloudflare.

Ich habe eines der Beispiele 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 einer unbegrenzten Anzahl von Zonen zu aktualisieren.

Die Logik ist wie folgt:

  1. Das Skript empfängt eine Liste von Zonen aus der Konfigurationsdatei und durchläuft diese in einer Schleife
  2. In jeder Zone durchläuft das Skript jeden DNS-Eintrag vom Typ A oder AAAA und überprüft die öffentliche IP mit dem Eintrag
  3. Wenn die IP unterschiedlich ist, wird sie geändert; andernfalls wird die Schleifeniteration übersprungen und mit der nächsten fortgefahren.
  4. Schläft für die in der Konfiguration angegebene Zeit ein

Installation und Konfiguration

Es wäre wahrscheinlich möglich, ein .deb-Paket zu erstellen, aber ich bin darin nicht gut und es ist auch gar nicht so schwierig.
Ich habe den Vorgang in README.md ausführlich beschrieben Repository-Seite.

Aber für alle Fälle beschreibe ich es allgemein auf Russisch:

  1. Stellen Sie sicher, dass Sie Python3 und Python3-Pip installiert haben. Wenn nicht, installieren Sie es (unter Windows wird Python3-Pip zusammen mit Python installiert).
  2. Klonen Sie das Repository oder laden Sie es herunter
  3. Installieren Sie die erforderlichen Abhängigkeiten.
    python3 -m pip install -r requirements.txt

  4. Führen Sie das Installationsskript aus
    Für Linux:

    chmod +x install.sh
    sudo ./install.sh

    Für Windows: windows_install.bat

  5. 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 normale JSON-Datei, die Einstellungen sind nicht kompliziert – ich habe darin speziell zwei verschiedene Zonen als Beispiel beschrieben.

Was steckt hinter den Installern?

install.sh für Linux:

  1. Es wird ein Benutzer erstellt, um den Daemon auszuführen, ohne ein Home-Verzeichnis zu erstellen und ohne die Möglichkeit, sich anzumelden.
    sudo useradd -r -s /bin/false zen-cf-ddns

  2. Eine Protokolldatei wird in /var/log/ erstellt.
  3. Machen Sie den neu erstellten Benutzer zum Eigentümer der Protokolldatei
  4. Die Dateien werden an ihren Speicherort kopiert (Konfiguration in /etc, ausführbare Datei in /usr/bin, Servicedatei in /lib/systemd/system).
  5. Der Dienst ist aktiviert

windows_install.bat für Windows:

  1. Kopiert die ausführbare Datei und die Konfigurationsdatei in einen vom Benutzer angegebenen Ordner
  2. Erstellt eine Aufgabe im 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; 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 (ich bin zu faul, einen Dienst für Windows in C# zu schreiben):

taskkill /im pythonw.exe

Damit ist die Installation und Konfiguration abgeschlossen. Genießen Sie es auf Ihre Gesundheit.

Für diejenigen, die den nicht ganz so schönen Python-Code sehen möchten, ist er hier Repository auf GitHub.

MIT-Lizenz, also machen Sie mit diesem Zeug, was Sie wollen.

PS: Ich verstehe, dass es sich als eine Art Krücke herausgestellt hat, aber es erfüllt seinen Zweck mit Bravour.

UPD: 11.10.2019 17:37
Ich habe ein weiteres Problem gefunden und wenn mir jemand sagt, wie ich es lösen kann, wäre ich sehr dankbar.
Das Problem ist, dass, wenn Sie Abhängigkeiten ohne sudo python -m pip install -r ... installieren, die Module für den Dienstbenutzer nicht sichtbar sind und ich Benutzer nicht zwingen möchte, Module unter sudo zu installieren, und das ist es nicht richtig.
Wie kann man es schön aussehen lassen?
UPD: 11.10.2019 19:16 Das Problem wurde mit venv gelöst.
Es gab mehrere Änderungen. Die nächste Veröffentlichung erfolgt in den nächsten Tagen.

Source: habr.com

Kommentar hinzufügen