docs 📄 TP14 in Sub-TPs gegliedert (TP14.1–14.5 = Sessions A–E)
- teilprojekte.md: TP14 Parent (✅ NAS + CF-Ingress) + Sub-TPs TP14.1 (NAS-Rest), 14.2 (pve-LXC/ipvlan), 14.3 (dormante Stacks + DNS-Sweep), 14.4 (CF-Access-Profil), 14.5 (Freigabe-Gate → TP5). Analog zu TP3.1/3.2-Muster. - Handoff-README-Headings auf TP14.x-Nummern gezogen (Konsistenz). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -11,7 +11,7 @@ Transform-Regeln + Scratch-Skripte: Runbook §„Transform-Regeln". Stack-Files
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Session A — NAS fertigstellen
|
## TP14.1 — Session A: NAS fertigstellen
|
||||||
Kontext: NAS(ep14) ist auf `vlan20`-Macvlan migriert (DSM `.20.10`). Container teils exited.
|
Kontext: NAS(ep14) ist auf `vlan20`-Macvlan migriert (DSM `.20.10`). Container teils exited.
|
||||||
Aufgabe:
|
Aufgabe:
|
||||||
1. Restcontainer starten/redeployen aus `docs/nas-vlan20/stacks/`: **oc-stack(112)** (prometheus/
|
1. Restcontainer starten/redeployen aus `docs/nas-vlan20/stacks/`: **oc-stack(112)** (prometheus/
|
||||||
@@ -27,7 +27,7 @@ Aufgabe:
|
|||||||
Verifikation: `pt.py containers` alle `running`/`.20.x`; von `.41`-Host (gw ap1) `curl`/`ping` auf `.20`-IP;
|
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://<host>.emsenhuber.net/` → 200/302.
|
Tunnel `curl -m8 -w %{http_code} https://<host>.emsenhuber.net/` → 200/302.
|
||||||
|
|
||||||
## Session B — pve-Docker-LXC (.126) → VLAN20 (⚠️ ipvlan, nicht macvlan!)
|
## TP14.2 — Session B: pve-Docker-LXC (.126) → VLAN20 (⚠️ ipvlan, nicht macvlan!)
|
||||||
Kontext: pve-LXC(ep2) hängt auf `.41`, Netz `default_external` = **ipvlan** parent `eth0`:
|
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
|
omada-mcp `.176`, adguard_bf1 `.16`, adguard_fm2 `.17`. **Portainer-Server + aktiver CF-Connector laufen
|
||||||
hier.** ⚠️ Reihenfolge kritisch.
|
hier.** ⚠️ Reihenfolge kritisch.
|
||||||
@@ -41,7 +41,7 @@ Aufgabe:
|
|||||||
Ergebnis: CF-Connector in VLAN20 = **#1033-Zielbild** (TP11-Track-B/C erledigt). Verifikation: Portainer
|
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.
|
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
|
## TP14.3 — Session C: Dormante Stacks vlan20-tauglich + Referenz-Sweep
|
||||||
Aufgabe:
|
Aufgabe:
|
||||||
1. `transform.py` auf dormante ep14-Stacks: core(43), openclaw(92), openclaw2(97), oc20260307(119),
|
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;
|
openspeedtest(74), speedtest_tracker(80), technikscheiss(42) → `.new`-Files (nicht zwingend deployen;
|
||||||
@@ -50,13 +50,13 @@ Aufgabe:
|
|||||||
ap1-Mgmt via `10.40.10.1` — s. Memory `ref_ap1_mgmt_access_vlan10`), **CLAUDE.md**, **`~/.claude.json`**
|
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`.
|
(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)
|
## TP14.4 — 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.
|
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).
|
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`/
|
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`.
|
`CF_ACCESS_CLIENT_SECRET` in `mcp/cloudflare/.env` (chmod600) → dokumentieren. Details: Memory `ref-cf-access-claude-profile`.
|
||||||
|
|
||||||
## Session E — TP5-Firewall (ZULETZT)
|
## TP14.5 — Session E: Freigabe-Gate → TP5-Firewall (ZULETZT)
|
||||||
Erst wenn ALLE Origins/Connectoren in VLAN20 (nach A+B+C). Least-Privilege je VLAN; Deny-by-default fertigziehen.
|
Erst wenn ALLE Origins/Connectoren in VLAN20 (nach A+B+C). Least-Privilege je VLAN; Deny-by-default fertigziehen.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|||||||
@@ -283,11 +283,28 @@ FT kaschierte das bisher als „Roaming" statt „schwache Abdeckung".
|
|||||||
### TP14 — Host/Container-IP-Migration VLAN1→VLAN20 (Docker-Cutover NAS+pve) ▸ ⏳ WIP — `docs/nas-vlan20/RUNBOOK.md`, Handoff `docs/nas-vlan20/handoff/`
|
### 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`.
|
- ✅ **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).
|
- ✅ **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").
|
- ⚠️ **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`.
|
||||||
- 🔜 **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.
|
### TP14.1 — Session A: NAS fertigstellen ▸ 🔜 TODO (nächste Session)
|
||||||
- 🔜 **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`.
|
- 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).
|
||||||
- ⚠️ **Abh./Reihenfolge:** verzahnt mit Omada-PVID-Fix/IP-Migration (Reihenfolge #3); **TP5 ZULETZT** (erst wenn alle Origins/Connectoren in VLAN20).
|
- gitea(111) → `.20.157` (⚠️ `GITEA__database__HOST` `.20.23` verifizieren); drawio(107) via `transform.py` → `.20.139`.
|
||||||
|
- **pve-mcp NEU als Stack** (vlan20-only, `.20.173`, Spec `docs/nas-vlan20/inspect_pve-mcp.json`) + `~/.claude.json` `.41.173→.20.173`.
|
||||||
|
- **omada-controller Inform-Adresse → `10.40.20.175`** (UI `https://10.40.20.175:8043`), sonst sw2 „Disconnected".
|
||||||
|
|
||||||
|
### 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.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).
|
||||||
|
- Referenz-Sweep `.41→.20`: ap1 bf.lan-DNS (MikroMCP, ap1 via `10.40.10.1`), CLAUDE.md, `~/.claude.json`, `docs/ip-plan.md`, CF-Ingress-Rest.
|
||||||
|
|
||||||
|
### TP14.4 — Session D: CF-Access-Profil für Claude ▸ 🔜 TODO (nicht cutoff-kritisch)
|
||||||
|
- CF-Token „claude code mcp" hat jetzt `Access: Service Tokens: Write`+`Read` → `claude-mcp` rotieren (`POST …/access/service_tokens/{id}/rotate`) → `CF_ACCESS_CLIENT_ID`/`_SECRET` in `mcp/cloudflare/.env` (chmod600). Memory `ref-cf-access-claude-profile`.
|
||||||
|
|
||||||
|
### TP14.5 — Session E: Freigabe-Gate → TP5-Firewall ▸ 🔜 (ZULETZT)
|
||||||
|
- Erst wenn TP14.1–14.3 durch (alle Origins/Connectoren in VLAN20) → dann TP5 (Deny-by-default) starten. Reines Reihenfolge-Gate, kein eigener Change.
|
||||||
|
|
||||||
### TP-R — Router-Capabilities-Sweep ▸ FERTIG (`docs/research/routeros-capabilities.md`)
|
### TP-R — Router-Capabilities-Sweep ▸ FERTIG (`docs/research/routeros-capabilities.md`)
|
||||||
- **Leitsatz: nativ vor Container, NAS vor Router** (128MB-Flash-Limit).
|
- **Leitsatz: nativ vor Container, NAS vor Router** (128MB-Flash-Limit).
|
||||||
|
|||||||
Reference in New Issue
Block a user