Files
Brancheneinstufung2/duckdns_setup.md
Floke f2394e322f Docs: Add FritzBox Rebind Protection & Client Troubleshooting guides.
- Updated 'duckdns_setup.md' with critical instructions for configuring FritzBox DNS Rebind Protection to enable internal access (NAT Loopback).
- Added steps for clearing client-side DNS cache (Windows).
- Included Cloudflare DNS switch in documentation reflecting recent monitor script changes.
2026-01-06 13:19:32 +00:00

114 lines
4.7 KiB
Markdown

# DuckDNS & DNS Monitor Setup
**Erstellt am:** 05.01.2026
**Zuletzt aktualisiert:** 06.01.2026
**Status:** Aktiv
**Architektur:** Sidecar-Pattern
Dieses Dokument beschreibt die Docker-basierte Lösung zur DynDNS-Aktualisierung und Überwachung, die eingeführt wurde, um DNS-Caching-Probleme und Verbindungsabbrüche auf der Synology Diskstation zu beheben.
## Problembeschreibung
Das ursprüngliche Synology-Skript im Aufgabenplaner führte zu unzuverlässigen DNS-Updates. Oft war die IP bei DuckDNS zwar aktuell, aber die Dienste waren von außen nicht erreichbar. Erst ein manuelles Ändern der IP auf einen falschen Wert und zurück (Toggle) löste das Problem. Dies deutete auf DNS-Propagation- oder Caching-Probleme hin.
Zusätzlich wurden "Zombie-Updater" (alte Konfigurationen in FritzBox oder Home Assistant) identifiziert, die die IP immer wieder auf veraltete Werte zurücksetzten ("IP Flapping").
## Lösung
Wir haben eine robuste **Zwei-Container-Lösung** (Sidecar-Pattern) implementiert:
1. **Updater (`duckdns`):** Aktualisiert zuverlässig die IP bei DuckDNS (Image: `linuxserver/duckdns`).
2. **Monitor (`dns-monitor`):** Überwacht unabhängig und differenziert die DNS-Auflösung.
## Konfiguration (`docker-compose.yml`)
### 1. Der Updater
Dieser Container sorgt dafür, dass DuckDNS immer die aktuelle IP kennt.
```yaml
duckdns:
image: lscr.io/linuxserver/duckdns:latest
container_name: duckdns
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/Berlin
- SUBDOMAINS=deine-subdomains # (ohne .duckdns.org, kommasepariert)
- TOKEN=dein-duckdns-token
restart: unless-stopped
```
### 2. Der Monitor (Sidecar)
Dieser Container prüft alle 5 Minuten die DNS-Auflösung und schreibt das Ergebnis ins Log. Er vergleicht:
1. **Public IP:** Die tatsächliche externe IP (via ipify).
2. **Global DNS:** Die IP laut Cloudflare DNS (1.1.1.1) -> Prüft Internet-Propagation (Google 8.8.8.8 erwies sich als zu langsam/unzuverlässig).
3. **Local DNS:** Die IP laut Container-Resolver -> Prüft lokales Caching.
```yaml
dns-monitor:
image: alpine
container_name: dns-monitor
# Explizite DNS-Server im Container setzen, um Synology-Timeouts zu umgehen:
dns:
- 8.8.8.8
- 1.1.1.1
environment:
- SUBDOMAINS=deine-subdomains
- TZ=Europe/Berlin
volumes:
- ./dns-monitor:/app
command: /app/monitor.sh
restart: unless-stopped
```
**Wichtig:** Das Skript `monitor.sh` liegt im Host-Verzeichnis `/app/dns-monitor/` und installiert zur Laufzeit fehlende Pakete (`bind-tools`, `curl`).
## Peripherie-Konfiguration (FritzBox / Router)
Damit die Dienste auch aus dem **internen Netzwerk (WLAN/LAN)** erreichbar sind, müssen Router-Einstellungen angepasst werden. Ohne diese Anpassungen blockiert der Router den Zugriff auf die eigene externe IP ("NAT Loopback" Problem) oder Clients cachen alte IPs.
### 1. FritzBox DNS-Rebind-Schutz
Die FritzBox blockiert standardmäßig DNS-Antworten, die auf private IP-Adressen zeigen (Rebind-Schutz). Dies verhindert oft auch das korrekte "Hairpinning" (Zugriff auf eigene externe IP von innen).
**Lösung:**
1. FritzBox Oberfläche öffnen (`http://fritz.box`).
2. Navigieren zu: **Heimnetz** -> **Netzwerk** -> Reiter **Netzwerkeinstellungen**.
3. Ganz unten (ggf. "weitere Einstellungen" aufklappen) zu **"DNS-Rebind-Schutz"**.
4. Dort **alle** genutzten Subdomains eintragen (eine pro Zeile):
```text
floke.duckdns.org
floke-ai.duckdns.org
floke-gitea.duckdns.org
floke-ha.duckdns.org
floke-n8n.duckdns.org
duckdns.org
```
5. Speichern.
### 2. Client DNS Cache leeren
Nach Änderungen an DuckDNS oder der FritzBox halten Windows-Clients oft noch stundenlang an der alten IP fest.
**Lösung (Windows CMD als Admin):**
```cmd
ipconfig /flushdns
ping floke.duckdns.org
```
Der Ping muss die aktuelle **externe IP** (z.B. `.252`) zurückgeben, nicht die alte. Wenn er die externe IP zeigt und `<1ms` Antwortzeit hat, funktioniert das NAT-Loopback korrekt.
## Troubleshooting
### "IP Flapping" (Zombie-Updater)
Wenn die IP im Monitor ständig zwischen der aktuellen (`...252`) und einer alten (`...49`) springt, gibt es einen zweiten Updater im Netzwerk (z.B. Router, Home Assistant, alte Skripte).
**Lösung:**
1. Login bei [duckdns.org](https://www.duckdns.org).
2. **Token rotieren** (Button "update token").
3. Neuen Token **nur** in der `docker-compose.yml` eintragen.
4. `docker-compose up -d duckdns` ausführen.
5. Damit werden alle alten Updater ausgesperrt.
### Logs prüfen
**Update-Status:** `docker logs duckdns`
**DNS-Konsistenz:** `docker logs dns-monitor`
## Dateien
- `/app/docker-compose.yml`: Definition der Services.
- `/app/dns-monitor/monitor.sh`: Das Shell-Skript für den Monitor-Container.