Files
Brancheneinstufung2/duckdns_setup.md
Floke 3c2d7b4744 Fix(DuckDNS): Resolve zombie updater conflict via token rotation.
- Updated 'docker-compose.yml' with new DuckDNS token to lock out rogue updaters (FritzBox/HA).
- Enhanced 'dns-monitor/monitor.sh' to detect 'IP Flapping' (Zombie Updaters) by comparing Public vs. Global vs. Local IPs.
- Updated documentation 'duckdns_setup.md' with troubleshooting steps for IP flapping and zombie updaters.
2026-01-06 11:43:31 +00:00

3.9 KiB

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.

  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 Google DNS (8.8.8.8) -> Prüft Internet-Propagation.
  3. Local DNS: Die IP laut Container-Resolver -> Prüft lokales Caching.
  dns-monitor:
    image: alpine
    container_name: dns-monitor
    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).

Logs & Monitoring

Update-Status prüfen

docker logs duckdns

DNS-Konsistenz prüfen (WICHTIG!)

Hier sehen wir, ob die Welt (bzw. der Container) die Domain korrekt auflöst.

docker logs dns-monitor

Szenario OK:

[TIMESTAMP] [DNS-MONITOR] OK | Public: 87.x.x.x | Global(8.8.8.8): 87.x.x.x | Local: 87.x.x.x

Alles synchron.

Szenario ALERT (Zombie-Updater / Propagation):

[TIMESTAMP] [DNS-MONITOR] ALERT | Public: 87.x.x.x | Global(8.8.8.8): 87.y.y.y | Local: 87.y.y.y

Dies deutet darauf hin, dass entweder die Propagation noch läuft oder ein anderes Gerät (FritzBox, HA) die IP überschreibt.

Szenario CACHE_ALERT (Lokales Problem):

[TIMESTAMP] [DNS-MONITOR] CACHE_ALERT | Public: 87.x.x.x | Global(8.8.8.8): 87.x.x.x | Local: 87.y.y.y

Das Internet kennt die neue IP schon, aber lokal wird noch die alte gecacht.

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.
  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.

Dateien

  • /app/docker-compose.yml: Definition der Services.
  • /app/dns-monitor/monitor.sh: Das Shell-Skript für den Monitor-Container.