From 7636ea399fb2125ea719032ac06cee5eddbddb06 Mon Sep 17 00:00:00 2001 From: Christoph Emsenhuber Date: Fri, 10 Jul 2026 13:34:29 +0200 Subject: [PATCH] =?UTF-8?q?docs=20=F0=9F=93=84=20TP14.2=20=E2=9C=85=20pve-?= =?UTF-8?q?Docker-LXC=20(400)=20=E2=86=92=20VLAN20=20(#1033=20gel=C3=B6st)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit LXC 400 `docker` net0 tag=20/.20.126; Docker vlan20=ipvlan parent=veth20. omada-mcp .20.176 (OMADA_BASE_URL→.20.175), adguard .20.16/.17 — running/reachable. CF-Connector db713b30 jetzt VLAN20 → #1033-Zielbild (Tunnel healthy; portainer/gitea/vw 200). Refs .41→.20: mcp/portainer/.env, ~/.claude.json omada-mcp, CLAUDE.md, ip-plan, cf-tunnel-mapping. Gotchas: Proxmox-Token kein VM.Config.Network (Retag via UI); Iface heißt veth20 nicht eth0. Co-Authored-By: Claude Opus 4.8 --- CLAUDE.md | 10 +++++----- docs/cf-tunnel-mapping.md | 4 ++-- docs/ip-plan.md | 8 ++++---- docs/nas-vlan20/handoff/README.md | 13 ++++++++++++- docs/teilprojekte.md | 13 ++++++++----- 5 files changed, 31 insertions(+), 17 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index c495b39..ecfef29 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -33,10 +33,10 @@ GW je VLAN = `.1` · APs: ap1=`.1`, ap2=`.2` · Switches: ALLNET=`.11`, Omada=`. | hAP ax² #2 (ap2) | 10.40.41.2 | MikroMCP (live) · **Port 2 am Omada-Switch** | | NAS (nas-bf, DS923) | 10.40.41.10 | SSH · Docker (Portainer endpointId=14) | | Omada-Controller | 10.40.41.175 | `https://10.40.41.175:8043` (macvlan auf DS923) | -| omada-mcp | 10.40.41.176 | StreamableHTTP `http://10.40.41.176:3000/mcp` · MCP in Claude Code ✓ (pve-LXC) | +| omada-mcp | 10.40.20.176 | StreamableHTTP `http://10.40.20.176:3000/mcp` · MCP in Claude Code ✓ (pve-LXC) · **TP14.2 2026-07-10: .41→.20, OMADA_BASE_URL→.20.175** | | pve-mcp | 10.40.20.173 | **StreamableHTTP `http://10.40.20.173:3000/` (Root-Pfad, NICHT /sse)** · NAS-Stack ep14 id 202 (vlan20-only, TP14.1 2026-07-10) · `~/.claude.json` ✓ (wirkt nach Restart) | | Proxmox (pve) | 10.40.41.100 | kein SSH-Key konfiguriert | -| Docker-LXC (auf pve) | 10.40.41.126 | Portainer CE 2.40.0 (`https://10.40.41.126:9443`) | +| Docker-LXC (auf pve) | 10.40.20.126 | Portainer CE 2.40.0 (`https://10.40.20.126:9443`) · **TP14.2 2026-07-10: LXC 400 net0 tag=20/.20.126 (iface heißt jetzt `veth20`, NICHT eth0); Docker-Netz `vlan20`=ipvlan parent `veth20`; adguard_bf1 .20.16, adguard_fm2 .20.17** | | Mac mini | 10.40.41.167 | `ssh macmini` | | Arris-Kabelmodem | (Bridge-Mode, keine Mgmt-IP im BF-LAN) | Liwest-Edge, physisch an sw1 gi16 · **FritzBox 6660 seit 2026-07-01 komplett ausgebaut** (Liwest-Tausch, kein Zurück); Telefonie war auf der FB und wird nicht weitergeführt | @@ -48,9 +48,9 @@ GW je VLAN = `.1` · APs: ap1=`.1`, ap2=`.2` · Switches: ALLNET=`.11`, Omada=`. - **ALLNET-Switch:** kein MCP — nur Telnet-CLI (IOS-artig, FW 2.2.1). Runner: `cd ~/dev/bf-network-r6/switch && . ./.secrets && expect cli/run-cli.exp cli/.cli` Klickanleitungen in `switch/ui-guides/` für manuelle Schritte. -- **Omada-Switch:** Controller `https://10.40.41.175:8043` (TP2 ✅). Adoption ✅. Port-Config: manuell im Browser. - omada-mcp live auf pve-LXC (.176, StreamableHTTP /mcp, MCP in Claude Code ✓). -- **Docker-Management:** Portainer API `https://10.40.41.126:9443`, Key in `mcp/portainer/.env`. +- **Omada-Switch:** Controller `https://10.40.20.175:8043` (TP2 ✅). Adoption ✅. Port-Config: manuell im Browser. + omada-mcp live auf pve-LXC (.20.176, StreamableHTTP /mcp, MCP in Claude Code ✓). +- **Docker-Management:** Portainer API `https://10.40.20.126:9443`, Key in `mcp/portainer/.env`. Ablösung durch Komodo (native MCP) geplant. --- diff --git a/docs/cf-tunnel-mapping.md b/docs/cf-tunnel-mapping.md index 40ef731..03abc91 100644 --- a/docs/cf-tunnel-mapping.md +++ b/docs/cf-tunnel-mapping.md @@ -20,7 +20,7 @@ Fingerprint via Colo-Locations (CF-API ↔ lokale cloudflared-Logs) + Arch. | CF-Connector | arch | Host (Portainer) | LAN-IP | Docker-Netz | Vantage | |---|---|---|---|---|---| | `1856dfc3-…` | arm64 | **macmini** (ep20) | 10.40.20.167 | **bridge** `cloudflared_default` | **VLAN20** | -| `db713b30-…` | amd64 | **pve-LXC** (ep2) | 10.40.41.126 | host | VLAN1/.41 | +| `db713b30-…` | amd64 | **pve-LXC** (ep2) | 10.40.20.126 | host | **VLAN20** (TP14.2 2026-07-10 → #1033-Zielbild) | | `d7454e68-…` | amd64 | **nas-bf DS923** (ep14) | 10.40.41.10 | host | VLAN1/.41 | Alle 3 fahren **denselben Tunnel-Token** (`tunnel run`, token-managed Ingress im Dashboard). @@ -51,7 +51,7 @@ Quelle: macmini aktiv geprobt; pve/NAS aus echten cloudflared-Fehler-Logs (tail | gitea | http://10.40.41.157:3000 | OK | ? | OK | ok (macmini transient) | | nginx-bf | http://10.40.41.123:81 | OK | ? | OK | ok | | ds-bf | http://10.40.41.10:8080 | OK | OK | OK | ok | -| portainer | https://10.40.41.126:9443 | OK(self) | ? | OK | ok | +| portainer | https://10.40.20.126:9443 | OK | OK | OK | TP14.2: Origin .41→.20.126; Tunnel-Smoke 200 | | grafana | http://10.40.41.109:3000 | ? | ? | OK | ok | | pve-mcp | http://10.40.41.173:3000 | ? | ? | OK | ok | | gateway-bf | http://10.40.41.254 | OK | ? | OK | ok (FB) | diff --git a/docs/ip-plan.md b/docs/ip-plan.md index a0e3f3a..60e3152 100644 --- a/docs/ip-plan.md +++ b/docs/ip-plan.md @@ -23,10 +23,10 @@ | sw1 ALLNET (Core) | 10.40.41.11 | Switch-Mgmt | 99 MGMT | `10.40.99.11` | ⬜ | Mgmt-VLAN-Wechsel = Lockout-Risiko, sorgsam | | sw2 Omada (ES208G) | 10.40.41.12 | Switch-Mgmt | 99 MGMT | `10.40.99.12` | ⬜ | | | NAS nas-bf (DS923) | 10.40.41.10 | INFRA | 20 INFRA | `10.40.20.10` | ⬜ | 🔴 **Geblockt:** CF Zero Trust angepasst + TP10 (VPN auf ap1) abgeschlossen | -| Omada-Controller | 10.40.41.175 | Service (macvlan/DS923) | 20 INFRA | `10.40.20.175` | ⬜ | 🔴 **Geblockt:** macvlan auf DS923 → folgt NAS (gleicher Block) | -| omada-mcp | 10.40.41.176 | Service (pve-LXC) | 20 INFRA | `10.40.20.176` | ⬜ | ⚠️ Mgmt-Ebene | -| pve-mcp | 10.40.41.173 | Service (pve) | 20 INFRA | `10.40.20.173` | ⬜ | ⚠️ Mgmt-Ebene | -| Docker-LXC | 10.40.41.126 | Docker-Host (pve) | 20 INFRA | `10.40.20.126` | ⬜ | Portainer/Komodo | +| Omada-Controller | 10.40.20.175 | Service (macvlan/DS923) | 20 INFRA | `10.40.20.175` | ✅ **live** | TP14.1: läuft auf vlan20 (mbentley 6.2); ⏸️ Inform-Adr./sw2-readopt vertagt (Login) | +| omada-mcp | 10.40.20.176 | Service (pve-LXC) | 20 INFRA | `10.40.20.176` | ✅ **live** | TP14.2 2026-07-10; OMADA_BASE_URL→.20.175 | +| pve-mcp | 10.40.20.173 | Service (pve) | 20 INFRA | `10.40.20.173` | ✅ **live** | TP14.1; NAS-Stack (vlan20-only) | +| Docker-LXC | 10.40.20.126 | Docker-Host (pve) | 20 INFRA | `10.40.20.126` | ✅ **live** | TP14.2 2026-07-10: LXC 400 net0 tag=20; Docker `vlan20`=ipvlan parent `veth20` | | Proxmox pve | 10.40.41.100 | Hypervisor+INFRA | 20 INFRA | `10.40.20.100` | ⬜ | User: Hypervisor zählt zu INFRA (wie DS923) | | Mac mini | 10.40.41.167 | INFRA/Server | 20 INFRA | `10.40.20.167` | ✅ **live** | umgezogen; Omada P7 + Access-INFRA (VLAN20, ohne VLAN1) ✅ | | FritzBox 6660 | 10.40.41.254 | WAN/Transfer | bleibt VLAN1/Transfer | `10.40.41.254` | ⬜ | wird Modem nach Bridge (TP10) | diff --git a/docs/nas-vlan20/handoff/README.md b/docs/nas-vlan20/handoff/README.md index 7d51e29..00289d8 100644 --- a/docs/nas-vlan20/handoff/README.md +++ b/docs/nas-vlan20/handoff/README.md @@ -46,7 +46,17 @@ Verifikation: `pt.py containers` alle `running`/`.20.x`; von `.41`-Host (gw ap1) Tunnel `curl -m8 -w %{http_code} https://.emsenhuber.net/` → 200/302. -## TP14.2 — Session B: pve-Docker-LXC (.126) → VLAN20 (⚠️ ipvlan, nicht macvlan!) +## TP14.2 — Session B: pve-Docker-LXC (.126) → VLAN20 ✅ DURCH (2026-07-10) +**Ergebnis:** LXC 400 (`docker`) net0 `tag=20 / 10.40.20.126/24 / gw .20.1`; Docker `vlan20`=ipvlan +**`parent=veth20`** (⚠️ in-Container-Iface heißt jetzt `veth20`, nicht eth0 — UI-Namensfeld). Container: +omada-mcp `.20.176` (OMADA_BASE_URL→`.20.175`), adguard_bf1 `.20.16`, adguard_fm2 `.20.17` — alle running/reachable. +CF-Connector `db713b30` jetzt VLAN20 → **#1033-Zielbild gelöst** (Tunnel healthy; portainer/gitea/vw 200). +Refs nachgezogen: `mcp/portainer/.env`, `~/.claude.json` omada-mcp, CLAUDE.md, ip-plan, cf-tunnel-mapping. +**⚠️ Gotcha:** Proxmox-Token `claude@pam!claude` hat **kein `VM.Config.Network`** → Retag muss Christoph +(UI) machen; Reboot danach via API (`VM.PowerMgmt` vorhanden). Transf. Files: `stacks/{195-adguard,200-omada-mcp}.yml`. + +
Original-Aufgabe (erledigt) + Kontext: pve-LXC(ep2) hängt auf `.41`, Netz `default_external` = **ipvlan** parent `eth0`: omada-mcp `.176`, adguard_bf1 `.16`, adguard_fm2 `.17`. **Portainer-Server + aktiver CF-Connector laufen hier.** ⚠️ Reihenfolge kritisch. @@ -59,6 +69,7 @@ Aufgabe: 5. `mcp/portainer/.env` + `PORTAINER_URL` + CF-Ingress (portainer `.20.126`) nachziehen. Ergebnis: CF-Connector in VLAN20 = **#1033-Zielbild** (TP11-Track-B/C erledigt). Verifikation: Portainer unter neuer URL, ep2-Container `.20.x`, Tunnel healthy, pve-lokale Origins (pve-Host `.41.100`) noch erreichbar. +
## TP14.3 — Session C: Dormante Stacks vlan20-tauglich + Referenz-Sweep Aufgabe: diff --git a/docs/teilprojekte.md b/docs/teilprojekte.md index 7a4bf70..4ef985f 100644 --- a/docs/teilprojekte.md +++ b/docs/teilprojekte.md @@ -284,7 +284,8 @@ FT kaschierte das bisher als „Roaming" statt „schwache Abdeckung". - ✅ **NAS (DS923, ep14) migriert (2026-07-09/10):** Docker von `default_external` (macvlan .41) auf **ein** `vlan20`-Macvlan (10.40.20.0/24, gw .1, parent `ovs_eth0`); DSM-Cutover `.20.10`; Portainer-Endpoint `.20.10:9001`. **Root-Cause der Dauerfehler** = Portainer **Config-Only-Macvlan-Falle** (`Driver:null`, kein Container-Attach) + Macvlan-Parent-Exklusivität (`default_external` muss weg für `vlan20`) + `default_internal` (172.18) weg. Container laufen auf `.20.x`. - ✅ **CF-Ingress v116 (2026-07-10):** 6 NAS-Origins .41→.20 (SSoT `docs/cf-tunnel-mapping.md` §8); `vw` 200 via Tunnel = pve→VLAN20-Routing steht (502 direkt nach Ingress-PUT = transient). - ⚠️ **Abh./Reihenfolge:** verzahnt mit Omada-PVID-Fix/IP-Migration (Reihenfolge #3); Sessions = Sub-TPs **TP14.1–14.5**, sequenziell A→B→C→(D jederzeit)→E, **keine parallelen Branches** (geteilte Live-Infra). Anschlussstatements: `docs/nas-vlan20/handoff/README.md`. -- ✅ **TP14.1 (Session A) durch 2026-07-10:** alle ep14-Container auf vlan20 + pve-mcp neu; nur Omada-Inform-Adresse offen (Controller-UI-Task, s.u.). Nächste Session = **TP14.2 (Session B, pve-LXC → VLAN20, ⚠️ ipvlan)**. +- ✅ **TP14.1 (Session A) durch 2026-07-10:** alle ep14-Container auf vlan20 + pve-mcp neu; nur Omada-Inform-Adresse offen (Controller-UI-Task, s.u.). +- ✅ **TP14.2 (Session B) durch 2026-07-10:** pve-LXC (400/`docker`) auf VLAN20 (.20.126, ipvlan `parent=veth20`); omada-mcp/adguard→.20.x; CF-Connector jetzt VLAN20 = **#1033 gelöst**. Nächste Session = **TP14.3 (Session C, dormante Stacks + Referenz-Sweep ap1-DNS)**. ### TP14.1 — Session A: NAS fertigstellen ▸ ✅ DURCH (2026-07-10); Omada-Inform/sw2 VERTAGT - ✅ **Alle ep14-Container auf vlan20 redeployed + verifiziert running/.20.x** (via Portainer-Stack-Redeploy, Env preserved, Volumes intakt): oc-stack(112 → prometheus `.151`/node-exporter `.154`/grafana `.109`), default(72 → hms-mqtt `.124`), nginx(101 → dashboard-web `.148`), oc-central(160 → qdrant `.159`), oc-charlie(158 → `.162`+cf), oc-johnny2(150 → `.161`+cf), gitea(111 → `.157`, DB `.20.23:3306` erreichbar ✓), drawio(107 → `.139`, intern; CF-CNAME war eh gelöscht). @@ -295,10 +296,12 @@ FT kaschierte das bisher als „Roaming" statt „schwache Abdeckung". - ⏸️ **VERTAGT — omada-controller Inform-Adresse → `10.40.20.175` + sw2 re-adopt** (2026-07-10): **Login an der Controller-UI `https://10.40.20.175:8043` schlägt fehl** (Christoph kommt nicht rein) → Recovery blockiert, verschoben. **Unkritisch:** sw2 „Disconnected" ist reiner Management-Loss — sw2 (ES208G Easy-Managed) switcht mit letzter Config weiter, Netz läuft (Live-Traffic bestätigt). Kein Auto-Fix: Open API hat kein Inform/Hostname-Setting, kein Controller-Admin-Login lokal, **sw2 = statische IP `.41.12` → keine DHCP-Option-138-Recovery**. **Wenn Login wieder geht:** UI → Settings → Controller → „Controller Hostname/IP" = `10.40.20.175`, dann sw2 forget+re-adopt (L3-Discovery). Vorher **Controller-Login klären** (Passwort-Reset / Recovery — Creds liegen nicht lokal). - 🐞 **Gotcha gefunden:** Portainer-Stack 111 (gitea) hatte den `vlan20`-Networks-Block **auskommentiert** (Vorsession-Artefakt) → Container landete auf `gitea_default`/172.18. Fix = Redeploy mit Disk-File `docs/nas-vlan20/stacks/111-gitea.yml` als Override. -### TP14.2 — Session B: pve-Docker-LXC (.126) → VLAN20 ▸ 🔜 TODO (⚠️ ipvlan, nicht macvlan!) -- ep2-Stacks (`adguard`, `omada-mcp`) transformieren `.41→.20` (adguard .16/.17, omada-mcp .176; `OMADA_URL`→`.20.175`). -- LXC in Proxmox auf VLAN20 taggen + IP `.126→.20.126` (⚠️ **Portainer-URL wandert** — Zugang vorher sichern; `mcp/portainer/.env`+`PORTAINER_URL` nachziehen). -- `default_external`(ipvlan eth0) weg → `vlan20`(ipvlan, `-o parent=eth0`) neu. Ergebnis: CF-Connector in VLAN20 = **löst TP11-Track-B/C** (#1033-Zielbild). +### TP14.2 — Session B: pve-Docker-LXC (.126) → VLAN20 ▸ ✅ DURCH (2026-07-10) (ipvlan) +- ✅ ep2-Container auf `vlan20`: **omada-mcp `.20.176`** (OMADA_BASE_URL→`.20.175`), **adguard_bf1 `.20.16`**, **adguard_fm2 `.20.17`** — alle running/reachable (health 200, adguard 302). Transf. Files `docs/nas-vlan20/stacks/{195-adguard,200-omada-mcp}.yml`. +- ✅ LXC 400 (`docker`) net0 → `tag=20, ip=10.40.20.126/24, gw=10.40.20.1` (⚠️ **Retag brauchte Christoph** — Token `claude@pam!claude` hat kein `VM.Config.Network`; UI-Edit, dann Reboot via API mit `VM.PowerMgmt`). Portainer wandert auf `https://10.40.20.126:9443`. +- 🐞 **Gotcha: in-Container-Iface heißt jetzt `veth20`, NICHT `eth0`** (UI setzte Name analog net1=veth16) → Docker `vlan20`=ipvlan **`parent=veth20`** (nicht eth0 wie im Runbook). cloudflared(host)/portainer(bridge) unberührt. +- ✅ **CF-Connector `db713b30` jetzt in VLAN20** (Tunnel `bf.emsenhuber.net` healthy/8 conns) = **löst TP11-Track-B/C** (#1033-Zielbild). Ingress `portainer` .41.126→.20.126. Smoke: portainer/gitea/vw 200, grafana 302. +- ✅ Refs nachgezogen: `mcp/portainer/.env` (PORTAINER_URL), `~/.claude.json` (omada-mcp `.20.176`), CLAUDE.md, `docs/ip-plan.md`, `docs/cf-tunnel-mapping.md`. Next = **TP14.3 (Session C, dormante Stacks + Referenz-Sweep ap1-DNS)**. ### TP14.3 — Session C: Dormante Stacks vlan20-tauglich + Referenz-Sweep ▸ 🔜 TODO - `transform.py` auf core(43)/openclaw(92)/openclaw2(97)/oc20260307(119)/openspeedtest(74)/speedtest_tracker(80)/technikscheiss(42) → `.new` (42/43 waren `default_internal` → vlan20-only).