Files
hetzner-api-dyndns-records-…/README.md
T
admin 1c32ca0671
Container-Image veröffentlichen / container (push) Has been cancelled
feat: add secure Pi-hole DNS management
2026-07-13 02:49:41 +02:00

3.3 KiB

Hetzner DynDNS

Weboberfläche für mehrere Hetzner-DNS-Zonen, eine Pi-hole-v6-Verbindung, Subdomains und Benutzer. Aktivierte A- und AAAA-Records werden regelmäßig auf die aktuelle öffentliche IP gesetzt; lokale DNS-Einträge lassen sich direkt über die Pi-hole-API verwalten.

Starten

Die Datei compose.yml in Portainer, Dockge oder einem anderen Docker-Webinterface als Stack einfügen und starten.

Alternativ im ausgecheckten Repository:

docker compose up -d

Danach aufrufen:

http://IP-DES-DOCKER-HOSTS:9090

Beim ersten Start werden Datenbank und Verschlüsselungsschlüssel automatisch in getrennten Docker-Volumes angelegt. Es werden keine .env-Datei und kein manuell erzeugtes Secret benötigt.

Das Compose

services:
  dyndns:
    image: git.j-mahler.de/admin/domain-control-webinterface-prod:v1.2.0
    restart: unless-stopped
    ports:
      - "9090:8080"
    volumes:
      - dyndns-data:/data
      - dyndns-secrets:/secrets
    security_opt:
      - no-new-privileges:true
    cap_drop:
      - ALL

volumes:
  dyndns-data:
  dyndns-secrets:

Soll ein anderer Port verwendet werden, muss nur die linke Zahl geändert werden.

Aktualisieren

In compose.yml die Versionsnummer beim Image ändern, anschließend das Image ziehen und den Stack neu bereitstellen. Auf der Kommandozeile:

docker compose pull
docker compose up -d

Benutzer, Domains und Einstellungen bleiben in dyndns-data. Der Schlüssel für gespeicherte API-Tokens liegt in dyndns-secrets. Für ein vollständiges Backup müssen beide Volumes gesichert werden.

Funktionen

  • mehrere Domains und getrennt verschlüsselte Hetzner-API-Tokens
  • automatischer Import vorhandener A-/AAAA-Records
  • DynDNS pro Subdomain und IP-Familie aktivierbar
  • lokales Archiv statt Löschen von Hetzner-Records
  • frei einstellbares Update-Intervall mit Countdown
  • Admin- und Mitgliedskonten mit Domain- oder Subdomain-Rechten
  • eine Pi-hole-v6-Verbindung mit verschlüsseltem Anwendungspasswort und geschützter Anzeige nach erneuter Admin-Passwortprüfung
  • lokale Pi-hole-DNS-Einträge für IPv4 und IPv6 anlegen, aktivieren/deaktivieren, bearbeiten, aus der WebUI trennen, wiederherstellen und vollständig löschen

Der Container muss die verbundene Pi-hole-Adresse direkt im internen Netz erreichen können. Pi-hole-Sitzungen werden nur für die jeweilige Aktion erstellt und danach aktiv beendet; dauerhaft gespeichert wird ausschließlich das mit dem Master-Key verschlüsselte Anwendungspasswort. Der Master-Key liegt getrennt mit Dateimodus 0600; Datenverzeichnis und SQLite-Datei werden auf 0700 beziehungsweise 0600 gehärtet. Das Compose-Setup verwendet außerdem ein schreibgeschütztes Root-Dateisystem und ein begrenztes /tmp-Tmpfs. HTTPS mit gültigem Zertifikat ist empfohlen.

Damit ein Pi-hole-Anwendungspasswort lokale DNS-Einträge ändern darf, muss am Pi-hole webserver.api.app_sudo=true gesetzt sein; Pi-hole verwendet hierfür standardmäßig false. Zusätzlich darf der globale Schalter misc.readOnly nicht aktiviert sein. Bei einem Pi-hole-Docker-Container entspricht das beispielsweise FTLCONF_webserver_api_app_sudo: "true" und FTLCONF_misc_readOnly: "false".

Port 9090 verwendet zunächst unverschlüsseltes HTTP. Den Port daher nur in einem vertrauenswürdigen Netz freigeben und nicht offen ins Internet stellen.