TP3 📶 ✅ As-built finalisiert: 5 dirtyvader-SSIDs live, Kanal-Plan + Sonos-Diagnose

- ft=no auf sec-media (802.11r bricht Sonos), ft-over-ds=no
- Kanal-Plan non-DFS/überlappungsfrei: ap1 ch36+ch1, ap2 ch149+ch11
  (Auto-Channel hatte beide APs auf 5500-DFS/2437 = Co-Channel gelegt)
- tp3-capsman.rsc: Channel-Frequenzen, ap1-Interface-Override, Verifikation 2026-06-18
- obsolete capsman-flat-asbuilt/ap1-manager/ap2-cap entfernt (von tp3-capsman.rsc ersetzt)
- teilprojekte.md TP3 → ✅; Sonos-Split-Diagnose in tp7-mdns.md + sonos-inventar.md
  (7 WLAN-Sonos noch auf FB-WLAN/VLAN1 → "selektiv je Netz", kein mDNS-Defekt)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-06-18 01:11:41 +02:00
parent 6bcef5862f
commit 03f328f043
7 changed files with 52 additions and 133 deletions

View File

@@ -1,5 +1,14 @@
# Sonos-Inventar (live, 2026-06-17)
> **Update 2026-06-18 (nach TP3-WLAN):** Stand der Migration:
> - **VLAN 40 (MEDIA), 4 Geräte wired:** Arbeitszimmer-Paar `.40.199/.200` + **Schlafzimmer-Table-Lamps**
> `78:28:CA:80:2A:F6`/`82:16:C2` (jetzt `.40.192/.193`, Port auf VLAN 40 umgehängt ✅, reachable).
> - **VLAN 1 (FritzBox-WLAN), 7 Geräte:** 3× One SL (Bad/Kinderzimmer/Küche) + Home-Theater Arc/Amp/Sub
> + **1 weiteres (war offline)** — alle noch nicht migriert.
> - **Folge:** Household über VLAN1↔VLAN40 **gespalten** → mDNS-Repeater (`vlan10,vlan40`) deckt VLAN1 nicht ab
> → „Sonos erscheinen selektiv je Netz" (kein mDNS-Defekt). **Fix = die 7 WLAN-Sonos auf `dirtyvader-media`
> (VLAN 40) holen.** Migrationsziel-SSID steht (TP3); `sec-media` hat **FT/802.11r=no** (802.11r bricht Sonos).
Erhoben zero-dep über die Sonos-HTTP-API (`:1400`) vom Mac (VLAN 1, `10.40.41.82`, en5)
mit `mcp/sonos/sonos-inv.py --seeds 10.40.40.199`. **Alle 10 Geräte S2** (SWGen=2).
Sonos hat **keine** API zum WLAN-Umstellen — Migration passiert am Netz, nicht am Gerät.

View File

@@ -72,13 +72,24 @@ Kontrolle: MikroMCP (MikroTik) live · ALLNET = Klickanleitungen · Omada → Co
- **→ TP4 wird vorgezogen:** Alle VLANs im Controller definiert (status=false = kein Management-IP, normal).
Traffic läuft noch auf VLAN 1 bis TP4 die L3-Interfaces + DHCP-Server je VLAN aktiviert.
### TP3 — WLAN / CAPsMAN ▸ teilweise blockiert
- **`bound`-Problem** sauber lösen (MikroMCP, doku-gegründet) → Test-WLAN „BF-Main" → SSID→VLAN-Datapaths.
- **DoH-Upstream auf APs = Cloudflare** (`/ip dns use-doh-server=https://cloudflare-dns.com/dns-query verify-doh-cert=yes`). Rest der AP-Config noch ~default.
- **SSID-Strategie (Entscheid):** NICHT naiv 1 SSID je VLAN + MAC-Filter. Besser: **eine 802.1X-SSID mit dynamischer VLAN-Zuweisung** (RADIUS, → TP8) für fähige Geräte; **PSK-SSIDs** für IoT/Guest/Media (Geräte ohne 802.1X). Hidden ≠ Sicherheit (nur Obscurity); MAC-Filter = schwaches Minimum, **EAP-TLS/Zert deutlich besser** (TP8).
- **SSID-Nomenklatur (Entscheid 2026-06-17):** Prefix `dirtyvader` + `-<vlanname>` (lowercase), also `dirtyvader-main` (10), `dirtyvader-media` (40), `dirtyvader-iot` (30), `dirtyvader-guest` (90). **INFRA (20) + MGMT (99) hidden** (broadcast unterdrückt — Obscurity reicht gegen Script-Kiddies, kein Sicherheitsmerkmal). Prefix bewusst standort-neutral (kein Hinweis aufs Haus).
- **Mesh = NEIN** (beide APs wired-trunk → Loop-Risiko via Router/LAN; Mesh nur sinnvoll ohne wired backhaul). Research bestätigt in TP-R.
- Abh.: TP8 (für 802.1X). research: CAPsMAN-bound, mesh.
### TP3 — WLAN / CAPsMAN ▸ ✅ KERN FERTIG (2026-06-18) — `routeros/tp3-capsman.rsc`
- ✅ **5 sichtbare SSIDs live, beide APs, beide Bänder, je SSID→VLAN** (wifi datapath vlan-id):
`dirtyvader-main`(10, WPA3-only, FT), `-iot`(30, **nur 2,4 GHz**, WPA2+3), `-media`(40, WPA2+3, **FT=no** wg. Sonos),
`-untrusted`(50, WPA2+3), `-guest`(90, WPA2+3). Alt-SSIDs `install*`/`BF-Main`/`wv*` entfernt. Temp-PSK (User setzt echte).
- ✅ **CAPsMAN-Architektur:** ap1=Manager+AP (lokale Radios), ap2=CAP (dynamisch via Provisioning, `remote-cap=Ok`).
**Kernlektion:** Der Manager kann seine **eigenen** Radios NICHT über CAPsMAN provisionieren → ap1 lokal zuweisen
(Master via `set` + statische Slave-VAPs), ap2 zieht Master+Slaves dynamisch. Ein CAP hält **keine** Eigen-Config.
- ✅ **Kanal-Plan (non-DFS, überlappungsfrei):** ap1 ch36/5180 + ch1/2412 · ap2 ch149/5745 + ch11/2462.
(Auto-Channel hatte beide APs auf 5500-DFS/2437 gelegt = Co-Channel → fix gepinnt. ap2-Kanaländerung braucht
`remote-cap provision`-Push.) `bound`-Problem damit obsolet/sauber gelöst.
- ⏳ **Sonos-Anschluss (TP7):** 7 WLAN-Sonos hängen noch am FB-WLAN (VLAN1) → Household gespalten, daher
„Sonos selektiv je Netz". Fix = Sonos auf `dirtyvader-media`(VLAN40) migrieren (User-seitig, Re-Onboarding).
- **Vertagt:** hidden `dirtyvader-infra`(20)+`-mgmt`(99) (Mgmt verkabelt). **TP8:** eine 802.1X-SSID
(`dirtyvader-secure`) mit FreeRADIUS-Dynamic-VLAN → dann PSK-`main`/`infra` einstampfen (Konsolidierung).
- **SSID-Strategie-Entscheid (Begründung):** unterschiedl. WPA-Typ/Band erzwingen separate SSIDs; „alles in 1 SSID
per Auth" nur via 802.1X (Geräte ohne EAP wie Sonos/TV/IoT brauchen ohnehin PSK) → Hybrid in TP8.
- **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.
### 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.
@@ -181,6 +192,7 @@ Kontrolle: MikroMCP (MikroTik) live · ALLNET = Klickanleitungen · Omada → Co
1. ~~**Jetzt:** TP1 (GE8) → TP2 (Omada Controller).~~ ✅ erledigt 2026-06-15.
2. ~~**TP4 (Router-Cutover L3-Infra).**~~ ✅ erledigt 2026-06-15. FB-Bridge-Mode noch offen (physisch).
3. **Jetzt: Omada-PVID-Fix** — Omada Access-Profile korrigieren (PVID 10/20, untagNetworkIds bereinigen, sicher P3/P5/P6 zuerst), dann IP-Migration NAS/macmini/pve auf VLAN-Subnetze + DNS-Einträge updaten.
4. **Dann:** TP5 (Firewall/Deny-by-default) → TP6 (QoS/CAKE) → ~~TP7 (mDNS)~~ ✅ vorgezogen 2026-06-17 → TP3 (WLAN/CAPsMAN).
4. **Dann:** TP5 (Firewall/Deny-by-default) → TP6 (QoS/CAKE). ~~TP7 (mDNS)~~ ✅ 2026-06-17, ~~TP3 (WLAN/CAPsMAN)~~ ✅ 2026-06-18.
⚠️ TP5 muss die TP7-Firewall-Holes mitnehmen (s. TP7: MAIN↔MEDIA-forward + UDP 5353 input).
⏳ Sonos-WLAN-Migration (7 Geräte FB-WLAN→VLAN40) als Anschluss an TP3/TP7 (User-seitig, schließt den Household).
5. **Nachgelagert/Research-getrieben:** TP8 (Access), TP9 (HA), TP10 (VPN), TP11 (Monitoring), TP12 (IPv6), TP13 (Spaß).

View File

@@ -23,6 +23,14 @@ Der Router-DNS-Dienst (läuft bereits, `allow-remote-requests=yes`) spiegelt mDN
mDNS-Pakete vom Router selbst (input→output), kein Client-zu-Client-`forward`.
→ Deny-by-default im `forward`-Chain blockt die Discovery **nicht**.
## Diagnose 2026-06-18 — „Sonos selektiv je Netz" ist KEIN mDNS-Defekt
Nach TP3 gemeldet: Sonos erscheinen nur teilweise. Ursache **nicht** der Repeater (intakt: `vlan10,vlan40`),
sondern der **gespaltene Sonos-Household**: 4 Sonos auf VLAN 40, **7 noch auf dem FritzBox-WLAN (VLAN 1)**.
Der Repeater spiegelt nur `vlan10↔vlan40` → MAIN-Client sieht nur die VLAN40-Hälfte, FB-WLAN-Client nur die
VLAN1-Hälfte. **Fix = die 7 WLAN-Sonos auf `dirtyvader-media` (VLAN 40) migrieren** (s. `sonos-inventar.md`),
dann ist der Household geschlossen und MAIN sieht über den Repeater alle. VLAN1 bewusst NICHT in den Repeater
aufnehmen (FB-Transit, temporär) — der saubere Weg ist die Migration.
## Verifikation
- Config aktiv bestätigt: `mdns-repeat-ifaces: vlan10,vlan40` (`/ip/dns/get`).
- Passive Torch (`dst 224.0.0.251` auf vlan10/vlan40) im Sampling-Fenster leer →

View File

@@ -1,47 +0,0 @@
# ===== ap1 (10.40.41.155) — CAPsMAN-Manager + AP + VLAN-Bridge =====
# RouterOS 7.23.1. NUR PLAN — Syntax vor Apply gegen Gerät validieren.
# Platzhalter <...> ersetzen. L3/Router-Teil (DHCP/DNS/NAT/CAKE) NICHT hier (separater Cutover).
# --- 1) Bridge-VLAN-Tabelle (Uplink ether2 = Trunk, native vlan1 = Mgmt) ---
/interface bridge vlan
add bridge=bridge vlan-ids=10,20,30,40,90,99,100 tagged=bridge,ether2
add bridge=bridge vlan-ids=1 untagged=ether2,ether3,ether4,ether5 tagged=bridge
/interface bridge port
set [find interface=ether2] pvid=1 ;# native/untagged = vlan1 (Mgmt)
# --- 2) WLAN Security (Passphrasen vom User) ---
# TEMP-Passphrase (Platzhalter) — User setzt echte später
/interface wifi security
add name=sec-main authentication-types=wpa3-psk passphrase="BFtest-2026-tmp" ;# WPA3-only (User)
add name=sec-iot authentication-types=wpa2-psk,wpa3-psk passphrase="BFtest-2026-tmp"
add name=sec-guest authentication-types=wpa2-psk,wpa3-psk passphrase="BFtest-2026-tmp"
# --- 3) Datapath = VLAN-Zuordnung (Bridge + vlan-id) ---
/interface wifi datapath
add name=dp-main bridge=bridge vlan-id=10
add name=dp-iot bridge=bridge vlan-id=30
add name=dp-guest bridge=bridge vlan-id=90
# --- 4) Configuration je SSID ---
/interface wifi configuration
add name=cfg-main ssid="BF-Main" security=sec-main datapath=dp-main country=Austria
add name=cfg-iot ssid="BF-IoT" security=sec-iot datapath=dp-iot country=Austria
add name=cfg-guest ssid="BF-Guest" security=sec-guest datapath=dp-guest country=Austria
# --- 5) CAPsMAN-Manager aktivieren (CA/Cert generiert RouterOS automatisch) ---
/interface wifi capsman
set enabled=yes interfaces=bridge ca-certificate=auto certificate=auto
# --- 6) Provisioning: pro Radio Master(BF-Main)+Slaves(IoT,Guest) dynamisch anlegen ---
/interface wifi provisioning
add action=create-dynamic-enabled supported-bands=2ghz-ax \
master-configuration=cfg-main slave-configurations=cfg-iot,cfg-guest
add action=create-dynamic-enabled supported-bands=5ghz-ax \
master-configuration=cfg-main slave-configurations=cfg-iot,cfg-guest
# --- 7) SAFETY: Auto-Rollback, DANN vlan-filtering an ---
/system scheduler
add name=vlan-rollback interval=5m \
on-event="/interface bridge set [find name=bridge] vlan-filtering=no; /system scheduler remove vlan-rollback"
/interface bridge set [find name=bridge] vlan-filtering=yes
# Nach bestätigtem Zugriff: /system scheduler remove vlan-rollback

View File

@@ -1,21 +0,0 @@
# ===== ap2 (10.40.41.156) — CAP (zieht Config von ap1) + VLAN-Bridge =====
# RouterOS 7.23.1. NUR PLAN — Syntax vor Apply gegen Gerät validieren.
# --- 1) Bridge-VLAN-Tabelle (identisch zu ap1: Uplink ether2 Trunk, native vlan1 Mgmt) ---
/interface bridge vlan
add bridge=bridge vlan-ids=10,20,30,40,90,99,100 tagged=bridge,ether2
add bridge=bridge vlan-ids=1 untagged=ether2,ether3,ether4,ether5 tagged=bridge
/interface bridge port
set [find interface=ether2] pvid=1
# --- 2) CAP aktivieren: Manager = ap1, Wireless slaves in die Bridge ---
/interface wifi cap
set enabled=yes discovery-interfaces=bridge caps-man-addresses=10.40.41.1 slaves-datapath=bridge
# (ap2 zieht security/datapath/configuration/provisioning vom Manager → SSIDs erscheinen automatisch)
# --- 3) SAFETY: Auto-Rollback, DANN vlan-filtering an ---
/system scheduler
add name=vlan-rollback interval=5m \
on-event="/interface bridge set [find name=bridge] vlan-filtering=no; /system scheduler remove vlan-rollback"
/interface bridge set [find name=bridge] vlan-filtering=yes
# Nach bestätigtem Zugriff: /system scheduler remove vlan-rollback

View File

@@ -1,45 +0,0 @@
# ===== AS-BUILT 2026-06-09: CAPsMAN BF-Main, FLACH (bridge/vlan1, KEIN VLAN) =====
# Angewendet via MikroMCP (run_command). ap1=10.40.41.1 (Manager+AP), ap2=10.40.41.2 (CAP).
# Verifiziert: beide APs, beide Bänder = SSID BF-Main, WPA3-only + FT, state=running, remote-cap Ok.
# WICHTIGSTE LEKTION (kostete den Vorgänger den Erfolg):
# - "bound=true" ist NORMAL (Master-IF mit Radio+Config), KEIN Fehler.
# - Ein CAP wird nur provisioniert, wenn auf seinen Interfaces
# configuration.manager=capsman-or-local gesetzt ist (default=local → kontaktiert CAPsMAN NIE).
# Reset setzt es auf default zurück → nach reset neu setzen!
# - Manager-eigene Radios kann CAPsMAN NICHT via configuration.manager=capsman managen
# → lokal die Configuration-Profile direkt zuweisen (Doku).
# ---------- ap1 = MANAGER + AP ----------
/interface/wifi/channel
add name=ch-2g band=2ghz-ax width=20mhz
add name=ch-5g band=5ghz-ax width=20/40/80mhz ;# 5560 (DFS) auto -> 1min CAC; ggf. non-DFS pinnen
/interface/wifi/security
add name=sec-main authentication-types=wpa3-psk passphrase="BFtest-2026-tmp" ft=yes ft-over-ds=yes
/interface/wifi/datapath
add name=dp-main bridge=bridge ;# FLACH: nur bridge, kein vlan-id (VLAN kommt nach Cutover)
/interface/wifi/configuration
add name=cfg-main-5g ssid=BF-Main mode=ap country=Austria security=sec-main datapath=dp-main channel=ch-5g
add name=cfg-main-2g ssid=BF-Main mode=ap country=Austria security=sec-main datapath=dp-main channel=ch-2g
/interface/wifi/capsman
set enabled=yes ;# interfaces=bridge, ca/cert auto (waren vorhanden)
/interface/wifi/provisioning
add action=create-dynamic-enabled supported-bands=5ghz-ax master-configuration=cfg-main-5g
add action=create-dynamic-enabled supported-bands=2ghz-ax master-configuration=cfg-main-2g
# ap1 eigene Radios lokal zuweisen (Master kann sich nicht selbst per CAPsMAN managen):
/interface/wifi
reset wifi1 ; set wifi1 configuration=cfg-main-5g disabled=no
reset wifi2 ; set wifi2 configuration=cfg-main-2g disabled=no
# ---------- ap2 = CAP ----------
/interface/wifi
reset wifi1 ; reset wifi2
set wifi1,wifi2 configuration.manager=capsman-or-local ;# <-- DER SCHLÜSSEL, sonst keine Provisionierung
enable wifi1,wifi2
/interface/wifi/cap
set enabled=yes discovery-interfaces=bridge caps-man-addresses=10.40.41.1
# ---------- Verifikation ----------
# ap1: /interface/wifi/capsman remote-cap print -> ap2 STATE=Ok
# ap1: /interface/wifi monitor wifi1,wifi2 once -> state=running, SSID BF-Main
# ap2: /interface/wifi print detail -> "managed by CAPsMAN ...", BR (bound+running)
# Backups vorher: pre-capsman-2026-06-09.backup auf beiden APs.

View File

@@ -22,16 +22,16 @@
# ================= ap1 = MANAGER + AP =================
# --- Channels (wiederverwendet aus Vorbestand) ---
# --- Channels (non-DFS gepinnt; diese Frequenzen gelten fuer ap2 = CAP, ap1 wird unten lokal ueberschrieben) ---
/interface/wifi/channel
add name=ch-2g band=2ghz-ax width=20mhz
add name=ch-5g band=5ghz-ax width=20/40/80mhz
add name=ch-2g band=2ghz-ax width=20mhz frequency=2462 ;# ch11 (ap2)
add name=ch-5g band=5ghz-ax width=20/40/80mhz frequency=5745 ;# ch149 non-DFS (ap2)
# --- Security je SSID (gemeinsames Temp-PW; FT nur main+media) ---
/interface/wifi/security
add name=sec-main authentication-types=wpa3-psk ft=yes ft-over-ds=yes passphrase="__TEMP_PSK__"
add name=sec-iot authentication-types=wpa2-psk,wpa3-psk ft=no passphrase="__TEMP_PSK__"
add name=sec-media authentication-types=wpa2-psk,wpa3-psk ft=yes ft-over-ds=yes passphrase="__TEMP_PSK__"
add name=sec-media authentication-types=wpa2-psk,wpa3-psk ft=no passphrase="__TEMP_PSK__" ;# ft=no: 802.11r bricht Sonos
add name=sec-untrusted authentication-types=wpa2-psk,wpa3-psk ft=no passphrase="__TEMP_PSK__"
add name=sec-guest authentication-types=wpa2-psk,wpa3-psk ft=no passphrase="__TEMP_PSK__"
@@ -64,8 +64,8 @@ add action=create-dynamic-enabled supported-bands=5ghz-ax master-configuration=c
# --- ap1-EIGENE Radios LOKAL zuweisen (Manager provisioniert sich nicht selbst!) ---
/interface/wifi
set wifi1 configuration=cfg-main-5g configuration.manager=local disabled=no ;# wifi1 = 5 GHz
set wifi2 configuration=cfg-main-2g configuration.manager=local disabled=no ;# wifi2 = 2,4 GHz
set wifi1 configuration=cfg-main-5g configuration.manager=local disabled=no channel.frequency=5180 ;# wifi1 = 5 GHz, ch36 (override gg. ch-5g)
set wifi2 configuration=cfg-main-2g configuration.manager=local disabled=no channel.frequency=2412 ;# wifi2 = 2,4 GHz, ch1 (override gg. ch-2g)
# Statische Slaves je Band (5 GHz ohne iot):
add master-interface=wifi1 configuration=cfg-media name=w5-media disabled=no
add master-interface=wifi1 configuration=cfg-untrusted name=w5-untrusted disabled=no
@@ -80,15 +80,18 @@ add master-interface=wifi2 configuration=cfg-guest name=w2-guest disable
# erscheinen dynamisch: wifi1(5G)=main + media/untrusted/guest ; wifi2(2,4G)=main + iot/media/untrusted/guest.
# Falls je noetig: /interface/wifi/capsman/remote-cap provision [find]
# ================= VERIFIKATION (durchgefuehrt) =================
# ap1: /interface/wifi monitor wifi1,wifi2 once -> state=running (wifi1 nach 1min DFS-CAC auf 5500)
# ap2: /interface/wifi print brief -> 9 IFs alle DBR/MBR running, "managed by CAPsMAN 10.40.41.1"
# ================= VERIFIKATION (durchgefuehrt 2026-06-18) =================
# ap1: monitor wifi1,wifi2 -> running, ch36/5180 (5G) + ch1/2412 (2,4G), tx-power ~18-25/15 dBm, 2 Clients FT-WPA3 VLAN10
# ap2: print brief -> 9 IFs MBR/DBR running, ch149/5745 (5G) + ch11/2462 (2,4G), "managed by CAPsMAN 10.40.41.1"
# ap1: /interface/wifi/capsman/remote-cap print -> ap2 STATE=Ok
# Kanaele distinkt + non-DFS auf beiden Baendern (Co-Channel beseitigt). KANAL-AENDERUNG an ap2 braucht
# manuellen Push: /interface/wifi/capsman/remote-cap provision [find]
# Offen (User-Geraetetest): Client je SSID -> DHCP aus 10.40.{10,30,40,50,90}.x, list_wifi_clients vlan-id.
# ================= OFFENE PUNKTE / TUNING =================
# - Echte Passphrasen pro security-Profil setzen (Temp ersetzen).
# - 5 GHz: beide APs auto -> aktuell beide auf DFS-5500. Empfehlung: non-DFS pinnen & distinct
# (z.B. ap1=ch36/5180, ap2=ch149/5745) gegen Co-Channel + Radar-Unterbrechung. (channel.frequency)
# - Echte Passphrasen pro security-Profil setzen (Temp ersetzen). User macht das selbst.
# - Kanal-Plan erledigt: ap1 ch36/ch1, ap2 ch149/ch11 (alle non-DFS, ueberlappungsfrei).
# - hidden dirtyvader-infra(20)/-mgmt(99) bei Bedarf nachziehen (sec WPA3-only, configuration.hide-ssid=yes).
# - Sonos-Migration (TP7-Anschluss): 7 WLAN-Sonos noch auf FB-WLAN (VLAN1) -> auf dirtyvader-media (VLAN40)
# holen, dann ist der Household geschlossen und mDNS-Repeater vlan10<->vlan40 liefert MAIN volle Discovery.
# - TP8: eine 802.1X-SSID (dirtyvader-secure) mit FreeRADIUS-Dynamic-VLAN -> dann PSK-main/infra retiren.