From 6bcef5862f08ab4edf17de99c9f9636ee1caf9bd Mon Sep 17 00:00:00 2001 From: Christoph Emsenhuber Date: Thu, 18 Jun 2026 00:34:47 +0200 Subject: [PATCH] =?UTF-8?q?TP3=20=F0=9F=93=B6=20As-built:=20CAPsMAN=20dirt?= =?UTF-8?q?yvader-SSIDs=20(5=20sichtbar,=20je=20SSID=E2=86=92VLAN)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit routeros/tp3-capsman.rsc: ap1=Manager+AP (Radios lokal), ap2=CAP (Provisioning). 5 SSIDs über beide APs/Bänder mit wifi-datapath vlan-id: main(10), iot(30, nur 2,4 GHz), media(40), untrusted(50), guest(90); infra(20)/mgmt(99) vertagt. WPA3/WPA2+3, FT auf main+media. Passphrase als Platzhalter __TEMP_PSK__ (echter Temp-Wert in gitignored routeros/.secrets/tp3-capsman.psk). Ersetzt capsman-flat-asbuilt/ap1-manager/ap2-cap.rsc. Co-Authored-By: Claude Opus 4.8 --- routeros/tp3-capsman.rsc | 94 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 routeros/tp3-capsman.rsc diff --git a/routeros/tp3-capsman.rsc b/routeros/tp3-capsman.rsc new file mode 100644 index 0000000..137bcd1 --- /dev/null +++ b/routeros/tp3-capsman.rsc @@ -0,0 +1,94 @@ +# ===== AS-BUILT 2026-06-17: TP3 WLAN/CAPsMAN — finale dirtyvader-SSIDs ===== +# Angewendet via MikroMCP (run_command) auf ap1=10.40.41.1 (Manager+AP), ap2=10.40.41.2 (CAP). +# Ersetzt capsman-flat-asbuilt.rsc + ap1-manager.rsc + ap2-cap.rsc (alle obsolet). +# +# ZIEL: 5 sichtbare SSIDs, beide APs, beide Bänder, je SSID -> eigenes VLAN (wifi datapath vlan-id). +# dirtyvader-main(10) WPA3-only FT | dirtyvader-iot(30, NUR 2,4 GHz) WPA2+3 +# dirtyvader-media(40) WPA2+3 FT | dirtyvader-untrusted(50) WPA2+3 | dirtyvader-guest(90) WPA2+3 +# VERTAGT: hidden dirtyvader-infra(20) + dirtyvader-mgmt(99) — Mgmt verkabelt; ggf. TP8-Enterprise-SSID. +# Passphrase = gemeinsames TEMP, Platzhalter __TEMP_PSK__ vor dem Anwenden ersetzen. +# Echter Temp-Wert liegt (gitignored) in routeros/.secrets/tp3-capsman.psk; User ersetzt später pro security-Profil. +# +# KERNLEKTION (verifiziert 2026-06-17, RouterOS 7.23.1 wifi-Paket): +# - Der CAPsMAN-MANAGER kann seine EIGENEN (lokalen) Radios NICHT über Provisioning beziehen +# ("no connection to CAPsMAN, managed locally" / "SSID not set"). configuration.manager=capsman +# fällt auf 'local' zurück, ohne Config => kein SSID. +# - DAHER: ap1-Radios LOKAL zuweisen (Master via set, Slaves als statische virtual interfaces). +# ap2 (remote CAP) zieht Master+Slaves DYNAMISCH über die Provisioning-Regeln. -> Asymmetrisch, +# funktional identisch. +# - Bandzuordnung verifiziert: wifi1 = 5 GHz, wifi2 = 2,4 GHz (auf BEIDEN APs). iot nur auf 2,4 GHz. +# - reset = "/interface/wifi reset " (NICHT 'reset-configuration' — existiert in 7.23 nicht). +# - CAPsMAN/CA-Cert + ap2-Adoption blieben unberührt (kein Re-Adopt). + +# ================= ap1 = MANAGER + AP ================= + +# --- Channels (wiederverwendet aus Vorbestand) --- +/interface/wifi/channel +add name=ch-2g band=2ghz-ax width=20mhz +add name=ch-5g band=5ghz-ax width=20/40/80mhz + +# --- 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-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__" + +# --- Datapath = SSID->VLAN (Bridge hat vlan-filtering=yes seit TP4) --- +/interface/wifi/datapath +add name=dp-main bridge=bridge vlan-id=10 +add name=dp-iot bridge=bridge vlan-id=30 +add name=dp-media bridge=bridge vlan-id=40 +add name=dp-untrusted bridge=bridge vlan-id=50 +add name=dp-guest bridge=bridge vlan-id=90 + +# --- Configuration je SSID (main band-spezifisch mit channel; Slaves ohne channel) --- +/interface/wifi/configuration +add name=cfg-main-5g ssid=dirtyvader-main mode=ap country=Austria security=sec-main datapath=dp-main channel=ch-5g +add name=cfg-main-2g ssid=dirtyvader-main mode=ap country=Austria security=sec-main datapath=dp-main channel=ch-2g +add name=cfg-iot ssid=dirtyvader-iot mode=ap country=Austria security=sec-iot datapath=dp-iot +add name=cfg-media ssid=dirtyvader-media mode=ap country=Austria security=sec-media datapath=dp-media +add name=cfg-untrusted ssid=dirtyvader-untrusted mode=ap country=Austria security=sec-untrusted datapath=dp-untrusted +add name=cfg-guest ssid=dirtyvader-guest mode=ap country=Austria security=sec-guest datapath=dp-guest + +# --- CAPsMAN bleibt enabled (CA/Cert auto, ap2-Pairing unberührt) --- +# /interface/wifi/capsman set enabled=yes interfaces=bridge ;# war bereits aktiv + +# --- Provisioning fuer ap2 (remote CAP): Master + Slaves; iot NUR in der 2-GHz-Regel --- +/interface/wifi/provisioning +add action=create-dynamic-enabled supported-bands=2ghz-ax master-configuration=cfg-main-2g \ + slave-configurations=cfg-iot,cfg-media,cfg-untrusted,cfg-guest +add action=create-dynamic-enabled supported-bands=5ghz-ax master-configuration=cfg-main-5g \ + slave-configurations=cfg-media,cfg-untrusted,cfg-guest + +# --- 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 +# 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 +add master-interface=wifi1 configuration=cfg-guest name=w5-guest disabled=no +add master-interface=wifi2 configuration=cfg-iot name=w2-iot disabled=no +add master-interface=wifi2 configuration=cfg-media name=w2-media disabled=no +add master-interface=wifi2 configuration=cfg-untrusted name=w2-untrusted disabled=no +add master-interface=wifi2 configuration=cfg-guest name=w2-guest disabled=no + +# ================= ap2 = CAP (zieht alles vom Manager) ================= +# Keine Objekte noetig — ap2 war bereits adoptiert (remote-cap state=Ok). Nach Provisioning-Update +# 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" +# ap1: /interface/wifi/capsman/remote-cap print -> ap2 STATE=Ok +# 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) +# - hidden dirtyvader-infra(20)/-mgmt(99) bei Bedarf nachziehen (sec WPA3-only, configuration.hide-ssid=yes). +# - TP8: eine 802.1X-SSID (dirtyvader-secure) mit FreeRADIUS-Dynamic-VLAN -> dann PSK-main/infra retiren.