74 lines
3.3 KiB
Markdown
74 lines
3.3 KiB
Markdown
# 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`](compose.yml) in Portainer, Dockge oder einem anderen Docker-Webinterface als Stack einfügen und starten.
|
|
|
|
Alternativ im ausgecheckten Repository:
|
|
|
|
```bash
|
|
docker compose up -d
|
|
```
|
|
|
|
Danach aufrufen:
|
|
|
|
```text
|
|
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
|
|
|
|
```yaml
|
|
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:
|
|
|
|
```bash
|
|
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.
|