Files
dyndns-updater/SPEC.md
T
2026-08-07 10:04:31 +02:00

2.0 KiB

DynDNS-Updater - Spezifikation

Status: Entwurf fuer Umsetzung Zielumgebung: Docker-Host (Debian VM auf Proxmox) Hosting: GitHub (Repo + GitHub Actions) IP-Version: Nur IPv4 (kein AAAA/IPv6 in v1)

1. Ziel

Abloesung des aktuellen Setups (Cloudflare-CNAME -> FreeDNS-Subdomain) durch einen selbst gehosteten Updater-Container, der eine variable Anzahl Cloudflare-A-Records DNS-only (graue Cloud) direkt mit der aktuellen oeffentlichen IPv4-Adresse pflegt und parallel weiterhin die bestehende FreeDNS-Update-URL aufruft.

Trigger fuer einen Update-Zyklus:

  1. Container-Start (Initial-Check)
  2. Webhook-Aufruf (GET) von der FritzBox bei IP-Wechsel
  3. Fallback-Polling alle 15 Minuten

Die tatsaechliche IP wird niemals aus Webhook-Parametern uebernommen. Der Container ermittelt die IP bei jedem Trigger selbst ueber die FritzBox TR-064-Schnittstelle.

2. Ablauflogik

  1. IP_aktuell = fritzbox.get_external_ip(retries=3, backoff=[2s,5s,10s])
  2. IP_letzte = state.load()
  3. Wenn gleich: Poll -> nur Heartbeat-Ping, kein Update. Webhook/Start -> nur Log.
  4. Wenn unterschiedlich: Cloudflare-Records updaten, FreeDNS aufrufen, state speichern, Healthcheck-Erfolgs-Ping. Bei Teilfehler: state NICHT speichern, Fail-Ping.

3. Cloudflare

  • Nur A-Records, DNS-only (proxied=false)
  • Subdomain-Teile ueber CLOUDFLARE_RECORDS (ENV), relativ zur Zone (z.B. "sub1" oder "*.home", kein FQDN)
  • Records pro Lauf per Name aufgeloest, nicht gecacht
  • Benoetigter Token-Scope: Zone -> DNS -> Edit (Template "Edit zone DNS") + Zone -> Zone -> Read

4. Webhook

  • GET /webhook/update, kein Auth, nur fuer internen LAN-Aufruf gedacht

5. Sicherheit

  • .env niemals committen
  • Cloudflare-Token nur mit minimal noetigen Rechten
  • FritzBox-TR-064-User mit eingeschraenkten Rechten
  • Alle Records bleiben DNS-only (kein Proxy-Mode in v1)

6. Offene Punkte

  • IPv6/AAAA
  • Proxy-Mode fuer reine HTTP(S)-Subdomains
  • Redundanter Lauf auf zweitem Host
  • Spaetere Abschaltung der FreeDNS-Anbindung