Eigene DynDNS-Proxy-App für die FRITZ!Box (Flask/SQLite) oder FRITZ!Box DynDNS-Limit umgehen: Mein "Multi-DynDNS"-Skript

Hallo zusammen,

ich bin mir nicht ganz sicher, ob hier Bedarf besteht, aber ich dachte, ich teile einfach mal mein aktuelles Projekt mit euch und schaue, was ihr dazu sagt.

Wie die meisten hier nutze ich leidenschaftlich gerne ipv64.net. Allerdings hat man ja oft das Problem, dass man zusätzlich noch eigene Domains bei Anbieter X oder ein Backup-Ziel bei Anbieter Y hat. Die FRITZ!Box erlaubt im GUI bekanntlich aber immer nur einen einzigen DynDNS-Anbieter.

Da ich keine Lust auf unnötige Cronjobs hatte, die stumpf alle 5 Minuten meine IP prüfen, habe ich mir einen kleinen DynDNS-Proxy auf Flask- und SQLite-Basis gebaut.

Das Prinzip ist denkbar simpel, aber extrem ressourcenschonend (Event-Driven):

  1. Die FRITZ!Box bekommt eine neue IP und triggert als Custom-DynDNS meinen lokalen Dienst im LAN (z.B. http://192.168.178.115:5000/receive?ip=<ipaddr>).

  2. Mein Skript nimmt die IP entgegen, antwortet der FRITZ!Box sofort mit einem 200 OK (damit die Box nicht in ein Timeout läuft) und startet den Update-Prozess asynchron im Hintergrund.

  3. Nach einer künstlichen Gedenksekunde von 15 Sekunden (bis die FRITZ!Box nach dem Sync auch wirklich wieder sauber im Internet steht) rattert das Skript eine SQLite-Datenbank ab.

  4. Alle dort hinterlegten Update-URLs (egal ob ipv64, Strato, Telegram-Bot-Hooks etc.) werden nacheinander mit der neuen IP gefüttert.

Das Ganze hat ein kleines, feines Dark-Theme-Webinterface, über das man die Anbieter per CRUD (Hinzufügen, Testen, Löschen, Editieren) verwalten kann. Jedes Update läuft in einem eigenen Thread und ist mit einem 15-Sekunden-Timeout abgesichert, falls ein externer Anbieter mal zickt.

Das Tool steckt zwar noch in den „Kinderschuhen“, läuft bei mir auf dem Proxmox-Host aber seit einer Weile absolut fehlerfrei.

Besteht an so einem simplen Container/Skript Interesse in der Community? Falls ja, würde ich den Code mal sauber dokumentieren und auf GitHub hochladen. Falls nicht: „It works on my machine!“ :wink:

Freue mich auf euer Feedback!