From c51704fd8463c72e335962b4a5626943fe5b10a9 Mon Sep 17 00:00:00 2001 From: Christoph Emsenhuber Date: Fri, 10 Jul 2026 09:46:59 +0200 Subject: [PATCH] =?UTF-8?q?docs=20=F0=9F=93=84=20TP14=20angelegt:=20Host/C?= =?UTF-8?q?ontainer-IP-Migration=20VLAN1=E2=86=92VLAN20=20(NAS=20=E2=9C=85?= =?UTF-8?q?,=20pve=20=F0=9F=94=9C)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - teilprojekte.md: neuer TP14 (Docker-Cutover NAS+pve) + Querverweise TP11 (Track-B/C) + Reihenfolge #3. - NAS ep14 ✅ auf vlan20-Macvlan; CF-Ingress v116; Root-Cause Config-Only-Macvlan-Falle dokumentiert. - Handoff docs/nas-vlan20/handoff/README.md: paste-fertige Anschlussstatements Session A–E (sequenzielle Sessions, keine parallelen Branches — geteilte Live-Infra). Co-Authored-By: Claude Opus 4.8 --- docs/nas-vlan20/handoff/README.md | 72 +++++++++++++++++++++++++++++++ docs/teilprojekte.md | 15 +++++-- 2 files changed, 84 insertions(+), 3 deletions(-) create mode 100644 docs/nas-vlan20/handoff/README.md diff --git a/docs/nas-vlan20/handoff/README.md b/docs/nas-vlan20/handoff/README.md new file mode 100644 index 0000000..0b2e1bc --- /dev/null +++ b/docs/nas-vlan20/handoff/README.md @@ -0,0 +1,72 @@ +# TP14 — Übergabestatements für neue Sessions + +Steuerung: `docs/teilprojekte.md` → **TP14**. Runbook: `docs/nas-vlan20/RUNBOOK.md`. +Reihenfolge: **A → B → C → (D jederzeit nach Token-Scope) → E zuletzt.** +Entscheidung: **sequenzielle Sessions, keine parallelen Branches** (geteilte Live-Infra: 1× NAS, +1× pve-LXC, 1× CF, 1× ap1 → Branches isolieren nur Repo-Files, nicht Infra-State → Kollisionsrisiko). + +Portainer-API `https://10.40.41.126:9443` (nach TP14-Session-B → `.20.126`), Key `mcp/portainer/.env`. +Transform-Regeln + Scratch-Skripte: Runbook §„Transform-Regeln". Stack-Files (mit Secrets, gitignored): +`docs/nas-vlan20/stacks/`. Mapping-Regel durchgehend: **letztes Oktett behalten, `.41→.20`.** + +--- + +## Session A — NAS fertigstellen +Kontext: NAS(ep14) ist auf `vlan20`-Macvlan migriert (DSM `.20.10`). Container teils exited. +Aufgabe: +1. Restcontainer starten/redeployen aus `docs/nas-vlan20/stacks/`: **oc-stack(112)** (prometheus/ + alertmanager/node-exporter), **default(72)** (hms-mqtt), **nginx(101)** (dashboard-web), + **oc-central(160)**, **oc-charlie(158)**, **oc-johnny2(150)**. +2. **gitea(111)** deployen → `.20.157`; ⚠️ `GITEA__database__HOST` `.20.23` verifizieren (Rewrite-Annahme). +3. **drawio(107)** mit `transform.py` auf vlan20 bringen (`.20.139`) → deployen. +4. **pve-mcp NEU als Stack** (vlan20-only): Spec `docs/nas-vlan20/inspect_pve-mcp.json` — image + `ghcr.io/samik081/mcp-pve:latest`, `PVE_BASE_URL=https://10.40.41.100:8006`, `MCP_PORT=3000`, + `MCP_HOST=0.0.0.0`, `MCP_TRANSPORT=http`; Netz `vlan20` `ipv4_address: 10.40.20.173`. Danach + `~/.claude.json` pve-mcp-URL `.41.173→.20.173`. +5. **omada-controller Inform-Adresse** (UI `https://10.40.20.175:8043`) → `10.40.20.175`, sonst sw2 down. +Verifikation: `pt.py containers` alle `running`/`.20.x`; von `.41`-Host (gw ap1) `curl`/`ping` auf `.20`-IP; +Tunnel `curl -m8 -w %{http_code} https://.emsenhuber.net/` → 200/302. + +## Session B — pve-Docker-LXC (.126) → VLAN20 (⚠️ ipvlan, nicht macvlan!) +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. +Aufgabe: +1. ep2-Stacks (`adguard`, `omada-mcp`) transformieren `.41→.20` (omada-mcp `OMADA_URL` `.41.175→.20.175`). +2. Portainer-Zugangspfad für den Move sichern (URL wandert auf `https://10.40.20.126:9443`). +3. LXC in Proxmox auf VLAN20 taggen + IP `.126→.20.126`. +4. `default_external`(ipvlan) weg → `vlan20`(ipvlan) neu: `-d ipvlan --subnet 10.40.20.0/24 + --gateway 10.40.20.1 -o parent=eth0`. Container erst entfernen (`v=false`), dann Netz, dann Stacks redeploy. +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. + +## Session C — Dormante Stacks vlan20-tauglich + Referenz-Sweep +Aufgabe: +1. `transform.py` auf dormante ep14-Stacks: core(43), openclaw(92), openclaw2(97), oc20260307(119), + openspeedtest(74), speedtest_tracker(80), technikscheiss(42) → `.new`-Files (nicht zwingend deployen; + 42/43 waren `default_internal`→wird vlan20-only). +2. Referenz-Sweep `.41→.20` für gewanderte Hosts: **ap1 bf.lan-DNS** (MikroMCP `manage_dns_entry`, + ap1-Mgmt via `10.40.10.1` — s. Memory `ref_ap1_mgmt_access_vlan10`), **CLAUDE.md**, **`~/.claude.json`** + (omada-mcp `.20.176`, pve-mcp `.20.173`), **`docs/ip-plan.md`**, **CF-Ingress-Rest**. SSoT `docs/cf-tunnel-mapping.md`. + +## Session D — CF-Access-Profil für Claude (nicht cutoff-kritisch) +Kontext: `*.emsenhuber.net`-Access-App hat Policy `claude-mcp` (service_token) bereits; Secret fehlt lokal. +CF-Token „claude code mcp" hat jetzt **`Access: Service Tokens: Write`+`Read`** (User bestätigt 2026-07-10). +Aufgabe: `claude-mcp` rotieren (`POST /accounts/{acct}/access/service_tokens/{id}/rotate`) → `CF_ACCESS_CLIENT_ID`/ +`CF_ACCESS_CLIENT_SECRET` in `mcp/cloudflare/.env` (chmod600) → dokumentieren. Details: Memory `ref-cf-access-claude-profile`. + +## Session E — TP5-Firewall (ZULETZT) +Erst wenn ALLE Origins/Connectoren in VLAN20 (nach A+B+C). Least-Privilege je VLAN; Deny-by-default fertigziehen. + +--- + +## Kritische Gotchas (gelten für alle Sessions) +- Macvlan/ipvlan-Parent **exklusiv** → altes `default_external` MUSS weg, bevor `vlan20` anlegbar. +- **Host↔eigene-Macvlan-Isolation:** ein Connector auf demselben Host erreicht dessen Macvlan-Container NICHT + → Connector muss auf anderem Host in VLAN20 laufen (darum pve-LXC → VLAN20). +- **Portainer lebt im pve-LXC** → dessen Move ändert die Mgmt-URL; Zugang vorher sichern. +- **Container-Removal unkritisch** (Stack-Def + Ownership bleiben); **Recreate via API** macht admin-owned → + besser via Stack-Redeploy (bleibt User-owned). `v=false` = Volumes bleiben. +- Portainer-Macvlan-Assistent legt bei nur Schritt 1 ein **Config-Only-Netz** an (`Driver:null`) → echtes + Netz nur per API in einem Schritt anlegen. diff --git a/docs/teilprojekte.md b/docs/teilprojekte.md index 638b865..2a64b6f 100644 --- a/docs/teilprojekte.md +++ b/docs/teilprojekte.md @@ -271,8 +271,8 @@ FT kaschierte das bisher als „Roaming" statt „schwache Abdeckung". - MikroMCP + omada-mcp + **SNMP/icinga-mikrotik**, RoMON, NTP, **E-Mail-Alerts**, Netwatch. → Teil von `docs/research/routeros-capabilities.md`. - **CF-Tunnel #1033 Track A ✅ live (2026-06-30):** Round-Robin-1033er über 3 asymmetrische Connectors behoben durch Reduktion auf pve-only Connector (NAS + macmini scheiterten an pve-lokalen/stalen Origins). SSoT: - `docs/cf-tunnel-mapping.md`. Track B/C (HA-Connector-Pair pve+NAS in VLAN 20, Origins-Repoints) wartet auf - CF-MCP-Write-Reauth und wird mit der IP-Migration (nach Omada-PVID-Fix) gebündelt. + `docs/cf-tunnel-mapping.md`. **Track B/C läuft über TP14** (Ingress bereits v116 .41→.20 für NAS; + pve-Connector→VLAN20 via TP14 Session B = #1033-Zielbild). ### TP12 — IPv6 (intern + extern, 3 Standorte) ▸ research-gated - Konzept für FM/BF/DW. → TP-R. @@ -280,6 +280,15 @@ FT kaschierte das bisher als „Roaming" statt „schwache Abdeckung". ### TP13 — „Botschafts-WLANs" ▸ fun, low-prio - Nutzlose SSIDs mit Botschaft („Kanal 500 bitte nicht nutzen"), offenes WLAN mit Captive-Portal das auf **statische Info-HTML** zeigt (Nachbarschafts-WLAN-Tuning, Auto-Kanalwechsel). Idee: wer's sieht, kann auch stören → Infoseite = beste Adresse. ⚠️ **Recht prüfen** (Impressum/TMG, Störerhaftung bei offenem WLAN — User privat). RouterOS-Hotspot/Captive-Portal kann das. +### TP14 — Host/Container-IP-Migration VLAN1→VLAN20 (Docker-Cutover NAS+pve) ▸ ⏳ WIP — `docs/nas-vlan20/RUNBOOK.md`, Handoff `docs/nas-vlan20/handoff/` +- ✅ **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). +- 🔜 **Session A — NAS-Rest:** Restcontainer starten (oc-stack/112, default/72, nginx/101, oc-central/160, oc-charlie/158, oc-johnny2/150); gitea(111)+drawio(107) deployen; **pve-mcp NEU als Stack** (`.20.173`, Spec `docs/nas-vlan20/inspect_pve-mcp.json`); omada-controller Inform-Adr → `10.40.20.175` (sonst sw2 „Disconnected"). +- 🔜 **Session B — pve-Docker-LXC (.126, ipvlan!):** `default_external`(ipvlan eth0)→`vlan20`(ipvlan); adguard .16/.17, omada-mcp .176 → `.20.x`; LXC-IP `.126→.20.126` (⚠️ Portainer-URL wandert). CF-Connector landet in VLAN20 = **löst TP11-Track-B/C** (#1033-Zielbild). +- 🔜 **Session C — Dormante Stacks vlan20-tauglich + Referenz-Sweep:** transform core/openclaw/openclaw2/oc20260307/openspeedtest/speedtest_tracker/technikscheiss; ap1 bf.lan-DNS + CLAUDE.md + `~/.claude.json` + `docs/ip-plan.md` .41→.20. +- 🔜 **Session D — CF-Access-Profil (nicht cutoff-kritisch):** CF-Token hat jetzt `Access: Service Tokens: Write` → `claude-mcp` rotieren → Secret in `mcp/cloudflare/.env`. Memory `ref-cf-access-claude-profile`. +- ⚠️ **Abh./Reihenfolge:** verzahnt mit Omada-PVID-Fix/IP-Migration (Reihenfolge #3); **TP5 ZULETZT** (erst wenn alle Origins/Connectoren in VLAN20). + ### TP-R — Router-Capabilities-Sweep ▸ FERTIG (`docs/research/routeros-capabilities.md`) - **Leitsatz: nativ vor Container, NAS vor Router** (128MB-Flash-Limit). - **Sofort nativ (~0 RAM):** RoMON · Netwatch · Scheduler + Auto-Backup/Mail · SNMP→externes Monitoring · **mDNS-Repeater** · spectral-scan · **CAPsMAN + 802.11r/k/v (Fast-Roaming statt Mesh)** · Back-to-Home/WireGuard. @@ -293,7 +302,7 @@ FT kaschierte das bisher als „Roaming" statt „schwache Abdeckung". ## Reihenfolge / Abhängigkeiten 1. ~~**TP1 (GE8) → TP2 (Omada Controller).**~~ ✅ erledigt 2026-06-15. 2. ~~**TP4 (Router-Cutover L3-Infra + WAN-Edge).**~~ ✅ erledigt 2026-06-15 (L3) + 2026-07-01 (Edge-Cutover, FB physisch weg). -3. **Jetzt: Omada-PVID-Fix** — Omada Access-Profile korrigieren (PVID 10/20, untagNetworkIds bereinigen, sicher P3/P5/P6 zuerst), dann IP-Migration NAS/macmini/pve auf VLAN-Subnetze + DNS-Einträge updaten. +3. **Jetzt: Omada-PVID-Fix** — Omada Access-Profile korrigieren (PVID 10/20, untagNetworkIds bereinigen, sicher P3/P5/P6 zuerst), dann IP-Migration NAS/macmini/pve auf VLAN-Subnetze + DNS-Einträge updaten. **IP-Migration NAS/pve = TP14** (NAS ✅ 2026-07-10, pve 🔜 Session B). 4. **Dann:** TP5 (Deny-by-default fertigziehen — Sonos-/HA-/mDNS-Holes + WAN-Input-Seal stehen bereits; **TP5.1 = DNS-Redirect + Live-Torch für Low-Trust-Geräte/Airfryer hängt dran**) → TP6 (QoS/CAKE). ~~TP7 (mDNS)~~ ✅ 2026-07-02 (inkl. HA/vlan20), ~~TP3 (WLAN/CAPsMAN)~~ ✅ 2026-06-18, ~~TP3.1 (ap2-VLAN-Trunk)~~ ✅ 2026-07-01, ~~TP3.2 (P750W/Discovery)~~ ✅ 2026-07-02, ~~Sonos-Migration~~ ✅ 2026-07-02 (alle 10 auf VLAN 40).