From ae6c84dc0bcb9ee217e7936c309e0a068f775945 Mon Sep 17 00:00:00 2001 From: Christoph Emsenhuber Date: Wed, 1 Jul 2026 22:37:03 +0200 Subject: [PATCH] =?UTF-8?q?TP3.1=20=E2=9C=85=20ap2=20VLAN-Trunk-Fix:=20vla?= =?UTF-8?q?n-filtering=3Dyes=20(WLAN-Segmentierung)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Root cause: ap2 (CAP, local forwarding) hatte bridge vlan-filtering=no → datapath.vlan-id wurde nie getaggt → alle WLAN-Clients (main/media/iot/…) egressten ungetaggt in VLAN1 → OG-iPhone-Drops beim Roaming ap1↔ap2. Fix wie ap1: VLAN1 untagged=bridge,ether2 (Mgmt), 10/30/40/50/90 tagged auf ether2 + wifi1/wifi2 als tagged-Member (nur Master-Radios sind Bridge-Ports, CAPsMAN legt das auf dem CAP nicht an). As-built + teilprojekte.md TP3.1 + CLAUDE.md-Gotcha. OG-Funktionstest offen (User). Co-Authored-By: Claude Opus 4.8 --- CLAUDE.md | 1 + docs/teilprojekte.md | 17 +++++++++++++++++ routeros/tp3.1-ap2-vlan.rsc | 33 +++++++++++++++++++++++++++++++++ 3 files changed, 51 insertions(+) create mode 100644 routeros/tp3.1-ap2-vlan.rsc diff --git a/CLAUDE.md b/CLAUDE.md index b09b4f4..b5e5006 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -62,6 +62,7 @@ GW je VLAN = `.1` · APs: ap1=`.1`, ap2=`.2` · Switches: ALLNET=`.11`, Omada=`. - **ALLNET VLAN-DB final (TP1 ✅):** 40=MEDIA, 50=UNTRUSTED; GE1/GE2/GE8 alle als Trunk mit 10/20/30/40/50/90/99/100. - **Omada-Switch Port 2 = ap2** (Trunk all VLANs), Uplink-Port → ALLNET GE8 (Trunk all), Restports = Access. - **Mesh = NEIN** (beide APs haben wired Trunk-Uplink → Loop-Risiko). +- **ap2 (CAP) braucht `vlan-filtering=yes` mit ether2-Trunk (TP3.1 ✅ 2026-07-01):** local forwarding → `datapath.vlan-id` wird nur bei vlan-filtering auf die Leitung geschrieben. Ohne → ALLE ap2-WLAN-Clients ungetaggt in VLAN1 (defconf/10.40.41.x). Nur Master-Radios wifi1/wifi2 sind Bridge-Ports (Slave-VAPs forwarden darüber) → wifi1/wifi2 müssen manuell tagged-Member je Client-VLAN sein (CAPsMAN legt das auf dem CAP NICHT an). As-built `routeros/tp3.1-ap2-vlan.rsc`. VLAN1 MUSS untagged=bridge,ether2 bleiben (Mgmt/MCP-Pfad 10.40.41.2, kein Scheduler → Recovery = Power-Cycle OG). Widerlegt „ein CAP hält keine Config" (galt nur für Manager-Forwarding). - mgmt-VLAN-Wechsel am Switch = Lockout-Risiko: VLAN muss existieren + Port muss es tragen, in einem Schritt. - **Omada ES208G = Easy Managed** → Controller-adoptierbar (ab 6.1.x), nur Basis-VLAN/QoS im Controller (kein ACL/Policy-Routing). - **TP4 ✅: ap1 ist L3-Router.** Bridge mit vlan-filtering=yes; VLAN1 untagged (Mgmt/Transition); vlan10-99 Subinterfaces mit DHCP+DNS. NAT masquerade out=bridge → FB (Double-NAT bis FB-Bridge-Mode). DNS: 13 statische A-Records bf.lan, **Upstream seit 2026-06-16 = DoH Cloudflare Gateway** (servers=1.1.1.1 Bootstrap). Omada-PVID-Fix (→ .10/.20-Subnetze) ist nächster Schritt. diff --git a/docs/teilprojekte.md b/docs/teilprojekte.md index 08a1e64..b0e16ad 100644 --- a/docs/teilprojekte.md +++ b/docs/teilprojekte.md @@ -91,6 +91,23 @@ Kontrolle: MikroMCP (MikroTik) live · ALLNET = Klickanleitungen · Omada → Co - **Mesh = NEIN** (beide APs wired-trunk → Loop-Risiko). DoH-Upstream = Cloudflare Gateway (seit TP4 aktiv). - Abh. erfüllt: TP4 ✅ (L3/VLAN-Interfaces). Folge: TP8 (802.1X), Sonos-Migration. +### TP3.1 — ap2 VLAN-Trunk-Fix ▸ ✅ Config live (2026-07-01) — `routeros/tp3.1-ap2-vlan.rsc` +- **Root Cause:** ap2 (CAP, local forwarding) hatte `bridge vlan-filtering=no` → `datapath.vlan-id` wurde nie + auf die Leitung geschrieben → **ALLE** WLAN-Clients auf ap2 (main/media/iot/…) egressten **ungetaggt in VLAN1** + (defconf/`10.40.41.x`) statt ins Ziel-VLAN. Symptom: iPhone (VLAN10) im OG „verbunden, aber sporadisch kein + WLAN-Symbol" — beim Roaming ap1↔ap2 sprang es VLAN10↔VLAN1 (Subnetz-Flip → Abbruch). Sonos-Terrasse landete + auf ap2 fälschlich auf `10.40.41.183`. TP3 „ein CAP hält keine Config" gilt nur für Manager-Forwarding — hier + local forwarding, daher **braucht ap2 doch VLAN-Config**. +- ✅ **Fix (wie ap1):** ap2-Bridge `vlan-filtering=yes`; VLAN1 untagged=bridge,ether2 (Mgmt), VLANs 10/30/40/50/90 + tagged auf ether2. Da nur die Master-Radios wifi1(5G)/wifi2(2.4G) Bridge-Ports sind (Slave-VAPs forwarden über + den Master), zusätzlich **wifi1/wifi2 als tagged-Member** je Client-VLAN (wifi1: 10/40/50/90, wifi2: 10/30/40/50/90). + CAPsMAN legt diese auf dem CAP **nicht** automatisch an → manuell gesetzt. Danach `remote-cap provision`. +- **Lockout-Risiko gehandhabt:** ap2-Mgmt (10.40.41.2) untagged VLAN1 blieb erhalten; kein Scheduler (device-mode=home) + → Recovery = Power-Cycle OG. Ausgeführt im leeren-registration-table-Fenster. +- ⏳ **Offen — funktionaler OG-Test durch User:** Handy auf `dirtyvader-main` im OG → Lease muss `dhcp-v10`/`10.40.10.x` + sein (nicht `defconf`/`10.40.41.x`). Falls kein DHCP: Omada-Port-2-Trunk (tagged 10/30/40/50/90) prüfen. +- Abh.: TP3 ✅, TP4 ✅ (Bridge-VLAN-Muster gespiegelt). Config ap2-lokal (nicht CAPsMAN-verwaltet). + ### TP4 — Router-Cutover (hAP#1 = Router) ▸ ✅ L3-Infra FERTIG (2026-06-15) — FB-Bridge ausstehend - ✅ **Bridge VLAN-Filtering aktiviert** (`vlan-filtering=yes`); VLAN-Tabelle: VLAN1 untagged bridge+ether2, VLANs 10/20/30/40/50/90/99/100 tagged bridge+ether2. - ✅ **VLAN-Subinterfaces:** vlan10/20/30/40/50/90/99 auf bridge; je GW `.1` (10.40.10.1 … 10.40.99.1). diff --git a/routeros/tp3.1-ap2-vlan.rsc b/routeros/tp3.1-ap2-vlan.rsc new file mode 100644 index 0000000..50c1fbf --- /dev/null +++ b/routeros/tp3.1-ap2-vlan.rsc @@ -0,0 +1,33 @@ +# TP3.1 — ap2 VLAN-Trunk-Fix (As-built, 2026-07-01) +# Kontext: ap2 (CAP, local forwarding) hatte bridge vlan-filtering=no → datapath.vlan-id +# wurde nie auf die Leitung geschrieben → ALLE WLAN-Clients (main/media/iot/…) egressten +# ungetaggt in VLAN1 (defconf/10.40.41.x). Fix: ap2-Bridge VLAN-scharf machen wie ap1. +# +# WICHTIG (Lockout): ap2-Mgmt (10.40.41.2) liegt untagged auf VLAN1 über die Bridge; MCP/SSH +# läuft darüber. VLAN1 MUSS untagged=bridge,ether2 bleiben. Reihenfolge: erst Tabelle, dann Flip. +# Kein Scheduler auf ap2 (device-mode=home) → kein Auto-Revert; Recovery = Power-Cycle im OG. +# +# Diese Datei ist ap2-LOKAL (nicht CAPsMAN-verwaltet). Auf ap2 ausführen. +# Die master-Radios wifi1(5G)/wifi2(2.4G) tragen alle Client-VLANs getaggt; die Slave-VAPs +# (media/iot/untrusted/guest) forwarden über ihren Master → nur wifi1/wifi2 müssen tagged-Member sein. +# wifi1 (5G): main10 + media40 + untrusted50 + guest90 +# wifi2 (2.4G): main10 + iot30 + media40 + untrusted50 + guest90 + +/interface bridge vlan +add bridge=bridge vlan-ids=1 untagged=bridge,ether2 +add bridge=bridge vlan-ids=10 tagged=ether2,wifi1,wifi2 +add bridge=bridge vlan-ids=30 tagged=ether2,wifi2 +add bridge=bridge vlan-ids=40 tagged=ether2,wifi1,wifi2 +add bridge=bridge vlan-ids=50 tagged=ether2,wifi1,wifi2 +add bridge=bridge vlan-ids=90 tagged=ether2,wifi1,wifi2 + +# Flip als LETZTER Schritt: +/interface bridge set [find name=bridge] vlan-filtering=yes + +# Danach auf ap1 einmalig re-provisionieren, damit der CAP sauber neu bindet: +# /interface wifi capsman remote-cap provision [find identity=ap2] +# +# Verifikation: +# /interface bridge vlan print detail → current-tagged je VLAN = ether2,wifi1(,wifi2) +# OG-Client-Test: Handy auf dirtyvader-main im OG → auf ap1 muss der Lease server=dhcp-v10 +# (10.40.10.x) sein, NICHT defconf/10.40.41.x.