From 3decb8e908fcba466f5a6070d7a6f77f30082d04 Mon Sep 17 00:00:00 2001 From: Floke Date: Tue, 6 Jan 2026 15:12:41 +0000 Subject: [PATCH] Docs: Update troubleshooting guide with Synology Network Interface DNS fix. - Documented the critical finding of hardcoded DNS (8.8.8.8) in Synology Network Interface settings overriding global DSM settings. - Added comprehensive checklist for Synology, FritzBox, and Client configuration to ensure DNS stability and NAT loopback functionality. - Updated log analysis section with 'NETWORK_WAIT' and 'ALERT' scenarios. --- duckdns_setup.md | 135 ++++++++++++++++++----------------------------- 1 file changed, 50 insertions(+), 85 deletions(-) diff --git a/duckdns_setup.md b/duckdns_setup.md index cfed7627..1b398eb2 100644 --- a/duckdns_setup.md +++ b/duckdns_setup.md @@ -5,110 +5,75 @@ **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. +Dieses Dokument beschreibt die Docker-basierte Lösung zur DynDNS-Aktualisierung und Überwachung sowie die kritischen Netzwerkeinstellungen auf der Synology Diskstation und der FritzBox. ## 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"). +Das System litt unter massiven DNS-Problemen: +1. **"IP Flapping":** Die IP sprang ständig zwischen der aktuellen (`.252`) und einer alten (`.49`), verursacht durch "Zombie-Updater" (alte Configs in FritzBox/HA) und DNS-Caching. +2. **Interne Unerreichbarkeit:** Dienste waren im LAN nicht erreichbar (NAT Loopback Problem). +3. **Synology DNS-Chaos:** Die Synology nutzte veraltete DNS-Server (`8.8.8.8`) fest in der Netzwerkschnittstelle, was zu falschen Auflösungen führte, selbst wenn der Router (FritzBox) korrekt war. ## Lösung -Wir haben eine robuste **Zwei-Container-Lösung** (Sidecar-Pattern) implementiert: +Wir haben eine robuste **Zwei-Container-Lösung** (Sidecar-Pattern) implementiert und das gesamte Netzwerk-Environment gehärtet. -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. +### 1. Docker Services (`docker-compose.yml`) -## Konfiguration (`docker-compose.yml`) +* **Updater (`duckdns`):** Aktualisiert zuverlässig die IP bei DuckDNS. Wir nutzen einen **neuen Token**, um alle alten Updater auszusperren. +* **Monitor (`dns-monitor`):** Überwacht alle 5 Minuten die DNS-Auflösung. Er vergleicht: + * **Public IP:** (via ipify) + * **Global DNS:** (via Cloudflare `1.1.1.1` - Google `8.8.8.8` erwies sich als zu langsam/gecacht) + * **Local DNS:** (Container/Host Resolver) -### 1. Der Updater -Dieser Container sorgt dafür, dass DuckDNS immer die aktuelle IP kennt. +## Kritische Peripherie-Konfiguration (MUSS GEPRÜFT WERDEN!) -```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 -``` +### 1. Synology DSM Netzwerkeinstellungen (Die "versteckte Falle") +Die Synology kann DNS-Server an zwei Orten haben. Die Schnittstellen-Einstellung überschreibt die allgemeine Einstellung! -### 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. +* **Ort 1 (Allgemein):** Systemsteuerung -> Netzwerk -> Allgemein -> "DNS-Server manuell konfigurieren". +* **Ort 2 (Schnittstelle - WICHTIG):** Systemsteuerung -> Netzwerk -> Netzwerk-Schnittstelle -> LAN 1 (oder aktiv) -> Bearbeiten -> IPv4. + * **Fehler:** Hier war manuell `8.8.8.8` eingetragen, der veraltete Daten lieferte. + * **Korrektur:** Auf "Automatisch abrufen" (DHCP von FritzBox) oder manuell auf `1.1.1.1` (Cloudflare) stellen. -```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 -``` +### 2. FritzBox (Router) +* **DNS-Server:** Internet -> Zugangsdaten -> DNS-Server. Empfehlung: Cloudflare (`1.1.1.1`, `1.0.0.1`) statt Provider-DNS oder Google. +* **DNS-Rebind-Schutz (NAT Loopback):** Heimnetz -> Netzwerk -> Netzwerkeinstellungen -> "DNS-Rebind-Schutz". + * Alle Subdomains eintragen (`floke.duckdns.org` etc.), damit der interne Zugriff auf die externe IP erlaubt wird. -**Wichtig:** Das Skript `monitor.sh` liegt im Host-Verzeichnis `/app/dns-monitor/` und installiert zur Laufzeit fehlende Pakete (`bind-tools`, `curl`). +### 3. DuckDNS Token Rotation +Um Zombie-Updater (alte Geräte) auszusperren: +1. Token auf duckdns.org erneuern. +2. Neuen Token **nur** im Docker-Container verwenden. +3. Alten Token überall löschen. -## 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):** +### 4. Client Cache (Windows) ```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 +## Logs & Monitoring -### "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). +### DNS-Konsistenz prüfen +```bash +docker logs dns-monitor +``` -**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. +**Szenario OK:** +```text +[TIMESTAMP] [OK] Pub: 87.x.x.x | CF: 87.x.x.x | Loc: 87.x.x.x +``` -### Logs prüfen -**Update-Status:** `docker logs duckdns` -**DNS-Konsistenz:** `docker logs dns-monitor` +**Szenario NETWORK_WAIT (Synology Timeout):** +```text +[TIMESTAMP] [NETWORK_WAIT] Pub: 87.x.x.x | CF: Unresolved | ... +``` +Deutet auf instabile Internetverbindung oder DNS-Blockade der Synology hin. + +**Szenario ALERT (Zombie/Cache):** +```text +[TIMESTAMP] [ALERT] Pub: 87.x.x.x | CF: 87.y.y.y | ... +``` +Cloudflare liefert falsche IP -> DuckDNS Update fehlgeschlagen oder Nameserver-Probleme. ## Dateien - `/app/docker-compose.yml`: Definition der Services. -- `/app/dns-monitor/monitor.sh`: Das Shell-Skript für den Monitor-Container. \ No newline at end of file +- `/app/dns-monitor/monitor.sh`: Das Shell-Skript für den Monitor-Container.