docs 📄 TP14.1 ✅ NAS-Container auf VLAN20 + pve-mcp neu (Session A durch)
Alle ep14-Container via Portainer-Stack-Redeploy auf vlan20/.20.x (Env
preserved, Volumes intakt): prometheus/node-exporter/grafana, hms-mqtt,
dashboard-web, qdrant, gitea (DB .20.23 ✓), drawio (intern), oc-charlie,
oc-johnny2. pve-mcp NEU als Stack id 202 (.20.173) — StreamableHTTP am
Root-Pfad / (nicht /sse); ~/.claude.json mcpServers.pve-mcp neu angelegt.
Geflaggt (pre-existing, nicht migrationsbedingt): alertmanager crash-loop
(${TELEGRAM_CHAT_ID}-Literal), openclaw shared-DB .41.122 down. Gotcha:
gitea-Stack hatte vlan20-Block auskommentiert → Fix via Disk-Override.
Merke: kein Blanket-Env-.41→.20 (Mac-mini .167 bleibt .41).
OFFEN: Omada-Inform-Adresse → .20.175 (Controller-UI-Task; sw2 static IP,
kein DHCP-138; nur Mgmt-Loss, Netz läuft).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -34,7 +34,7 @@ GW je VLAN = `.1` · APs: ap1=`.1`, ap2=`.2` · Switches: ALLNET=`.11`, Omada=`.
|
||||
| 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) |
|
||||
| pve-mcp | 10.40.41.173 | SSE `http://10.40.41.173:3000/sse` · MCP in Claude Code ✓ |
|
||||
| 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`) |
|
||||
| Mac mini | 10.40.41.167 | `ssh macmini` |
|
||||
|
||||
@@ -11,7 +11,23 @@ Transform-Regeln + Scratch-Skripte: Runbook §„Transform-Regeln". Stack-Files
|
||||
|
||||
---
|
||||
|
||||
## TP14.1 — Session A: NAS fertigstellen
|
||||
## TP14.1 — Session A: NAS fertigstellen ✅ DURCH (2026-07-10, außer Omada-Inform)
|
||||
**Ergebnis:** alle ep14-Container laufen auf vlan20/.20.x (prometheus .151, node-exporter .154,
|
||||
grafana .109, hms-mqtt .124, dashboard-web .148, qdrant .159, gitea .157 [DB .20.23 ✓],
|
||||
drawio .139 [intern], oc-tzcharlie .162+cf, oc-johnny2 .161+cf). pve-mcp NEU als Stack id 202
|
||||
`.20.173` (⚠️ StreamableHTTP am **Root `/`**, nicht `/sse`); `~/.claude.json` `mcpServers.pve-mcp`
|
||||
neu = `{type:http,url:http://10.40.20.173:3000/}`. Tunnel-Smoke gitea/grafana/vw = 200/302/200.
|
||||
**Rest-/Nacharbeiten:** (a) 🔜 **Omada-Inform-Adresse** noch offen → Controller-UI-Task (s.u.),
|
||||
sw2 „Disconnected" aber switcht weiter (management-only). (b) ⚠️ alertmanager .153 crash-loopt auf
|
||||
**pre-existing** Config-Bug (`${TELEGRAM_CHAT_ID}`-Literal), nicht migrationsbedingt. (c) ⚠️ openclaw
|
||||
shared-DB `.41.122:3306` down (pre-existing). (d) Merke: `OLLAMA_BASE_URL=.41.167`=Mac-mini bleibt
|
||||
`.41` — **kein Blanket-Env-.41→.20**. Helper: `/private/tmp/nasmig/{redeploy.py,pt.py,omada.py}`.
|
||||
**Omada-Inform-Fix (Christoph, UI):** `https://10.40.20.175:8043` → Settings → Controller →
|
||||
„Controller Hostname/IP" = `10.40.20.175`; dann sw2 forget + re-adopt (L3-Discovery). Grund kein
|
||||
Auto-Fix: Open API kein Inform-Setting, kein Controller-Admin-Login lokal, sw2 = statische IP (kein DHCP-138).
|
||||
|
||||
<details><summary>Original-Aufgabe (erledigt)</summary>
|
||||
|
||||
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/
|
||||
@@ -26,6 +42,7 @@ Aufgabe:
|
||||
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://<host>.emsenhuber.net/` → 200/302.
|
||||
</details>
|
||||
|
||||
## 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`:
|
||||
|
||||
@@ -284,12 +284,16 @@ 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: NAS fertigstellen ▸ 🔜 TODO (nächste Session)
|
||||
- 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).
|
||||
- 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.1 — Session A: NAS fertigstellen ▸ ✅ Container-Teil DURCH (2026-07-10); ⚠️ nur Omada-Inform offen
|
||||
- ✅ **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).
|
||||
- ✅ **pve-mcp NEU** als Stack (id 202, vlan20-only `.20.173`), verbunden mit Proxmox `.41.100` (v9.0.11) — ⚠️ **StreamableHTTP am Root-Pfad `/`, NICHT `/sse`** (mcp-pve v0.4.8, `MCP_TRANSPORT=http`). `~/.claude.json` `mcpServers.pve-mcp` NEU angelegt `{type:http, url:http://10.40.20.173:3000/}` (war vorher gar nicht drin) → wirkt nach Claude-Code-Restart.
|
||||
- ✅ **Tunnel-Smoke** (CF-Ingress v116 zeigte schon auf `.20`): gitea 200, grafana 302, vw 200 — Origins existieren jetzt real.
|
||||
- ⚠️ **alertmanager `.153`**: korrekt an vlan20, aber **crash-loop wegen PRE-EXISTING Config-Bug** (`${TELEGRAM_CHAT_ID}`-Literal in `/etc/alertmanager/alertmanager.yml` → int64-Parse-Fehler; Alertmanager macht kein Env-Substitution). NICHT migrationsbedingt, braucht echte chat_id. Out-of-scope.
|
||||
- ⚠️ **openclaw-DB `10.40.41.122:3306` down** (shared MariaDB, pre-existing; Bots kamen trotzdem hoch). `DB_HOST`-Env unverändert gelassen. `OLLAMA_BASE_URL=.41.167`=Mac-mini bleibt korrekt `.41` (migriert nicht → **kein Blanket-Env-.41→.20!**).
|
||||
- 🔜 **OFFEN — omada-controller Inform-Adresse → `10.40.20.175`**: sw2 „Disconnected" (Controller von `.41.175`→`.20.175` gewandert). **Nur management-loss** — sw2 (Easy-Managed) switcht mit letzter Config weiter, Netz läuft (Live-Traffic bestätigt). Recovery braucht **Controller-UI** (`https://10.40.20.175:8043`): Open API hat kein Inform/Hostname-Setting, kein Controller-Admin-Login lokal hinterlegt, **sw2 = statische IP `.41.12` → keine DHCP-Option-138-Auto-Recovery**. Christoph: UI → Settings → Controller → „Controller Hostname/IP" = `10.40.20.175`, dann sw2 forget+re-adopt (Discovery über L3).
|
||||
- 🐞 **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`).
|
||||
@@ -306,6 +310,19 @@ FT kaschierte das bisher als „Roaming" statt „schwache Abdeckung".
|
||||
### 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.
|
||||
|
||||
### TP15 — HW-Refresh: Core-Switch + OG-Verteiler ▸ 🔜 PLANUNG — `docs/hw-refresh-requirements.md`
|
||||
- **Ziel:** ALLNET-Core (sw1, 5,8W) + 2 Branch-Switches (je 1,5W) ablösen durch energieeffizientere, zentral managebare Lösung mit PoE + DC-USV.
|
||||
- **Architektur:** Unten (Diele) = lüfterloser Core-Switch mit PoE, PoE-powered von oben (gepuffert). Oben (Arbeitszimmer) = Switch mit PoE + DC-USV (48V-Bus, LiFePO4).
|
||||
- **Anbieter-Recherche:** MikroTik (RouterOS) ⭐, TP-Link Omada, Ubiquiti UniFi, Netgear, Aruba Instant On, Zyxel, Cisco. **Favorit: MikroTik** (RouterOS, Config-as-Code, MikroMCP).
|
||||
- **Kandidaten unten:** CRS318-16P-2S+OUT (16 PoE, lüfterlos, ~16W, ~€286) ⭐ oder CRS326-24G-2S+RM (24 Ports, lüfterlos, ~10W, ~€200) + PoE-Injektor.
|
||||
- **Kandidaten oben:** CRS328-24P-4S+RM (24 PoE, 4× SFP+, ~25W, ~€400) ⭐ oder CRS418-8P-8G-2S+5axQ2axQ-RM (16 Port, 8 PoE, WiFi 6, ~19W, ~€403).
|
||||
- **WiFi:** hAP be³ Media (WiFi 7, 5× 2,5G, ~€179) als separater AP ⭐ vs. CRS418 (WiFi 6 integriert).
|
||||
- **DC-USV:** MeanWell LRS-150-48 + DDR-120-48 + LiFePO4 20Ah (~€190) — 48V-Bus, ~2,5h Laufzeit bei 100W.
|
||||
- **Energiebilanz:** Neue Lösung ~35–60W (je nach Variante) vs. IST ~15W (nur Switching). Jahreskosten +€50–105.
|
||||
- **Offene Entscheidungen:** Variante (A/B/C/D), Mac mini auf USV?, PVE-Standort, WiFi-Strategie.
|
||||
- **Nächster Schritt:** Entscheidungen treffen, dann Konfiguration + Bestellung.
|
||||
- Abh.: TP14 (IP-Migration VLAN1→VLAN20 sollte abgeschlossen sein, damit Ziel-IPs feststehen).
|
||||
|
||||
### 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.
|
||||
|
||||
Reference in New Issue
Block a user