From f0c08263dd066257e7bfc3b936d3486a7d661bcc Mon Sep 17 00:00:00 2001 From: Christoph Emsenhuber Date: Mon, 15 Jun 2026 19:00:40 +0200 Subject: [PATCH] =?UTF-8?q?TP2=20=F0=9F=94=8D=20Profile-Analyse=20+=20TP4?= =?UTF-8?q?=20vorgezogen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Analyse via Omada Controller v2-API (2026-06-15): - Access-Profile haben PVID=1 statt 10/20 (Constraint: fixe IPs in 10.40.41.x) - Access-MAIN hat untagNetworkIds=[VLAN1,VLAN10,VLAN20] — bekannter Fehler, Fix nach TP4 - P4 (dock/monitor) → Access-MAIN (Lifeline-Port, nicht anfassen) - P3/P5/P6 sicher zum Testen, P7/P8 eingefroren - Network-IDs + v2-API-Pfade dokumentiert (Ctrl-API: Csrf-Token, /switches/{MAC}/ports) - TP4 vorgezogen: blockiert Profile-Fix + echte VLAN-Segmentierung Co-Authored-By: Claude Sonnet 4.6 --- docs/teilprojekte.md | 55 ++++++++++++++++--------- memory/project_tp2_topology.md | 73 +++++++++++++++++++++++----------- 2 files changed, 85 insertions(+), 43 deletions(-) diff --git a/docs/teilprojekte.md b/docs/teilprojekte.md index c294fe5..a3c24d7 100644 --- a/docs/teilprojekte.md +++ b/docs/teilprojekte.md @@ -18,10 +18,11 @@ IP-Blöcke: `.1–10` Router/APs (ap1=.1, ap2=.2) · `.11–20` Switches (ALLNET=.11, Omada=.12). GW je VLAN = `.1`. ## Ist-Stand (Kurz) -ALLNET-Core `.11` (FW2.2.1, VLANs 10/20/30/40/50/90/99/100; GE1/GE2/GE8 Trunk; **TP1 ✅ 2026-06-15**). Omada-Switch `.12` (adopted, **TP2 ✅ 2026-06-15**; Trunk-ALL auf P1+P2, Access-Profile auf P3-P8). -Omada-Controller **`.175`** (DS923/macvlan, mbentley 6.2, 🟢 live). omada-mcp **`.176`** (pve-LXC, StreamableHTTP, 🟢 live, 84 read-Tools). +ALLNET-Core `.11` (FW2.2.1, VLANs 10/20/30/40/50/90/99/100; GE1/GE2/GE8 Trunk; **TP1 ✅ 2026-06-15**). Omada-Switch `.12` (adopted, **TP2 ✅ 2026-06-15**; Trunk-ALL auf P1+P2, Access-Profile auf P3-P8; Profile noch PVID=1 bis TP4 — siehe TP2). +Omada-Controller **`.175`** (DS923/macvlan, mbentley 6.2, 🟢 live). omada-mcp **`.176`** (pve-LXC, StreamableHTTP, 🟢 live, 84 read-Tools; Controller-API v2 intern via christoph@emsenhuber.com). 2× hAP ax² (7.23.1): ap1 `.1` (ALLNET P1), ap2 `.2` (Omada P2 — Trunk). FB6660 = Router/Telefon (`.254`). Kontrolle: MikroMCP (MikroTik) live · ALLNET = Klickanleitungen · Omada → Controller + omada-mcp 🟢. +**Nächster Schritt: TP4 (Router-Cutover) wird vorgezogen** — blockiert Profile-Fix und alle weiteren VLANs. > ⚠️ **HW-Constraint hAP ax²:** 1 GB RAM, aber nur **128 MB Flash + KEIN USB** → **Container auf dem Router NICHT praktikabel**. > Folge: **native RouterOS-Features bevorzugen** (z.B. Built-in-mDNS statt Container); Container (mDNS-Reflector, BIND9-DNS, Omada-Controller) laufen auf **NAS/pve**, nicht am hAP. @@ -45,19 +46,30 @@ Kontrolle: MikroMCP (MikroTik) live · ALLNET = Klickanleitungen · Omada → Co - omadac_id=`adbef8fa…`, site_id=`6a2fe68e…`. - ✅ **VLANs im Controller:** 1/10/20/30/40/50/90/99/100 — alle angelegt, Switch adopted (switchConsistent=true). - ✅ **Port-Plan (ES208G, alle 8 Ports konfiguriert):** - | Port | Name | Profil | Gerät | - |------|------|--------|-------| - | 1 | uplink | Trunk-ALL | → ALLNET GE8 | - | 2 | ap2 | Trunk-ALL | hAP ax² #2 | - | 3 | Port3 | Access-MAIN | — | - | 4 | dock/monitor | Access-INFRA | Docking-Station | - | 5 | drucker | Access-MAIN | Drucker | - | 6 | Port6 | Access-MAIN | — | - | 7 | macmini | Access-INFRA | Mac mini | - | 8 | ds923+ | Access-MAIN | NAS (2. Port) | + | Port | Name | Profil | Gerät | Status | + |------|------|--------|-------|--------| + | 1 | uplink | Trunk-ALL | → ALLNET GE8 | ✅ korrekt | + | 2 | ap2 | Trunk-ALL | hAP ax² #2 | ✅ korrekt | + | 3 | Port3 | Access-MAIN | — (frei) | ⚠️ PVID=1 | + | 4 | dock/monitor | **Access-MAIN** | Docking-Station | ⚠️ PVID=1 · **Lifeline-Port, nicht anfassen** | + | 5 | drucker | Access-MAIN | Drucker | ⚠️ PVID=1 | + | 6 | Port6 | Access-MAIN | — (frei) | ⚠️ PVID=1 | + | 7 | macmini | Access-INFRA | Mac mini | ⚠️ PVID=1 · **fixe IP 10.40.41.x, nicht anfassen** | + | 8 | ds923+ | Access-MAIN | NAS (2. Port) | ⚠️ PVID=1 · **nicht anfassen** | +- ⚠️ **Profile-PVID-Constraint (bis TP4 offen):** NAS, Mac mini und andere Geräte haben fixe IPs im + Bereich `10.40.41.x` (VLAN-1-Subnetz der FritzBox). Solange diese nicht auf VLAN-10/20-Subnetze migriert + sind, muss `nativeNetworkId=Default(VLAN 1)` in allen Access-Profilen bleiben — sonst kein DHCP, kein + Internet für diese Geräte. Fix nach TP4. +- ⚠️ **Bekannter Fehler `untagNetworkIds` (Analyse 2026-06-15 via Controller-API v2):** + Access-MAIN hat `untagNetworkIds=[VLAN1, VLAN20, VLAN10]` (3 untagged!) statt `[VLAN10]`. + Access-INFRA hat `untagNetworkIds=[VLAN20, VLAN1]` statt `[VLAN20]`. Geräte erhalten Frames + aus mehreren VLANs ungetaggt → Inter-VLAN-Tests verfälscht. Fix erst sinnvoll nach TP4 zusammen + mit PVID-Korrektur. +- **Sichere Testports (kein kritisches Gerät):** P3, P5, P6. - ✅ Portainer-Ablösung: **Komodo** empfohlen (einzige Option mit nativem MCP `mcp-server-komodo`). Eigener Task. - Abh. erfüllt: TP1 (GE8 Trunk ✅). -- **Hinweis TP4:** Alle VLANs im Controller definiert (status=false = kein Management-IP, normal). Traffic läuft noch auf VLAN 1 bis TP4 (Router-Cutover) die L3-Interfaces aktiviert. +- **→ 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. @@ -66,11 +78,14 @@ Kontrolle: MikroMCP (MikroTik) live · ALLNET = Klickanleitungen · Omada → Co - **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. -### TP4 — Router-Cutover (hAP#1 = Router) ▸ disruptiv, geplant +### TP4 — Router-Cutover (hAP#1 = Router) ▸ ⚡ VORGEZOGEN — nächstes TP - Per-VLAN L3-Interface `.1`, **DHCP** (RouterOS), **DNS = RouterOS-nativ + nur statische Records**, **NAT**, FB→**Bridge-Mode/Exposed-Host**. - **DNS-Entscheidung** (Technitium **und** externer BIND verworfen — Vorgabe: kein Container außer am Router, keine NAS/pve-Abhängigkeit; hAP kann praktikabel keinen DNS-Container hosten): RouterOS-DNS als Resolver, **keine DHCP→DNS-Auto-Registrierung**. Infra-Hosts (haben eh DHCP-Reservierungen) als statische `/ip dns static`-Einträge unter `bf.lan`; dynamische Clients bewusst ohne Namen. Filtering/DNSSEC via DoH-Upstream (TP3). HA: 2. Resolver auf ap2, statische Einträge beidseitig pflegen. Begründung/parkierte Variante A: `docs/research/dns-registration-options.md`. - **FB-Bridge testen** (LAN4-Native-Bridge-Hack) → kein Double-NAT; sonst Exposed-Host-Fallback. -- Abh.: TP1, TP3. Ziel: VLAN-SSILs nutzbar + Telefonie-Fix aktiv. +- Abh.: TP1 ✅. TP3-Abhängigkeit **entfällt** (TP4 vor TP3 ziehen; WLAN läuft weiterhin über FB bis TP3). +- **Ermöglicht nach TP4:** PVID-Fix in Omada-Profilen (MAIN→10, INFRA→20), untagNetworkIds-Bereinigung, + DHCP-Reservierungen für NAS/macmini/pve auf neue VLAN-Subnetze migrieren. +- Ziel: VLAN-Traffic vollständig segmentiert + Internet aller VLANs via NAT auf ap1. ### TP5 — Firewall & Inter-VLAN-Policy - **Deny-by-default + least-privilege.** MAIN→INFRA nur Whitelist-Dienste; MAIN↔MEDIA allow (+mDNS); UNTRUSTED/GUEST nur Internet; MGMT isoliert; Router-input gehärtet. @@ -124,7 +139,9 @@ Kontrolle: MikroMCP (MikroTik) live · ALLNET = Klickanleitungen · Omada → Co --- ## Reihenfolge / Abhängigkeiten -1. **Jetzt:** TP1 (GE8) → TP2 (Omada Controller). Parallel: Research (TP-R, TP10) laufen. -2. **Dann:** TP3 (WLAN-bound + DoH) — 802.1X-Teil wartet auf TP8/Research. -3. **Cutover-Block:** TP4 (Router) → TP5 (Firewall) → TP6 (QoS) → TP7 (mDNS). Disruptiv, geplant. -4. **Nachgelagert/Research-getrieben:** TP8 (Access), TP9 (HA), TP10 (VPN), TP11 (Monitoring), TP12 (IPv6), TP13 (Spaß). +1. ~~**Jetzt:** TP1 (GE8) → TP2 (Omada Controller).~~ ✅ erledigt 2026-06-15. +2. **Jetzt: TP4 (Router-Cutover)** — vorgezogen, weil Profile-Fix + VLAN-Segmentierung darauf warten. + TP3-Voraussetzung entfällt (WLAN bleibt vorerst an FB hängen). +3. **Nach TP4:** Omada-Profile finalisieren (PVID 10/20, untagNetworkIds bereinigen) + IP-Migration NAS/macmini/pve. +4. **Dann:** TP5 (Firewall) → TP6 (QoS) → TP7 (mDNS) → TP3 (WLAN/CAPsMAN). Disruptiv, aber TP4 macht den Weg frei. +5. **Nachgelagert/Research-getrieben:** TP8 (Access), TP9 (HA), TP10 (VPN), TP11 (Monitoring), TP12 (IPv6), TP13 (Spaß). diff --git a/memory/project_tp2_topology.md b/memory/project_tp2_topology.md index 0df71e7..8967150 100644 --- a/memory/project_tp2_topology.md +++ b/memory/project_tp2_topology.md @@ -1,43 +1,68 @@ --- name: project-tp2-topology -description: TP2 Omada Switch + Controller — finale IPs, Portplan, API-Gotchas, offene TP3-Abhängigkeiten +description: TP2 Omada Switch + Controller — IPs, Portplan, API-Zugang, Profile-Constraint, TP4 vorgezogen metadata: type: project --- -TP2 ✅ abgeschlossen 2026-06-15. Omada ES208G (sw2) adopted, VLANs + Port-Profiles aktiv. +TP2 ✅ abgeschlossen 2026-06-15. Omada ES208G (sw2) adopted, VLANs + Port-Profile aktiv. +Profile haben bekannten Fehler (PVID=1, untagNetworkIds-Chaos) — Fix nach TP4. **Finale IPs:** - omada-controller: 10.40.41.175 (DS923/macvlan, mbentley 6.2.10.17) - omada-mcp: 10.40.41.176 (pve-LXC endpointId=2, ipvlan, Stack 200) - pve-mcp: 10.40.41.173 (SSE) -- sw2 (ES208G): 10.40.41.12 (adopted, FW 1.0.2 Build 20260329) +- sw2 (ES208G): 10.40.41.12 (adopted, FW 1.0.2 Build 20260329, MAC A8-29-48-EE-B9-04) -**Omada Open API Gotcha:** -- Token-Request: POST /openapi/authorize/token?grant_type=client_credentials (query param!), JSON body: {client_id, client_secret, omadacId} -- Auth-Header: `Authorization: AccessToken=` (NICHT `Bearer`) -- URL-Format: `{base}/openapi/v1/{omadacId}/sites/{siteId}/...` -- omada-mcp Settings-Bug war: doppelter "omada-mcp"-Eintrag in ~/.claude/settings.json (zweiter überschreibt ersten — fixed) +**Controller-API (intern, v2) — für Writes:** +- Login: POST `/{omadacId}/api/v2/login` mit JSON `{username, password}` → token +- Requests: Header `Csrf-Token: ` (Cookie-Session wird mitgeführt) +- Switches: GET `/sites/{siteId}/switches/{MAC}/ports` → alle 8 Ports inkl. VLAN-Config +- Networks: GET `/sites/{siteId}/setting/lan/networks?currentPage=1¤tPageSize=20` +- Creds: christoph@emsenhuber.com / in omada/.secrets NICHT gespeichert (nur Switch-Creds dort) + +**Omada Open API Gotcha (für MCP/Read):** +- Token: POST /openapi/authorize/token?grant_type=client_credentials, JSON body: {client_id, client_secret, omadacId} +- Auth-Header: `Authorization: AccessToken=` (NICHT Bearer) +- URL: `{base}/openapi/v1/{omadacId}/sites/{siteId}/...` +- Port-Profile NICHT in Open API — nur in v2-intern oder Controller-UI **Omada-MCP Tools:** - 84 read-only Tools, OMADA_TOOL_CATEGORIES=all -- Write (VLAN/Ports) NICHT im MCP implementiert — direkte Open API oder Controller-UI nötig -- ES-Switch-Pfad: /sites/{siteId}/switches/es/{mac} (nicht /esSwitches/) +- Write NICHT im MCP — direkte v2-API oder Controller-UI .175:8043 -**Port-Plan ES208G (final):** -- Port 1 (uplink) → Trunk-ALL → ALLNET GE8 -- Port 2 (ap2) → Trunk-ALL → hAP ax² #2 -- Port 3 → Access-MAIN -- Port 4 (dock/monitor) → Access-INFRA -- Port 5 (drucker) → Access-MAIN -- Port 6 → Access-MAIN -- Port 7 (macmini) → Access-INFRA -- Port 8 (ds923+) → Access-MAIN (2. NAS-Port, absichtlich MAIN) +**Network-IDs (VLAN-Mapping):** +- `6a2fe68fa33b9c62b13680f0` → Default (VLAN 1) +- `6a300883a33b9c62b136950d` → MAIN (VLAN 10) +- `6a3008a3a33b9c62b1369511` → INFRA (VLAN 20) +- `6a3008c2a33b9c62b1369515` → IOT (VLAN 30) +- `6a3008e1a33b9c62b1369519` → MEDIA (VLAN 40) +- `6a300903a33b9c62b1369521` → UNTRUSTED (VLAN 50) +- `6a30091ea33b9c62b1369525` → GUEST (VLAN 90) +- `6a300939a33b9c62b136952b` → MGMT (VLAN 99) +- `6a30097fa33b9c62b1369534` → WAN (VLAN 100) -**VLANs im Controller:** -VLAN 1 (Default, status=true/mgmt), 10 MAIN, 20 INFRA, 30 IOT, 40 MEDIA, 50 UNTRUSTED, 90 GUEST, 99 MGMT, 100 WAN -Alle status=false (kein Mgmt-IP konfiguriert) → normal, L3 kommt in TP4. +**Port-Plan ES208G (Stand 2026-06-15):** +- P1 (uplink) → Trunk-ALL (6a300b5b…) → ALLNET GE8 ✅ +- P2 (ap2) → Trunk-ALL → hAP ax² #2 ✅ +- P3 (Port3) → Access-MAIN (6a300ba6…) — PVID=1 ⚠️, sicher zum Testen +- P4 (dock/monitor) → Access-MAIN — PVID=1 ⚠️, **LIFELINE-PORT, nicht ändern** +- P5 (drucker) → Access-MAIN — PVID=1 ⚠️, sicher zum Testen +- P6 (Port6) → Access-MAIN — PVID=1 ⚠️, sicher zum Testen +- P7 (macmini) → Access-INFRA (6a3015e6…) — PVID=1 ⚠️, **fixe IP, nicht ändern** +- P8 (ds923+) → Access-MAIN — PVID=1 ⚠️, **NAS, nicht ändern** -**Why:** Traffic noch auf VLAN 1, weil TP4 (Router-Cutover, L3-Interfaces auf hAP) aussteht. +**Bekannte Fehler in Profilen (Analyse via v2-API):** +- Access-MAIN: nativeNetworkId=VLAN1 (sollte 10), untagNetworkIds=[VLAN1, VLAN20, VLAN10] (sollte [VLAN10]) +- Access-INFRA: nativeNetworkId=VLAN1 (sollte 20), untagNetworkIds=[VLAN20, VLAN1] (sollte [VLAN20]) +- Folge: Geräte senden ungetaggt → VLAN 1, aber empfangen Traffic aus mehreren VLANs ungetaggt -**How to apply:** Bei TP3/TP4 Arbeiten: omada-mcp read-only für Status; Writes via Open API (curl mit AccessToken= Header) oder Controller-UI .175:8043. +**PVID-Constraint (Kern-Blocker für Profile-Fix):** +NAS, Mac mini, pve etc. haben fixe IPs in 10.40.41.x (VLAN-1-Range der FritzBox). +Umbau auf PVID=10/20 bricht Konnektivität bis DHCP-Server auf diesen VLANs existiert (TP4). +Fix: nach TP4 gemeinsam mit IP-Migration aller Infra-Geräte auf 10.40.10.x/10.40.20.x. + +**Why:** TP4 (Router-Cutover) ist vorgezogen — Blocker für Profiles und echte VLAN-Segmentierung. + +**How to apply:** Bei TP4: L3-Interfaces + DHCP-Server auf ap1 anlegen, DANN Omada-Profile korrigieren. +Port-IDs für v2-API-Writes: /sites/6a2fe68e…/switches/A8-29-48-EE-B9-04/ports/{portId}