From 677dade184c4406db81ff1767434a9e4c5e75102 Mon Sep 17 00:00:00 2001 From: Christoph Emsenhuber Date: Fri, 11 Sep 2026 14:25:53 +0200 Subject: [PATCH] =?UTF-8?q?TP43:=20DHCP-Multi=20verworfen=20(FB-DHCP=20nur?= =?UTF-8?q?=201=20DNS-IP)=20=E2=86=92=20FB-Upstream=20.36/.37=20+=20Rebind?= =?UTF-8?q?-Ausnahme?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit dw-FritzBox kann per DHCP nur eine DNS-IP ausliefern → "mehrere NS an die Clients" scheidet aus. Neue Richtung: Clients → 10.95.10.1 (FB), die FB forwardet an Upstream 10.40.20.36 + .37 (beide BF, Voll-Resolver). - Zwingend: DNS-Rebind-Schutz-Ausnahme bf.emsenhuber.net (sonst filtert die FB die Privat-IP-Antworten 10.40.x als Rebind weg). - BF-down-Fallback: FRITZ!OS-"öffentliche NS bei Unreachbarkeit"-Setting, sonst public im Alternativ-Slot (kostet .37, dann strikt-primär verifizieren). - Sauberer als DHCP-Multi: FB ist einziger Client-Resolver, .36 löst intern+public → public nie "zuerst" gefragt, kein NXDOMAIN-Leak. Co-Authored-By: Claude Opus 4.8 --- docs/teilprojekte.md | 56 +++++++++++++++++++++++++++----------------- 1 file changed, 34 insertions(+), 22 deletions(-) diff --git a/docs/teilprojekte.md b/docs/teilprojekte.md index b93c531..ba56fb8 100644 --- a/docs/teilprojekte.md +++ b/docs/teilprojekte.md @@ -2727,7 +2727,7 @@ TP22 · TP-R · **TP3.2** (08-17) · **TP5** (08-18) · **TP7.1** (08-18) · **T -### TP43 — dw-Standort: interne BF-DNS-Namen über WG auflösbar machen ▸ 🔜 **REOPENED 2026-09-11, Richtung entschieden (DHCP-Multi `[.36/.37/public]`); Umsetzung on-site offen** (verworfene 420-Historie am Ende dieses Abschnitts) +### TP43 — dw-Standort: interne BF-DNS-Namen über WG auflösbar machen ▸ 🔜 **REOPENED 2026-09-11, Richtung entschieden (FB-Upstream `.36`/`.37` + Rebind-Ausnahme); Umsetzung on-site offen** (verworfene 420-Historie am Ende dieses Abschnitts) **Live-Auslöser (2026-09-11):** Christoph am dw-Standort, WG-Tunnel zu BF up, kann `portainer.bf.emsenhuber.net` nicht erreichen. Direkte IP `https://10.40.20.126:9443` geht ⇒ **reines DNS-, kein Routing-Problem.** Der @@ -2746,29 +2746,41 @@ Pfad von dw) trifft für `.36/.37` nicht zu** — fm läuft über den public `fm nicht über interne Records. (WG-Topologie TP10: dw-Peer AllowedIPs BF-seitig = `10.40.0.0/16`, dw routet **nicht** nach `10.101.0.0/24`.) -**Constraint am dw:** die 24/7-Geräte `10.95.10.246/.247` sind **Cudy-APs (kein DNS-Host)**, und die -FritzBox kann **kein Per-Zone-Forwarding** (nur einen globalen Upstream). Ohne Zusatz-Dauerläufer ist -ein echter conditional forwarder (dnsmasq `server=/bf.emsenhuber.net/.36`) deshalb nicht drin. +**Constraint am dw:** die 24/7-Geräte `10.95.10.246/.247` sind **Cudy-APs (kein DNS-Host)**; die +FritzBox kann **kein Per-Zone-Forwarding** (nur einen globalen Upstream) **und per DHCP nur EINE +DNS-IP ausliefern** (⇒ „mehrere NS an die Clients" scheidet aus). Ein echter conditional forwarder +(dnsmasq `server=/bf.emsenhuber.net/.36`) bräuchte einen Zusatz-Dauerläufer — abgelehnt. -**Entscheidung (Christoph, 2026-09-11): DHCP-Multi.** Die dw-FritzBox verteilt **per DHCP** die -DNS-Serverliste **`10.40.20.36, 10.40.20.37, 9.9.9.9`** an die Clients (FB-eigener Resolver damit -umgangen). Gewählt gegenüber „FB-Upstream `.36` primär/public sekundär", weil die **`.37`-Redundanz -bleibt** (3 Server statt FB-2-Slot-Grenze) und die **FB entlastet** ist. -- **BF-up:** Client fragt `.36` zuerst → interne `bf.*` (Split-Horizon → `.40`) **und** public; der - public-Eintrag wird nie konsultiert. -- **BF-down:** `.36`/`.37` timeouten → Client fällt auf `9.9.9.9` → public lebt, `bf.*` = NXDOMAIN - (erwartet). +**Entscheidung (Christoph, 2026-09-11): FB-Upstream + Rebind-Ausnahme.** Clients bekommen per DHCP +`10.95.10.1` (die FB selbst, Default); die **FB forwardet an die BF-Resolver**: *DNS-Server → „Andere +DNSv4-Server"* Bevorzugt **`10.40.20.36`**, Alternativ **`10.40.20.37`** (beide BF, beide +Voll-Resolver → Redundanz bleibt). Sauberer als der zwischenzeitliche DHCP-Multi-Gedanke: die FB ist +der **einzige** Client-Resolver und `.36` löst **intern und public** auf → alles geht zuerst an `.36`, +public wird nur als Unreachable-Fallback konsultiert, **nie „zuerst"** → kein NXDOMAIN-Leak im +Normalbetrieb. -🔴 **Fundamentaler DNS-Haken (gilt für jede Server-Liste, nicht fixbar):** Failover zwischen -Nameservern greift nur bei **Timeout/SERVFAIL, nicht bei NXDOMAIN**. Wird der public Server für -`bf.*` zuerst gefragt, liefert er ein sauberes NXDOMAIN und der Client fragt `.36` nicht mehr → -funktioniert nur, solange `.36`/`.37` **strikt zuerst** drankommen. Daraus die **zwei -On-site-Verifikationen** (Christoph, am dw): (1) die dw-FRITZ!OS liefert per DHCP wirklich die -Fremd-Liste aus (nicht die FB selbst); (2) die realen dw-Clients fragen **strikt in Reihenfolge** -(kein `options rotate`/Parallel-Query) — mehrfach `nslookup portainer.bf.emsenhuber.net` muss -**stabil** `10.40.20.40` liefern, nie sporadisch NXDOMAIN. Leakt ein Client-OS dennoch nach public: -für **dieses Gerät** per-Device-Rückfall — `/etc/hosts`-Zeile `10.40.20.40 ` oder WARP mit -`fallback_domains bf.emsenhuber.net → [.36,.37]` (TP41-Präzedenz). +🔴 **DNS-Rebind-Schutz-Ausnahme `bf.emsenhuber.net`** (*Heimnetz → Netzwerk → Netzwerkeinstellungen → +DNS-Rebind-Schutz*) ist **zwingend**: sonst filtert die FB die Privat-IP-Antworten (`10.40.x`) als +Rebind-Angriff weg → bf-Namen liefern nichts, obwohl `.36` korrekt antwortet. Die Ausnahme ist ein +reines Namens-Whitelist (keine IP). + +**BF-down-Fallback (Verzweigung am FRITZ!OS-Stand):** Christoph erinnert ein Setting „öffentliche NS +verwenden, wenn die primären nicht erreichbar sind". Vorhanden → aktivieren, Upstream bleibt +`.36`+`.37`, BF-down geht auf public. Fehlt → Alternativ-Slot statt `.37` auf **public `9.9.9.9`** +(kostet `.37`-Redundanz); dann zusätzlich prüfen, dass die FB **strikt primär** fragt (nicht +round-robbt), sonst NXDOMAIN-Leak für `bf.*` bei BF-up. + +- **BF-up:** FB → `.36` → interne `bf.*` (→ `.40`, dank Rebind-Ausnahme durchgereicht) **und** public. +- **BF-down:** `.36`/`.37` unreachable → public-Fallback → public lebt, `bf.*` = NXDOMAIN (erwartet). + +**Bewusst akzeptierter Tradeoff:** bei BF-up läuft Geli's **gesamter** Haushalt-DNS über Linz +(`.36`/AdGuard-Filter) — vermeidbar nur mit conditional forwarder (Zusatz-HW, abgelehnt). + +**On-site-Verifikationen (Christoph, am dw):** (1) Rebind-Ausnahme greift — `nslookup +portainer.bf.emsenhuber.net` über die FB → stabil `10.40.20.40`; (2) BF-down-Fallback vorhanden +(Setting) oder via public-Alternativ-Slot gesetzt; (3) nur falls BF+public gemischt: FB fragt strikt +primär. Rückfall pro Gerät: `/etc/hosts` `10.40.20.40 ` oder WARP `fallback_domains +bf.emsenhuber.net → [.36,.37]` (TP41-Präzedenz). **Sofort-Workaround (läuft unabhängig):** `https://10.40.20.126:9443` direkt bzw. `/etc/hosts`-Zeile `10.40.20.40 portainer.bf.emsenhuber.net`.