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>
95 lines
6.4 KiB
Plaintext
95 lines
6.4 KiB
Plaintext
# ===== 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.
|