Files
bf-infra/docs/tp10-vpn-migration.md
Christoph Emsenhuber a36c160903 TP10 💡 v6-Variante: WARP→Gelis öffentl. v6-FB als CGNAT-freie Fernwartung
- Gelis CGNAT ist nur v4 → ihre FB ĂŒber natives v6 erreichbar (Port offen).
  WARP (schon im Einsatz) liefert Christoph outbound-v6 trotz Liwest-v4-only.
- PoC = ad-hoc Fernwartung; Daueform = direktes WG ap1↔Geli-FB ĂŒber echtes
  v6 (HE-6in4, da Liwest auch mit Fiber kein v6) statt Hub-Spoke-Gymnastik.
- EndgerĂ€te (Note10, Cudy) bleiben v6-agnostisch: v6 nur Ă€ußerer Transport,
  LAN bleibt IPv4. Nicht fĂŒr Telefonie.
- teilprojekte.md: TP10 von ⏞ PAUSIERT auf đŸ…żïž VERTAGT (Bridge-Cutover-BĂŒndelung).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-17 18:23:27 +02:00

7.0 KiB
Raw Blame History

TP10 — Multi-Site-VPN-Migration (2× AVM-S2S → 2× WireGuard, Hub auf ap1)

Stand 2026-06-16 · Research: docs/research/vpn-comparison.md · Plan: ~/.claude/plans/pure-wibbling-graham.md 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-17: VERTAGT — gebĂŒndelt mit dem FB-Bridge-Cutover

Entscheidung: TP10 nicht mehr als Parallel-Migration vorab, sondern zusammen mit dem permanenten Bridge- Cutover (VPN-auf-FB ⊕ FB-Bridge schließen sich aus). Am Bridge-Tag hat ap1 die echte Public-IP → kein FB-Port-Forward-Umweg mehr; Spokes zeigen direkt auf ap1 (DDNS). FM-PoC ✅ hat den Fix bewiesen (Root Cause: FB masqueradet, wenn die WG-Interface-Address eine Transfernetz-IP statt der FB-LAN-IP ist — AVM Proxy-ARP). Park-Zustand ap1: Peers disabled, WG-Routen entfernt (FM/DW wieder ĂŒber die FB), wg-hub bleibt (Key erhalten), Firewall bleibt (TP5-Vorarbeit). Beide VPN vorerst ĂŒber die FB: FM = IPsec, DW = FB-WG. Resume: routeros/fritzbox-wg-lanlan-klickanleitung.md (FB-LAN-IP als Interface-Adresse, Verify gegen 10.101.0.10).

💡 Variante DW/Geli — v6-direkt statt CGNAT-Spoke (Idee 2026-06-17, fĂŒr spĂ€ter)

Gelis CGNAT ist nur v4; ihre FritzBox hat öffentliches natives v6 (2a0e:7a02:31c:3000::/56, rotiert ~30h → MyFRITZ-DDNS) → ihre FB ist ĂŒber v6 von außen erreichbar. Der v6-Inbound-Port auf Gelis FB ist bereits offen.

  • Sofort/PoC (ad-hoc Fernwartung, da Geli kein Zero Trust hat): Christophs WARP (schon im Einsatz) gibt ihm outbound-v6 trotz Liwest-v4-only → Christoph(WARP-v6) → CF-Edge → Gelis v6-FB. CGNAT-immun, reversibel. Nur Fernwartung — nicht fĂŒr Telefonie (Calls = Messenger-Relays).
  • Daueform (sauberer): echtes v6 auf BF-Seite via HE-6in4 (Liwest gibt voraussichtlich auch mit Fiber kein v6) → direktes WireGuard ap1↔Geli-FB ĂŒber v6, kein Cloudflare im Datenpfad, kein Tunnel-in-Tunnel (WARP ist selbst WG), umgeht die ganze Hub-&-Spoke-CGNAT-Gymnastik unten (Geli mĂŒsste nicht mehr outbound zum Hub initiieren — v6↔v6 ist symmetrisch erreichbar). Siehe Memory project-ipv6-state.
  • EndgerĂ€te bleiben v6-agnostisch: v6 ist nur der Ă€ußere Transport zwischen FB-WAN und Christophs Endpunkt; im Tunnel lĂ€uft Gelis LAN weiter rein IPv4 (192.168.178.0/24). Ihre GerĂ€te (Galaxy Note 10, Cudy-APs als Bridge, NAS 
) mĂŒssen kein v6 können — sie sehen nie ein v6-Paket. v6-EigenfĂ€higkeit eines Backend-GerĂ€ts wĂ€re nur nötig, wollte man es direkt ohne Tunnel ĂŒber v6 erreichen (klobig: Freigabe pro GerĂ€t + rotierendes Prefix) — macht man nicht.

Zielbild

  • ap1 (hAP axÂČ, 7.23.1) = WireGuard-Hub (nativ). FM & DW = FritzBox-Spokes (hub-&-spoke, keine Zusatz-HW).
  • Ablösung der 2 produktiven AVM-LAN-LAN-Tunnel auf der BF-FB → 2× WireGuard auf ap1:
    • FM 10.101.0.0/24 (GW .254) — war IPsec.
    • DW/Geli 192.168.178.0/24 (GW .1, CGNAT, Antennengemeinschaft GeroldsgrĂŒn) — war WireGuard.

✅ As-built auf ap1 (Phase A erledigt, 2026-06-16)

Objekt Wert
Interface wg-hub Listen UDP 51821, MTU 1412, keine IF-IP, running
Hub-Public-Key P/bztIk13cAmLHbN6oHGGnWAKLZsqR5TXAbFP+NGGBk=
Endpoint (fĂŒr Spokes) xvbeo64jqlqd9gfo.myfritz.net:51821 (MyFRITZ-FQDN)
Peer FM (peer1) pub dzRY0lnnUygijChWe5wXZmXPeNcbdALpqBptA3fyiVE=, allowed 10.255.255.2/32,10.101.0.0/24, Endpoint leer
Peer DW (peer2) pub FqYZLztQ/qME5VDie5QLGH++5299WJiE1dPpQnPbzUw=, allowed 10.255.255.3/32,192.168.178.0/24, Endpoint leer
Route 10.101.0.0/24 → wg-hub · 192.168.178.0/24 → wg-hub (beide active)
Firewall input accept udp/51821 · forward accept in/out wg-hub (TP5-Vorarbeit)
NAT keine Änderung nötig — masquerade ist out-interface bridge/ether1; Tunnel-Egress = wg-hub → nie NATed

Port 51821 (statt 51820): Die BF-FB hĂ€lt ihren eigenen WG-Server auf 51820 fĂŒr den noch laufenden DW-Tunnel. 51821 fĂŒr den Hub vermeidet die Kollision wĂ€hrend der Parallelphase.

Spoke-Configs (Private-Keys, NICHT im Git): routeros/.secrets/wg-fm.conf, routeros/.secrets/wg-dw.conf.

✅ Vorbedingung (User erledigt)

  • FB-Portfreigabe UDP 51821 → 10.40.41.1 (ap1) gesetzt.

Phase B — Cutover (pro Spoke, Parallelphase) — OFFEN

Pro Standort: neuen WG-Tunnel hochziehen, verifizieren, erst dann den alten AVM-Tunnel abschalten.

B1 — FM zuerst (alter IPsec-Tunnel bleibt parallel an)

  1. routeros/.secrets/wg-fm.conf in die FM-FritzBox importieren: Internet → Freigaben → VPN (WireGuard) → Verbindung hinzufĂŒgen → eigene Konfiguration importieren.
    • ⚠ Falls FRITZ!OS keinen Import mit vorgegebenem Key erlaubt: FB-WG-Verbindung manuell anlegen, FB-Public-Key ablesen und melden → wird in peer1 auf ap1 eingetragen (manage_wireguard_peer set public-key).
  2. Handshake prĂŒfen: list_wireguard_peers → peer1 last-handshake aktuell, rx/tx > 0.
  3. L3-Verify (NetBIOS-Lehre, s.u.): Ping ap1 → ein Host in 10.101.0.0/24; Gegenrichtung FM → BF-Host (NAS); SMB per IP (TCP 445) testen, nicht Netzwerkumgebung/Broadcast.
  4. GrĂŒn → IPsec-Tunnel fĂŒr FM auf der BF-FB deaktivieren → erneut prĂŒfen.

B2 — DW/Geli danach (alter FB-WG-Tunnel auf 51820 bleibt parallel an)

  1. routeros/.secrets/wg-dw.conf in die DW-FritzBox importieren (CGNAT → wĂ€hlt ausgehend, Keepalive 25).
  2. Handshake + L3-Verify (Ping/SMB per IP in 192.168.178.0/24 ↔ BF).
  3. GrĂŒn → alten DW-WG-Server/Tunnel auf der BF-FB abbauen.

NetBIOS / Namensauflösung (FM — bekannter Stolperstein)

FrĂŒherer FM-WG-Versuch scheiterte an „NetBIOS nicht geroutet". NetBIOS-Namensauflösung lĂ€uft ĂŒber Broadcasts (UDP 137/138), die ĂŒber einen gerouteten Tunnel grundsĂ€tzlich nicht traversieren — kein Routing-Bug. → L3 zuerst per IP beweisen (Ping + SMB/445); Namensauflösung per IP oder DNS lösen (statische EintrĂ€ge), nicht ĂŒber Broadcast-Browsing. Unser Design fĂŒhrt beide Richtungen in AllowedIPs/Routes → unicast muss laufen.

Phase C — Abschluss (nach beidseitig grĂŒn, ≄1 Tag stabil)

  1. TP5-Firewall auf ap1 finalisieren (WG-Regeln behalten).
  2. DDNS-Übergabe: MyFRITZ lĂ€uft ĂŒber die FB, entfĂ€llt evtl. im Bridge-Mode → ap1 braucht eigenes DDNS (/ip cloud mynetname / DynDNS); Spoke-Endpoints dann auf ap1-FQDN umstellen. ⚠ PrĂŒfen, ob /ip cloud trotz device-mode=home lĂ€uft (scheduler/fetch geblockt).
  3. Liwest-Anruf fĂŒr FB-Bridge-Mode → FB wird Modem, ether1 = WAN, Portfreigabe entfĂ€llt.
  4. Entblockt: NAS/Controller-IP-Migration (IP-Plan Phase 3) + Wegfall Double-NAT.

RĂŒckbau (falls nötig)

  • ap1-Seite vollstĂ€ndig reversibel: Peers/Routen/Firewall via manage_* action=remove, wg-hub löschen.
  • Alte AVM-Tunnel erst nach Verifikation abschalten → jederzeit reaktivierbar.