From 919f8623c9c614b2ba73b886823e74af1e031280 Mon Sep 17 00:00:00 2001 From: Christoph Emsenhuber Date: Wed, 17 Jun 2026 00:15:32 +0200 Subject: [PATCH] =?UTF-8?q?TP10=20=F0=9F=8E=AF=20Root=20Cause=20FM-NAT=20g?= =?UTF-8?q?efunden:=20FB=20braucht=20LAN-IP=20als=20WG-Address=20(Proxy-AR?= =?UTF-8?q?P)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Echt-Host-Test (Ping realer 10.101.0.10 über WG) -> Antwort aus 10.255.255.2 => FB masqueradet den Tunnel, bestätigt. Ursache: .conf nutzte Transfernetz- Adresse (10.255.255.2/32) -> FRITZ!OS = Einzelgerät-Modus = NAT. AVM nutzt Proxy-ARP statt Transfernetz -> FB-WG-Interface-Address muss die FB-LAN-IP sein (FM 10.101.0.254/24, DW 192.168.178.1/24), Transfernetz streichen, AllowedIPs 10.40.0.0/16. -> WG-Spoke-Ansatz damit machbar. - fritzbox-wg-lanlan-klickanleitung.md: Root Cause + One-Field-Fix (LAN-IP als Address), LAN-LAN-Wizard, Verify gegen 10.101.0.10. - teilprojekte.md / tp10-vpn-migration.md: Status "Root Cause gefunden, machbar". Korrigierte Spoke-Configs in routeros/.secrets/wg-{fm,dw}.conf (gitignored). FM bleibt auf IPsec (Sicherheitsnetz); ap1-WG-Hub inert. Co-Authored-By: Claude Opus 4.8 --- docs/teilprojekte.md | 18 +-- docs/tp10-vpn-migration.md | 15 +- routeros/fritzbox-wg-lanlan-klickanleitung.md | 136 +++++++----------- 3 files changed, 69 insertions(+), 100 deletions(-) diff --git a/docs/teilprojekte.md b/docs/teilprojekte.md index ba6fe3a..103efce 100644 --- a/docs/teilprojekte.md +++ b/docs/teilprojekte.md @@ -123,14 +123,16 @@ Kontrolle: MikroMCP (MikroTik) live · ALLNET = Klickanleitungen · Omada → Co Routen + Firewall (input/forward) gesetzt; NAT braucht nichts (Egress wg-hub ≠ masq-Interface). Hub-Pub `P/bztIk13cAmLHbN6oHGGnWAKLZsqR5TXAbFP+NGGBk=`, Endpoint `xvbeo64jqlqd9gfo.myfritz.net:51821`. Spoke-Configs in `routeros/.secrets/wg-{fm,dw}.conf` (Private-Keys, nicht im Git). FB-Portfreigabe 51821→ap1 gesetzt. -- **⛔ Phase-B-Versuch FM gescheitert → revertiert (2026-06-16):** `.conf` importiert, Handshake grün, IPsec - voreilig deaktiviert → FM-LAN nicht erreichbar. **Befund:** WG-Tunnel routet (rx/tx fließen), aber Test war nur - Ping auf FB-eigene `.254` (antwortet aus Tunnel-IP `10.255.255.2` → OS verwirft) — **echte LAN-Hosts nie getestet**. - → **NAT-These unbewiesen.** Research (Bouni) bestätigt FB↔MikroTik-LAN-LAN **ohne NAT** ist machbar. User hat - **FM auf IPsec zurückgestellt** (FB-WG aus). ap1-WG-Hub/Peers bleiben (inert). -- **⏳ Resume:** Klickanleitung `routeros/fritzbox-wg-lanlan-klickanleitung.md` — **Echt-Host-Test zuerst** - (realer `10.101.0.X`, nicht `.254`), FB-WG als LAN-LAN/AllowedIPs `10.40.0.0/16` prüfen, ap1-Route `10.255.255.0/24→wg-hub`, - IPsec erst nach grünem Verify abschalten. **Port 51821** hält FB-51820-WG (DW) intakt. +- **⛔→💡 Phase-B-Versuch FM gescheitert, ROOT CAUSE gefunden (2026-06-16):** `.conf` importiert, IPsec voreilig + aus → FM weg, revertiert. **Echt-Host-Test (WG reaktiviert):** Ping realer Host `10.101.0.10` → Antwort aus + `10.255.255.2` → **FB-NAT bestätigt.** **Ursache:** unsere `.conf` nutzte eine **Transfernetz-Adresse** + (`10.255.255.2/32`) → FRITZ!OS behandelt das als Einzelgerät → masqueradet. **AVM nutzt Proxy-ARP, KEIN + Transfernetz** → FB-WG-Interface-`Address` muss die **FB-LAN-IP** sein (FM `10.101.0.254/24`, DW `192.168.178.1/24`), + Transfernetz streichen, AllowedIPs `10.40.0.0/16`. **→ Ansatz machbar.** Configs `routeros/.secrets/wg-{fm,dw}.conf` + korrigiert. FM aktuell auf **IPsec** (Sicherheitsnetz); ap1-WG-Hub bleibt (inert). +- **⏳ Resume:** Klickanleitung `routeros/fritzbox-wg-lanlan-klickanleitung.md` — FB-WG als **LAN-LAN mit FB-LAN-IP als + Interface-Adresse** neu anlegen, Echt-Host-Test gegen `10.101.0.10`, IPsec erst nach grünem Verify abschalten. + **Port 51821** hält FB-51820-WG (DW) intakt. - **Empfehlung:** **Hybrid** — **WireGuard Site-to-Site-Backbone** (BF/hAP = WG-**Hub**, FM/DW = FritzBox-**Spokes**, hub&spoke, **KEINE Zusatz-HW**) **+ WARP für Remote-User** (ergänzt, ersetzt nicht). - **WARP kann FBs NICHT direkt** ansprechen → bräuchte Connector-Host hinter der FB (an reinen-FB-Standorten FM/DW unattraktiv). - **Vorab-Check (User, entscheidend):** WAN je Standort — **public/dynamisch (OK: DynDNS/MyFRITZ) vs. CGNAT/DS-Lite am BF-Hub (= K.O. → dann CF/WARP-Pfad, CGNAT-immun)**. diff --git a/docs/tp10-vpn-migration.md b/docs/tp10-vpn-migration.md index 7facff0..0e11657 100644 --- a/docs/tp10-vpn-migration.md +++ b/docs/tp10-vpn-migration.md @@ -4,13 +4,14 @@ > gated: permanenter FB-Bridge-Mode (AP4.1) hängt an diesem TP. > **Reihenfolge fix: VPNs migrieren → Liwest-Anruf (Bridge) → FB wird Modem.** -> ## ⏸ STATUS 2026-06-16: PAUSIERT — FM auf IPsec zurück -> Phase-A-Hub auf ap1 steht (s.u.). **Phase-B-Versuch FM gescheitert + revertiert:** `.conf` importiert, -> Handshake grün, IPsec voreilig aus → FM nicht erreichbar. **Diagnose-Fehler:** nur FB-eigene `.254` gepingt -> (antwortet aus Tunnel-IP `10.255.255.2` → OS verwirft); **echte FM-LAN-Hosts nie getestet** → NAT-These unbewiesen. -> Research (Bouni) sagt: FB↔MikroTik-LAN-LAN **ohne NAT geht**. User hat **FM auf IPsec zurückgestellt** (FB-WG aus), -> ap1-WG-Hub bleibt (inert). **Wiederaufnahme via Klickanleitung `routeros/fritzbox-wg-lanlan-klickanleitung.md`** -> (Echt-Host-Test ZUERST, dann FB-LAN-LAN-Check, IPsec bleibt Sicherheitsnetz). +> ## ⏸ STATUS 2026-06-16: PAUSIERT — FM auf IPsec, ROOT CAUSE gefunden (Ansatz machbar) +> Phase-A-Hub auf ap1 steht (s.u.). **Phase-B FM gescheitert → revertiert; Ursache jetzt klar:** +> Echt-Host-Test (Ping realer `10.101.0.10`) → Antwort aus `10.255.255.2` ⇒ **FB masqueradet den Tunnel.** +> **Grund:** `.conf` hatte eine **Transfernetz-Adresse** (`10.255.255.2/32`) → FRITZ!OS = Einzelgerät-Modus = NAT. +> **AVM nutzt Proxy-ARP statt Transfernetz** → FB-WG-Interface-`Address` muss die **FB-LAN-IP** sein +> (FM `10.101.0.254/24`, DW `192.168.178.1/24`), Transfernetz streichen, AllowedIPs `10.40.0.0/16`. +> Configs `routeros/.secrets/wg-{fm,dw}.conf` korrigiert. FM auf **IPsec** (Sicherheitsnetz), ap1-Hub inert. +> **Wiederaufnahme:** `routeros/fritzbox-wg-lanlan-klickanleitung.md` (FB-LAN-LAN mit LAN-IP, Verify gegen `10.101.0.10`). ## Zielbild - **ap1 (hAP ax², 7.23.1) = WireGuard-Hub** (nativ). FM & DW = FritzBox-Spokes (hub-&-spoke, keine Zusatz-HW). diff --git a/routeros/fritzbox-wg-lanlan-klickanleitung.md b/routeros/fritzbox-wg-lanlan-klickanleitung.md index 2efe1f8..647026b 100644 --- a/routeros/fritzbox-wg-lanlan-klickanleitung.md +++ b/routeros/fritzbox-wg-lanlan-klickanleitung.md @@ -1,98 +1,64 @@ -# FritzBox WireGuard als LAN-LAN-Kopplung (FM-Spoke → ap1-Hub) — Klick-Anleitung +# FritzBox WireGuard als LAN-LAN-Kopplung (FM/DW-Spoke → ap1-Hub) — Klick-Anleitung -> **Methode:** Claude erklärt Absicht + Klickpfad, **du klickst** an der FritzBox. FB = **FM-Standort** -> (`10.101.0.0/24`, GW `10.101.0.254`), aktuell wieder produktiv über **IPsec**. Hub = ap1 (BF). -> ⚠️ **FRITZ!OS-Labels sind versionsabhängig** — wo ich unsicher bin, steht die **Absicht** dabei; nimm das -> passende Menü, nicht das wörtliche Label. Bezieht sich auf FRITZ!OS 7.5x/8.x (WireGuard). +> **Methode:** Claude erklärt Absicht + Klickpfad, **du klickst** an der FritzBox. Beispiel FM-Standort +> (`10.101.0.0/24`, GW `10.101.0.254`), aktuell produktiv über **IPsec**. Hub = ap1 (BF). +> ⚠️ FRITZ!OS-Labels sind versionsabhängig — wo unsicher, zählt die **Absicht**. -## Was wir wollen (in einem Satz) -Die FM-FritzBox so per **WireGuard** an den ap1-Hub koppeln, dass **echte LAN-Hosts** (`10.101.0.x`) und -das **BF-LAN** (`10.40.0.0/16`) sich gegenseitig mit ihren **realen IPs** erreichen — **kein NAT/Masquerade**, -echtes Site-to-Site-Routing. Das war beim letzten Versuch vermutlich genau die Lücke („NetBIOS ging nicht"). +## 🎯 ROOT CAUSE (bestätigt 2026-06-16) + der Fix +**Messung:** Ping auf realen FM-Host `10.101.0.10` über WG → Antwort kam aus **`10.255.255.2`** (Tunnel-IP) → **die FB +masqueradet den Tunnel.** Ursache: unsere `.conf` hatte als Interface-`Address` eine **Transfernetz-IP** +(`10.255.255.2/32`) → FRITZ!OS behandelt das als **Einzelgerät** und NAT't. -## ⚠️ Bevor du klickst — Sicherheit (FM ist produktiv!) -- **IPsec bleibt an** — das ist das Sicherheitsnetz. **Erst** abschalten, wenn der Echt-Host-Test (Teil 4) grün ist. -- WG läuft **parallel** zu IPsec (anderer Mechanismus, kein Konflikt). Wir testen WG, ohne IPsec zu opfern. -- ap1-Seite ist fertig und verifiziert (Hub `wg-hub` UDP 51821, Peer `peer1`, Route, Firewall) — **hier nichts ändern** - außer der einen Route in Teil 3. +**AVM-Modell:** FRITZ!OS nutzt für WG-LAN-LAN **kein Transfernetz, sondern Proxy-ARP**. Die WG-Interface-Adresse der +FB **muss ihre eigene LAN-IP** sein → dann routet die FB ihr LAN **ohne NAT**, echte Host-IPs. -## Eckdaten (zum Eintragen) -| Feld | Wert | -|---|---| -| Hub-Endpoint | `xvbeo64jqlqd9gfo.myfritz.net:51821` | -| Hub-Public-Key | `P/bztIk13cAmLHbN6oHGGnWAKLZsqR5TXAbFP+NGGBk=` | -| FM-Tunnel-IP (diese FB) | `10.255.255.2/32` | -| Remote-Netz (BF, „erreichbare Netze") | `10.40.0.0/16` (+ Tunnelnetz `10.255.255.0/24`) | -| MTU / Keepalive | `1412` / `25` | -| FM-Spoke-`.conf` (vorbereitet) | `routeros/.secrets/wg-fm.conf` | +> **DER FIX (eine Zeile):** FB-WG-Interface-`Address` = **`10.101.0.254/24`** (FM-LAN-IP), **nicht** `10.255.255.2/32`. +> Transfernetz `10.255.255.0/24` **komplett streichen**. + +## Eckdaten (FM; DW analog) +| Feld | Wert FM | Wert DW | +|---|---|---| +| **WG-Interface-Address (FB)** | **`10.101.0.254/24`** (LAN-IP!) | **`192.168.178.1/24`** (LAN-IP!) | +| Erreichbare Netze / AllowedIPs (→Hub) | `10.40.0.0/16` | `10.40.0.0/16` | +| Hub-Endpoint | `xvbeo64jqlqd9gfo.myfritz.net:51821` | dito (DW: CGNAT → wählt ausgehend) | +| Hub-Public-Key | `P/bztIk13cAmLHbN6oHGGnWAKLZsqR5TXAbFP+NGGBk=` | dito | +| MTU / Keepalive | `1412` / `25` | `1412` / `25` | +| Vorbereitete `.conf` | `routeros/.secrets/wg-fm.conf` | `routeros/.secrets/wg-dw.conf` | + +## ⚠️ Sicherheit (FM ist produktiv!) +- **IPsec bleibt an** = Sicherheitsnetz. Erst abschalten, wenn der Echt-Host-Test grün ist. +- WG läuft parallel zu IPsec (kein Konflikt). ap1-Seite ist fertig — dort nichts ändern. --- -## Teil 0 — Erst messen, ob überhaupt was kaputt ist (WICHTIG) -Beim letzten Versuch haben wir nur die FB-**eigene** IP `10.101.0.254` gepingt — die antwortet aus der Tunnel-IP -`10.255.255.2`, was das OS verwirft. Das **beweist keinen** Fehler. **Echt-Host-Test zuerst:** +## Teil 1 — Bestehende (falsche) FM-WG-Verbindung entfernen +`Internet → Freigaben → Reiter „VPN (WireGuard)"` → die FM-Verbindung **löschen** (sie hat die falsche +Transfernetz-Adresse → NAT). -1. WG an der FM-FB wieder **aktivieren** (die in Teil 1 inspizierte/erstellte Verbindung), IPsec **an lassen**. -2. Von einem **BF-VLAN10/20-Host** (Gateway = ap1) einen **realen FM-LAN-Host** ansprechen — **nicht** die `.254`: - - z.B. `ping 10.101.0.10` oder im Browser/Explorer `\\10.101.0.10` (SMB per **IP**). -3. Sag mir den Host — ich schaue parallel auf ap1 mit `torch wg-hub` + sourced - `/ping 10.101.0.10 src-address=10.40.20.1` und prüfe die **Quell-IP der Rückpakete**: - - **Reale `10.101.0.X`** → es war nie kaputt, nur das `.254`-Artefakt → direkt zu Teil 4 (Cutover). - - **`10.255.255.2`** → echtes NAT/Forward-Problem → Teil 1–3 abarbeiten. +## Teil 2 — Neu als LAN-LAN-Kopplung anlegen +`„Verbindung hinzufügen"` → Typ **„Netzwerke koppeln" / „LAN-LAN"** wählen (**nicht** „Einzelnes Gerät"). +- Falls FRITZ!OS dort nur den **FB↔FB**-Assistenten anbietet: stattdessen **benutzerdefinierte/importierte Config** + und **`routeros/.secrets/wg-fm.conf`** importieren — die hat jetzt die korrekte `Address = 10.101.0.254/24`. +- **Kernpunkt:** Die WG-Interface-Adresse dieser Verbindung muss **`10.101.0.254/24`** sein (die FB-LAN-IP), + erreichbares Netz Richtung Hub = **`10.40.0.0/16`**. **„Gesamten Internetverkehr über VPN" = AUS.** +- ⚠️ Falls der Import eine LAN-IP als Interface-Adresse **ablehnt** (Überlapp mit dem LAN): dann den AVM-Wizard + „Netzwerke koppeln" nutzen und dort die **lokale FB-IP** als Verbindungs-IP eintragen (das ist genau der + Proxy-ARP-Weg). Sag mir, was die UI anbietet — dann lotse ich Feld für Feld. +- **Public-Key** der Verbindung notieren → mir geben, falls FRITZ!OS einen **eigenen** Key erzeugt + (dann gleiche ich `peer1` auf ap1 ab; aktuell steht dort der Key aus unserer `.conf`). ---- - -## Teil 1 — Bestehende WG-Verbindung inspizieren -**Klickpfad:** `Internet → Freigaben → Reiter „VPN (WireGuard)"` → die FM-Verbindung auswählen/bearbeiten. - -Prüfe drei Dinge: -1. **Modus = Netzwerk-Kopplung, nicht Einzelgerät.** - Absicht: Die Verbindung darf **nicht** „dieses eine Gerät einwählen + gesamten Internetverkehr" sein. - → Falls es eine Option **„gesamten Internetverkehr über die VPN-Verbindung senden"** gibt: **AUS**. -2. **Erreichbare/erlaubte Netze (AllowedIPs).** - Es muss **`10.40.0.0/16`** (BF) + **`10.255.255.0/24`** (Tunnel) enthalten — **nicht** nur die Hub-IP oder `0.0.0.0/0`. - Wenn die FB beim Import die AllowedIPs gekürzt hat → das ist die Ursache. -3. **Public-Key der FM-FB notieren** (steht in der Verbindungs-/Schlüsselansicht). - → Den brauche ich, **falls** die FB einen **eigenen** Key erzeugt hat (statt dem aus unserer `.conf`). - Schick ihn mir; ich gleiche `peer1` auf ap1 ab. - -> Wenn alles oben schon stimmt und Teil 0 trotzdem `10.255.255.2` zeigte → die FB routet ihr LAN nicht in den -> Tunnel. Dann Verbindung in **Teil 2** sauber neu anlegen. - ---- - -## Teil 2 — WG-Verbindung als LAN-LAN neu/korrekt anlegen -Nur nötig, wenn Teil 1 einen falschen Modus/AllowedIPs zeigt. - -1. Alte FM-WG-Verbindung **löschen**. -2. `Internet → Freigaben → VPN (WireGuard) → „Verbindung hinzufügen"`. -3. Verbindungstyp wählen, der **zwei Netze koppelt** (LAN-LAN / „Netzwerk koppeln"), **nicht** „Einzelnes Gerät". - - Falls FRITZ!OS nur den FB↔FB-Assistenten anbietet: stattdessen **eigene/importierte Konfiguration** nutzen - und die Datei **`routeros/.secrets/wg-fm.conf`** importieren (enthält die korrekten AllowedIPs `10.40.0.0/16`). -4. Falls manuell statt Import — Werte aus „Eckdaten" oben eintragen: - Endpoint, Hub-Public-Key, Tunnel-IP `10.255.255.2`, erreichbare Netze `10.40.0.0/16` + `10.255.255.0/24`, - Keepalive 25, MTU 1412. -5. **„Gesamten Internetverkehr über VPN" AUS.** Speichern. -6. **Public-Key** der neuen Verbindung notieren → mir geben (für `peer1`-Abgleich auf ap1). - ---- - -## Teil 3 — ap1-Begleitänderung (mache ich) -Damit ap1 auch die Tunnel-IPs selbst adressieren kann (Diagnose + saubere Rückwege): -- Route **`10.255.255.0/24 → wg-hub`** auf ap1 ergänzen. -- Falls FB neuen Key hat: `peer1`-Public-Key aktualisieren. -> Sag Bescheid — das sind zwei nicht-disruptive Befehle, die ich per MikroMCP setze. - ---- +## Teil 3 — ap1-Abgleich (mache ich, falls nötig) +- Falls FB neuen Key erzeugt: `peer1`-Public-Key aktualisieren. +- peer1 allowed-address bleibt `10.101.0.0/24` (Transfernetz-/32 ist obsolet, schadet aber nicht). +> Sag Bescheid — nicht-disruptiv per MikroMCP. ## Teil 4 — Verifizieren, dann erst IPsec abschalten -1. **Echt-Host-Test** wie Teil 0 → muss **reale `10.101.0.X`** zeigen, beide Richtungen: - - BF-Host → FM-Host (Ping + SMB/445 per IP). - - FM-Host → BF-Host (z.B. NAS) per IP. -2. **Namensauflösung** per IP/DNS testen, **nicht** über Netzwerkumgebung/Broadcast (NetBIOS routet nicht). -3. Erst wenn **beide Richtungen grün** sind: **IPsec für FM auf der BF-FritzBox deaktivieren** → erneut testen. -4. Bleibt es grün → FM ist migriert. **DW** läuft danach nach demselben Muster (CGNAT → wählt ausgehend, Keepalive). +1. WG aktiv (IPsec an lassen). Ich pinge von ap1 sourced `10.40.20.1` → **`10.101.0.10`** + `torch wg-hub`: + - **Quelle = `10.101.0.10`** → ✅ kein NAT mehr, echtes LAN-LAN → weiter. + - Quelle = `10.255.255.2` → noch NAT → Adresse/Modus in Teil 2 nochmal prüfen. +2. Gegenrichtung: FM-Host → BF-Host (NAS) per IP; **SMB/445 per IP** (NetBIOS-Lehre: per IP/DNS, kein Broadcast). +3. Beide Richtungen grün → **IPsec für FM auf der BF-FB deaktivieren** → erneut testen. +4. Stabil → FM migriert. **DW** danach gleich (Address `192.168.178.1/24`, CGNAT → ausgehend/Keepalive). ## Rollback -- Jederzeit: WG an der FM-FB deaktivieren + **IPsec wieder aktivieren** → Ausgangszustand. -- ap1-Seite unverändert lassen (inert ohne aktive Spoke-Gegenstelle). +- WG an der FM-FB deaktivieren + IPsec aktivieren → Ausgangszustand. ap1-Seite unverändert lassen (inert).