Hetzner DynDNS Dashboard
Ein schlankes, selbst gehostetes Dashboard für mehrere Hetzner-DNS-Zonen und DynDNS-Ziele. Der Container erkennt seine öffentliche IPv4/IPv6 in einem einstellbaren Rhythmus und aktualisiert ausschließlich aktivierte A-/AAAA-Records über die Hetzner Cloud DNS API.
Was es kann
- Mehrere Hetzner-Domains mit getrennten, verschlüsselten API-Tokens
- Import vorhandener A-/AAAA-Records und Anlegen neuer DynDNS-Hosts
- Reversibles Trennen von DynDNS-Zielen: Hetzner-Records bleiben bestehen und werden im lokalen Archiv angezeigt
- Globale, konfigurierbare IP-Prüfung mit HTTPS-Fallbackquellen
- Live-Countdown bis zum nächsten Scheduler-Lauf und manueller Sofortlauf für Admins
- Beschreibungen lokal und als Hetzner-Record-Kommentar
- Sichere Mehrbenutzerverwaltung:
Admin: vollständige Zonen-, Token-, Updater- und BenutzerverwaltungMitglied: ausschließlich explizit freigegebene Domains oder einzelne Subdomains
- SQLite-Datenvolume, Docker Secret für die Token-Verschlüsselung und kein externer Login-Dienst
Schnellstart
-
Secret-Verzeichnis anlegen und einen neuen Schlüssel erzeugen:
mkdir -p secrets openssl rand -base64 32 > secrets/dyndns_master_key chmod 700 secrets chmod 644 secrets/dyndns_master_key cp .env.example .env -
Für LAN-Zugriff in
.envBIND_ADDRESSauf die konkrete private IP des Docker-Hosts setzen, zum Beispiel192.168.178.10. Verwende im HTTP-LAN-Modus nie0.0.0.0.Die Schlüsseldatei benötigt bei Docker Compose Leserechte für den unprivilegierten Containerprozess. Das Verzeichnis selbst bleibt deshalb auf dem Host mit Modus
700geschützt; im Container läuft nur der nicht-root DynDNS-Prozess. -
Starten:
docker compose up -d --build -
Öffne
http://<host-ip>:8080, lege den ersten Admin-Benutzer an und verbinde eine Zone mit einem Hetzner Cloud API-Token.
Produktivbetrieb
Für den Produktivserver gibt es eine separate Compose-Datei, die ein versioniertes Image aus der Gitea Container Registry bezieht und niemals lokal baut. domain-control-webinterface-prod ist nur der Name des Container-Pakets; ein zweites Git-Repository ist nicht erforderlich:
docker compose --env-file .env.production -f compose.production.yml pull
docker compose --env-file .env.production -f compose.production.yml up -d
Die vollständige Anleitung für Gitea Actions, HTTPS-Reverse-Proxy, Installation, Backups, Updates und Rollbacks steht in PRODUCTION.md.
Sicherheit
- Passwörter werden mit Argon2id gehasht.
- Hetzner-Tokens werden mit XChaCha20-Poly1305 verschlüsselt; der Schlüssel liegt als Docker Secret außerhalb des Datenvolumes.
- Cookies sind
HttpOnlyundSameSite=Strict; alle schreibenden Formulare verwenden CSRF-Tokens. - Token-Anzeige verlangt die erneute Eingabe des Admin-Passworts und setzt
Cache-Control: no-store. - Unprivilegierte Nutzer sehen niemals API-Tokens, globale IP-Quellen, Update-Historie anderer Domains oder Benutzerverwaltung.
APP_MODE=lan ist nur für ein isoliertes, vertrauenswürdiges Netz geeignet. Passwort und API-Token sind bei HTTP auf einem fremden oder geteilten Netz nicht gegen Mitlesen geschützt. Für WLAN mit Gästen oder externen Zugriff setze einen HTTPS-Reverse-Proxy vor den Container und verwende APP_MODE=https.
Berechtigungen
Ein Admin legt unter Benutzer Konten an und entscheidet pro Mitglied:
- Ganze Domain: Zugriff auf alle aktuellen und später importierten/angelegten DynDNS-Ziele dieser Zone.
- Einzelne Subdomain: Zugriff nur auf den konkreten Host, etwa
home.example.de.
Mitglieder dürfen ihren freigegebenen Host aktivieren/deaktivieren und dessen Beschreibung pflegen. Sie können keine DNS-Records löschen, Domains importieren, API-Tokens einsehen oder globale Einstellungen verändern.
Daten und Betrieb
Die persistente Datenbank liegt im Docker-Volume dyndns-data. Sichere für Backups sowohl das Volume als auch das separate Master-Key-Secret; ohne den Master-Key lassen sich gespeicherte Hetzner-Tokens absichtlich nicht wiederherstellen.
Der Container bietet /healthz und /readyz. Für eine Aktualisierung ohne Warten auf das Intervall gibt es im Admin-Dashboard Jetzt aktualisieren.