TP3 📶 As-built: CAPsMAN dirtyvader-SSIDs (5 sichtbar, je SSID→VLAN)

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 <noreply@anthropic.com>
This commit is contained in:
2026-06-18 00:34:47 +02:00
parent b3b23c8b10
commit 6bcef5862f

94
routeros/tp3-capsman.rsc Normal file
View File

@@ -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 <if>" (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.