From 8665902de7329bf98efa5770d3b4e2e58c85f7bd Mon Sep 17 00:00:00 2001 From: Christoph Emsenhuber Date: Fri, 17 Jul 2026 07:56:45 +0200 Subject: [PATCH] =?UTF-8?q?docs=20=F0=9F=8E=AB=20TP16.1:=20Governance-Ausn?= =?UTF-8?q?ahme=20ap1-CF-Tunnel=20erteilt=20+=20Handoff-Prompt-File?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Governance-Callout (teilprojekte.md): Christoph erteilt Ausnahme von 'Config nur via Nautobot' für alle (Vor)Arbeiten am zentralen CF-Tunnel-Zugang AUF AP1 (TP16/16.1, native WG-Mesh-Zeilen). Scope-Grenze: nur ap1 — CRS326 (TP15) fällt vorerst NICHT darunter, bleibt Nautobot-GC-pflichtig. Follow-up: ap1-Zeilen später in GC nachtragen. - Neu: docs/tp16.1-session-handoff-prompt.md — kopierfertiger Auftrag für die Delegations-Session (Sonnet), Governance-Gate jetzt als 'erteilt' statt 'erst fragen'. Co-Authored-By: Claude Opus 4.8 --- docs/teilprojekte.md | 1 + docs/tp16.1-session-handoff-prompt.md | 87 +++++++++++++++++++++++++++ 2 files changed, 88 insertions(+) create mode 100644 docs/tp16.1-session-handoff-prompt.md diff --git a/docs/teilprojekte.md b/docs/teilprojekte.md index 37bba30..875574f 100644 --- a/docs/teilprojekte.md +++ b/docs/teilprojekte.md @@ -28,6 +28,7 @@ Kontrolle: MikroMCP (MikroTik) live · ALLNET = Klickanleitungen · Omada → Co > ⚠️ **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. > 🔒 **Governance-Entscheid (User, 2026-07-16, ausgeweitet 2026-07-16): Config ausschließlich über Nautobot — keine Direkt-Changes mehr an einzelnen im Netz verstreuten Geräten.** Ursprünglich als ap1/ap2-Config-Freeze bis TP21 formuliert, noch am selben Tag verallgemeinert: **jede** Netz-Gerätekonfiguration (Router, APs, künftig auch die CRS326-Switches) läuft ab jetzt exklusiv über Nautobot Golden Config (TP21), sobald das steht — keine ad-hoc MikroMCP-Writes/UI-Klicks mehr an Einzelgeräten. **TP19.1 war die letzte Ausnahme** (ap1-DNS-Fix + ap2/sw1/sw2-Mgmt-VLAN-Umzug, s.u.) — davon ist nur der risikolose ap1-Teil noch direkt gemacht worden, ap2 wurde bewusst auf „nach Nautobot" vertagt. **Macht Nautobot + alle Prerequisites (TP18→TP20→TP20.1→TP21, jetzt auch Komodo) zum aktuell kritischen Pfad**, vor TP5/TP6. Betrifft nicht Software-Migrationen auf NAS/pve (anderes Substrat) und die Frage, ob sw1/sw2 vor der CRS326-Ablösung noch angefasst werden (offen, s. TP15/TP19.1). +> ✅ **Genehmigte Ausnahme (User, 2026-07-17): der zentrale CF-Tunnel-Zugang auf ap1 (TP16/TP16.1).** Alle für den zentralen Cloudflare-Zugang **auf ap1** notwendigen (Vor-)Arbeiten dürfen direkt via MikroMCP/CF-API gemacht werden, ohne auf Nautobot GC zu warten — konkret die nativen WireGuard-Mesh-Zeilen aus TP16.1 (und analoge cloudflared/WG-Anpassungen am ap1-Edge). Begründung: Remote-Erreichbarkeit ist die Voraussetzung, um überhaupt sicher am Netz zu arbeiten (Henne-Ei zu Nautobot). **Scope-Grenze:** Die Ausnahme gilt **nur für ap1**. Sobald der zentrale Zugang später auf die **CRS326** wandert (TP15), gilt die Ausnahme dafür **vorerst NICHT** — CRS326-Config läuft dann regulär über Nautobot GC (oder braucht eine eigene, dann neu zu erteilende Ausnahme). Nachtrag der ap1-Ausnahmezeilen in die GC als Follow-up, sobald Nautobot steht. --- diff --git a/docs/tp16.1-session-handoff-prompt.md b/docs/tp16.1-session-handoff-prompt.md new file mode 100644 index 0000000..ff0fa91 --- /dev/null +++ b/docs/tp16.1-session-handoff-prompt.md @@ -0,0 +1,87 @@ +# TP16.1 — Handoff-Prompt für die Delegations-Session (Sonnet) + +> **Zweck:** Dieses File ist der kopierfertige Auftrag für eine frische Session, die TP16.1 +> (Private Access via native Cloudflare Mesh/WireGuard auf ap1) scharfschaltet. +> **Empfohlenes Modell:** Sonnet (Christoph zuhause = physischer ap1-Zugriff, alles reversibel, +> Runbook ausführungsreif). Bei Bedarf Opus, falls die account-weiten Prereqs/eine Überraschungs- +> Diagnose mehr Urteilsvermögen brauchen. +> +> **So übergibst du es:** Neue Session öffnen und als ersten Prompt schicken: +> „Lies `docs/tp16.1-session-handoff-prompt.md` und arbeite den Auftrag darin ab." +> (Alternativ den Block unter „--- PROMPT ---" direkt reinkopieren.) + +--- PROMPT --- + +``` +TP16.1 — Private Access via native Cloudflare Mesh (WireGuard) auf ap1 scharfschalten. + +KONTEXT ZUERST LESEN (in dieser Reihenfolge): +1. docs/tp16.1-warp-mesh-native-ap1.md — dein vollständiges, ausführungsreifes Runbook. +2. docs/cf-tunnel-mapping.md §13/§14 — Incident-Historie + aktueller Tunnel-Stand. +3. docs/teilprojekte.md TP16/TP16.1 + Governance-Callout oben. +4. CLAUDE.md (Projekt) — Hardware/Zugänge/Gotchas, v.a. ap1-Scripting-Gotchas. + +ZIEL: Unterwegs per WARP-Client wieder auf 10.40.0.0/16 durchkommen — inkl. ICMP/Ping, +nicht nur TCP. Der Public-FQDN-Teil (cloudflared-3-Tunnel-HA, TP16) bleibt UNBERÜHRT. +Weg: nativer WireGuard-Mesh-Node auf ap1 (kein Container/LXC/neue HW), vnet-Route +10.40.0.0/16 (Route-ID 5546dcb6-5901-4da6-8d91-b17f94703f71) von bf-pve auf den +Mesh-Node umhängen. Rollback = 1 PATCH zurück auf f7fdf3a6 (bf-pve). + +RAHMENBEDINGUNGEN: +- Christoph ist ZUHAUSE (physischer ap1-Zugriff → Recovery via Power-Cycle möglich). +- ap1 = einziger Edge/SPOF; MikroMCP live (mcp__mikromcp__*). Writes IMMER erst + plan_changes/dryRun, dann apply_plan. ap1 device-mode=home → kein Scheduler/fetch. +- CF-Writes NUR via CF_API_TOKEN (curl/Bearer) — der cloudflare-MCP ist read-only. + Token/IDs in mcp/cloudflare/.env. Alle CF-API-Calls laufen über api.cloudflare.com, + also WARP-unabhängig (Rollback geht auch wenn der private Pfad tot ist). +- wgcf-connector läuft als Docker-Einmal-Call auf macmini oder pve (ssh macmini / pve-mcp). +- PrivateKey aus der .conf → ~/.secrets bzw. mcp/cloudflare/.env, NICHT committen. + +GOVERNANCE — AUSNAHME BEREITS ERTEILT (Christoph, 2026-07-17): +Die Regel "Config nur via Nautobot" gilt account-weit, ABER für den zentralen CF-Tunnel- +Zugang auf ap1 (TP16/TP16.1) hat Christoph eine Ausnahme erteilt: alle dafür nötigen +(Vor-)Arbeiten auf ap1 dürfen direkt via MikroMCP/CF-API gemacht werden — die nativen +WireGuard-Mesh-Zeilen inklusive. Du musst NICHT vor jedem ap1-Write neu fragen. +SCOPE-GRENZE: gilt nur für ap1. Wenn der zentrale Zugang später auf die CRS326 wandert +(TP15), gilt die Ausnahme dafür NICHT — das wäre dann wieder Nautobot-GC-Pflicht. +Follow-up: die ap1-Ausnahmezeilen später in die Nautobot-GC nachtragen, sobald sie steht. + +USER-GATES (weiterhin ansagen/mit Christoph zusammen — NICHT allein durchziehen): +1. Account-weite CF-Prerequisites (§4.1): Unique-Device-IP AN + Split-Tunnel-Exclude + ändern → triggert 1× kurzen WARP-Reconnect auf ALLEN enrollten Geräten. Vorher ansagen. +2. Device-Profil "Cloudflare Mesh" (WireGuard-Protokoll, Match auf + warp_connector@emsenhuber.cloudflareaccess.com) = Dashboard-Klick durch Christoph. +(Die ap1-WG-Config selbst ist durch die Governance-Ausnahme oben freigegeben.) + +SCHON GEKLÄRT (nicht nochmal aufrollen): +- ICMP-Proxy ist bereits AN (fm-Ping 10.101.0.0/24 funktioniert = Beweis). Kein To-Do. + Nur nach dem Scharfschalten Ping gegenprüfen (§4.5). +- IPv6 bewusst NICHT (v4-only; Mesh-site-to-site-v6 laut Guide broken). + +ABLAUF: Plan-Gate zuerst (POST warp_connector → wenn Free-Plan das ablehnt: STOPP, +LXC-auf-pve-Fallback, §6). Dann §4.1→§4.5 des Runbooks. Bei jedem Schritt reversibel +halten; die 2 User-Gates oben mit Christoph koordinieren. + +ROUTE-UMZUG (§4.4) — Weg A zuerst, Weg B als Fallback: +- Weg A: PATCH /accounts/…/teamnet/routes/5546dcb6… {tunnel_id: } +- Weg B (falls A am vnet scheitert, "virtual networks only for cloudflared"): + DELETE alte Route + POST neue ohne vnet-Angabe. Reihenfolge DELETE→POST zwingend. + +ABNAHME (§4.5): MacBook mit WARP connected → ping 10.40.20.105, 10.40.10.1, +10.40.99.12 verlustfrei; TCP-Gegenprobe inkl. NAS-macvlan-IP direkt (ssh 10.40.20.167, +gitea 10.40.20.157:3000); FQDN-Stichprobe (gitea/hass über *.emsenhuber.net) = Public-Teil +unberührt. + +DOKU (Pflicht am Ende): As-Built-Abschnitt in docs/tp16.1-warp-mesh-native-ap1.md ergänzen +(gemessene Mesh-Node-ID, ap1-WG-IP 100.96.x.y, was tatsächlich lief/nicht lief) + +teilprojekte.md TP16.1-Status fortschreiben + cf-tunnel-mapping.md wenn sich die Route- +Zuordnung ändert. Danach committen + pushen (Commit-Msg-Konvention siehe git log). +Governance-Nachtrag-ToDo (ap1-Zeilen → Nautobot-GC) als offenen Punkt vermerken. +``` + +--- ENDE PROMPT --- + +## Was Christoph zur Session parat haben sollte +- Am **MacBook mit WARP connected** sein (für die Abnahme §4.5). +- Für die 2 User-Gates verfügbar: Dashboard-Klick (Device-Profil) + Ansage vor dem + account-weiten WARP-Reconnect.