# ===================================================================================== # ap3 — Bring-up als reiner CAP unter dem CAPsMAN-Manager crs326-core. # TP28-Nachtrag, 2026-08-30. Geraet: MikroTik cAP ax (cAPGi-5HaxD2HaxD), Werkszustand. # # WEG: Laptop an ap3 ether2 (cAP ax HAT einen zweiten Port), Datei per scp hoch, # dann `/import file=tp28-ap3-bringup.rsc`. ether1 dabei NOCH NICHT am Netz. # Danach ether1 -> crs326-core ether21 (ist seit 2026-08-30 Trunk). # # 🔴 ether2 bleibt in DIESER Datei als LIFELINE im Bridge (untagged VLAN1), damit die # Sitzung das abschliessende `vlan-filtering=yes` ueberlebt. Der Abbau ist eine # EIGENE Datei (tp28-ap3-lifeline-abbau.rsc) und laeuft ERST, wenn ap3 ueber # 10.40.99.13 erreichbar ist. Zielzustand = wie ap2: ether2 kein Bridge-Port. # # ⚠️ NICHT von routeros/.secrets/ap*-prov-base.rsc abgeleitet — die sind als # historisch/nicht-deploybar markiert und tragen veraltete PSKs. Vorlage ist der # LIVE-Stand von ap2 (2026-08-30 gelesen). # # DELTAS ZU ap1/ap2 (hAP ax2): cAP ax hat nur ZWEI Ethernet-Ports (ether1 PoE-in, # ether2 PoE-out) — es gibt kein ether3/4/5. Der GC-Template-AP-Zweig hat die # hartkodiert; dort kommt `ap.extra_ports` dazu (fuer ap3 = leere Liste). # ===================================================================================== /system identity set name=ap3 # --- L3/WAN-Reste weg. Ein Werks-cAP bringt DHCP-Client/Server + NAT mit; beides hat # im BF-Netz nichts verloren (der Core ist DHCP- und NAT-Instanz). /ip dhcp-client remove [find] /ip dhcp-server remove [find] /ip dhcp-server network remove [find] /ip pool remove [find] /ip firewall nat remove [find] /ipv6 dhcp-client remove [find] # --- Interface-Lists: ether1 ist Uplink, NICHT WAN. :if ([:len [/interface list find where name=LAN]]=0) do={ /interface list add name=LAN } :if ([:len [/interface list find where name=WAN]]=0) do={ /interface list add name=WAN } /interface list member remove [find where interface=ether1] # --- Bridge sicherstellen, VLAN-Filter waehrend des Umbaus AUS. :if ([:len [/interface bridge find where name=bridge]]=0) do={ /interface bridge add name=bridge } /interface bridge set [find name=bridge] vlan-filtering=no # ether2 traegt PoE-out. Nichts haengt dran -> aus, wie ap1/ap2 es mit ihrem PoE-Port halten. /interface ethernet set [find name=ether2] poe-out=off # --- Werks-WLAN abraeumen. REIHENFOLGE IST PFLICHT: `configuration` referenziert # security/datapath/channel; wer die Referenzierten zuerst loescht, bekommt einen # Fehler und laesst einen Teil-Zustand zurueck (Lehre aus tp28-ap-wifi-reste-abraeumen.rsc). # `[find !dynamic]` waere hier ein SYNTAXFEHLER — diese Objekte haben gar keine # dynamic-Eigenschaft. Richtig ist schlicht `[find]`. /interface wifi capsman set enabled=no /interface wifi remove [find where !(name=wifi1 || name=wifi2)] /interface wifi configuration remove [find] /interface wifi steering remove [find] /interface wifi security remove [find] /interface wifi datapath remove [find] /interface wifi channel remove [find] # Werks-Inline-Overrides auf den Master-Radios loeschen, sonst gewinnen sie gegen den Manager. /interface wifi set [find name=wifi1] !configuration.ssid !security.authentication-types !security.passphrase !security.ft-over-ds /interface wifi set [find name=wifi2] !configuration.ssid !security.authentication-types !security.passphrase !security.ft-over-ds # --- Bridge-Ports idempotent. ether2 = Lifeline (faellt spaeter weg). :if ([:len [/interface bridge port find where interface=ether1]]=0) do={ /interface bridge port add bridge=bridge interface=ether1 } :if ([:len [/interface bridge port find where interface=ether2]]=0) do={ /interface bridge port add bridge=bridge interface=ether2 } :if ([:len [/interface bridge port find where interface=wifi1]]=0) do={ /interface bridge port add bridge=bridge comment=defconf interface=wifi1 } :if ([:len [/interface bridge port find where interface=wifi2]]=0) do={ /interface bridge port add bridge=bridge comment=defconf interface=wifi2 } # --- Bridge-VLAN-Tabelle. Muster = ap2 live, plus ether2 in VLAN1 (Lifeline). # IOT (30) nur auf wifi2: die Zone hat bands=["2g"] (ConfigContext ap-common). # MGMT (99) liegt auf der Bridge, NICHT auf den Radios — sonst waere Management # over-the-air. /interface bridge vlan remove [find] /interface bridge vlan add bridge=bridge untagged=bridge,ether1,ether2 vlan-ids=1 /interface bridge vlan add bridge=bridge tagged=ether1,wifi1,wifi2 vlan-ids=10 /interface bridge vlan add bridge=bridge tagged=ether1,wifi1,wifi2 vlan-ids=20 /interface bridge vlan add bridge=bridge tagged=ether1,wifi2 vlan-ids=30 /interface bridge vlan add bridge=bridge tagged=ether1,wifi1,wifi2 vlan-ids=40 /interface bridge vlan add bridge=bridge tagged=ether1,wifi1,wifi2 vlan-ids=50 /interface bridge vlan add bridge=bridge tagged=ether1,wifi1,wifi2 vlan-ids=90 /interface bridge vlan add bridge=bridge tagged=ether1,bridge vlan-ids=99 # --- Mgmt-Layer. IP nach TP32-Konvention (.10-.29 = physische Hosts): ap1 .11, ap2 .12, ap3 .13. :if ([:len [/interface vlan find where name=vlan99]]=0) do={ /interface vlan add name=vlan99 interface=bridge vlan-id=99 } /ip address remove [find where interface=vlan99] /ip address add address=10.40.99.13/24 interface=vlan99 :if ([:len [/interface list member find where list=LAN and interface=vlan99]]=0) do={ /interface list member add list=LAN interface=vlan99 } :if ([:len [/interface list member find where list=LAN and interface=bridge]]=0) do={ /interface list member add list=LAN comment=defconf interface=bridge } /ip route remove [find where comment="mgmt default via core"] /ip route add dst-address=0.0.0.0/0 gateway=10.40.99.1 comment="mgmt default via core" /ip dns set allow-remote-requests=yes servers=10.40.99.1 # Zeitquelle ist der Core (seit 2026-08-18). Ohne das war ap2 einmal 17 h versetzt und # seine Logs fuer jede geraeteuebergreifende Korrelation wertlos. /system ntp client set enabled=yes /system ntp client servers remove [find] /system ntp client servers add address=10.40.99.1 # --- CAP-Modus. 🔴🔴 `slaves-datapath` IST NICHT OPTIONAL. # Der Manager schickt `datapath.bridge=bridge` zwar mit, der CAP uebernimmt davon # aber NUR die vlan-id — die Bridge-Mitgliedschaft bleibt lokal. Fehlt das Objekt, # assoziieren Clients auf iot/media/untrusted/guest sauber und bekommen NIE DHCP, # waehrend dirtyvader-main (Master-Radios = statische Bridge-Ports) weiterlaeuft. # Genau so lagen IOT+MEDIA am 2026-08-18 rund 14 Stunden. KEINE vlan-id hier — # die liefert der Manager pro VAP. /interface wifi datapath add name=dp-caps-slaves bridge=bridge comment="TP28-fix: bridge fuer CAPsMAN-Slave-VAPs" /interface wifi cap set enabled=yes discovery-interfaces=vlan99 slaves-datapath=dp-caps-slaves # --- ZULETZT: Bridge VLAN-scharf schalten. Vorher waere der Rest der Datei nicht angekommen. /interface bridge set [find name=bridge] vlan-filtering=yes :log info "tp28-ap3: bring-up fertig, ip=10.40.99.13 cap=yes slaves-datapath=dp-caps-slaves"