Files
bf-infra/docs/tp19-vlan1-cudy-teardown-runbook.md

149 lines
9.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# VLAN1-Leak-Härtung (TP3.1) + VLAN1-Retirement/cudy-Teardown (TP19) — Runbook
**Stand: 2026-07-15.** Zwei verschiedene TPs, ein gemeinsamer Session-Ablauf (Phase A wird logisch zuerst
gemacht, blockiert aber Phase B nicht). Steuerung/Scope: `docs/teilprojekte.md` → **TP3.1** (Phase A) und
**TP19** (Phase B). Verwandt: `project_vlan1_dhcp_incident` (Root-Cause-Erstdiagnose), `routeros/tp3.1-ap2-vlan.rsc`
(Interim-Härtungsmuster, dort erstmals auf ap2 angewendet). Für eine frische Session gedacht — kein Vorwissen
aus Vorgänger-Sessions vorausgesetzt.
---
## TL;DR
**Akuter Bug, nicht nur Cleanup:** Clients auf `dirtyvader-main` (VLAN10) bekommen zeitweise
`10.40.41.x`-IPs (VLAN1) statt `10.40.10.x` — der bereits einmal diagnostizierte
**Dual-DHCP-Race** (gleiche MAC hält gleichzeitig eine `defconf`/VLAN1- und eine `dhcp-v10`-Lease).
- **Phase A — TP3.1-Scope (~30–60 Min):** akutes Leck auf ap1 stopfen, gleiche Härtung wie 2026-07-06
auf ap2 (dort schon TP3.1-Interim-Härtung). Symptom weg, VLAN1 existiert danach noch.
- **Phase B — TP19-Scope (~2–3h):** VLAN1 + cudy komplett abbauen. Ursache weg, kein Leck mehr möglich,
Phase-A-Härtung wird dabei redundant (muss nicht zurückgebaut werden, verschwindet mit VLAN1 selbst).
Phase A blockiert Phase B nicht (unabhängig ausführbar), aber Phase B macht Phase A überflüssig.
---
## Kontext / Root Cause
VLAN1 ist historisch das Flachnetz der alten FritzBox-Ära und trägt bis heute:
1. Das **cudy-Alt-WLAN** (`elektrosmog.c` o.ä., cudy1/cudy2, `10.40.41.246`/`.247`) — bridged Clients
untagged in VLAN1.
2. Eine aktive **DHCP-Client-Rolle** auf ap1 (`defconf`/pool-v1) — vergibt weiterhin `10.40.41.x`-Leases.
3. Switch-/AP-Management (sw1 `.11`, sw2 `.12`, ap2-Mgmt `.2`) — **das bleibt** bis zum separaten
MGMT-VLAN99-Cutover, ist NICHT Teil dieses Teardowns.
**Bereits einmal aufgetreten und diagnostiziert** (`project_vlan1_dhcp_incident`, 2026-07-05/06):
dieselben Main-SSID-MACs hielten gleichzeitig eine korrekte `dhcp-v10`-Lease **und** eine
`defconf`/VLAN1-Lease → Race, sichtbar als „offering ... without success" + minütliches Flapping.
**Fix damals (TP3.1, 2026-07-06):** auf **ap2** wurden die Master-Radio-Bridge-Ports `wifi1`/`wifi2`
von `frame-types=admit-all` auf **`admit-only-vlan-tagged`** umgestellt — untagged Main-Frames werden
seither auf ap2 verworfen statt in VLAN1 gedumpt. **Diese Härtung wurde nur auf ap2 gemacht.** Der
aktuell gemeldete Leck auf `dirtyvader-main` deutet stark darauf hin, dass **ap1 die gleiche Lücke
noch offen hat** (lokale Main-Radios dort vermutlich noch `admit-all`).
---
## Phase A (TP3.1) — Akutmitigation (Leck auf ap1 stopfen)
**Ziel:** `dirtyvader-main`-Clients bekommen zuverlässig nur noch `dhcp-v10`-Leases, keine `defconf`
mehr. VLAN1 selbst bleibt vorerst bestehen (das ist Phase B).
### A1 — Live-Diagnose (Race bestätigen)
1. `mikromcp list_wifi_clients` / Registration-Table auf ap1, gefiltert auf `dirtyvader-main`-Interface
→ betroffene MACs sammeln.
2. `mikromcp list_dhcp_leases` auf **beiden** Servern (`defconf` = VLAN1-Pool, `dhcp-v10` = VLAN10-Pool)
→ nach denselben MACs suchen. **Beweis des Race:** dieselbe MAC taucht in beiden Leases auf.
3. Prüfen, ob die betroffenen Clients über **ap1** (lokal) oder **ap2** (remote-CAP) verbunden sind —
falls ap2, ist die TP3.1-Härtung dort vermutlich schon aktiv und das Leck sitzt tatsächlich auf ap1
(bestätigt die Hypothese) oder wo anders (cudy selbst, s. A4).
### A2 — Fix: ap1 Main-Radio-Härtung (Playbook = TP3.1)
1. Auf ap1: welche Bridge-Ports tragen die **lokalen Master-Radios** für `dirtyvader-main` (wifi1/wifi2,
analog zur ap2-Struktur aus TP3.1)? Aktuellen `frame-types`-Wert prüfen.
2. Falls `admit-all`: auf **`admit-only-vlan-tagged`** umstellen — **exakt das gleiche Muster wie
TP3.1 auf ap2**, siehe `routeros/tp3.1-ap2-vlan.rsc` als Referenz.
3. ⚠️ **NICHT anfassen: `ether2`** (WAN-Trunk/Mgmt-Pfad von ap1 — VLAN1 muss dort laut TP3.1/TP4
weiterhin `untagged=bridge,ether2` bleiben, sonst Lockout-Risiko für Switch-/AP-Mgmt). Nur die
WLAN-Radio-Bridge-Ports ändern, kein anderer Port.
4. `dryRun:true` zuerst, Diff prüfen, dann `apply_plan`.
### A3 — Verifikation
1. Betroffene Clients (aus A1) neu verbinden lassen (WiFi aus/an) oder auf DHCP-Renew warten.
2. Neue Lease muss **ausschließlich** `dhcp-v10` sein — `defconf`-Lease für diese MAC darf nicht
erneuert werden (alte Lease läuft aus/wird nicht erneuert = ok).
3. 10–15 Min beobachten (mehrere Renew-Zyklen), kein erneutes Flapping.
### A4 — Falls A2 nicht ausreicht
Falls nach dem ap1-Fix das Symptom weiter auftritt: Leck sitzt evtl. nicht an den Main-Radios, sondern
am **cudy selbst** (bridged evtl. irgendwo denselben L2-Broadcast-Domain-Ast) oder an einem noch nicht
identifizierten Pfad. In dem Fall: Phase B (kompletter cudy-Abbau) vorziehen/beschleunigen — das
Symptom verschwindet spätestens dann garantiert, weil die VLAN1-Quelle physisch weg ist.
---
## Phase B (TP19) — Vollständiger Teardown (VLAN1 + cudy weg)
### B0 — Ziel-Abgrenzung
Weg: cudy-WLAN komplett, VLAN1 als **Client**-Netz (`defconf`/pool-v1). Bleibt (by design, bis
separater MGMT-VLAN99-Cutover): sw1 `.11`, sw2 `.12`, ap2-Mgmt `.2` — statisch, kein DHCP nötig.
### B1 — Prereqs: restliche VLAN1-Clients umziehen (SONST verwaisen sie beim cudy-Tod)
Live-Stand ap1-ARP zuletzt geprüft 2026-07-13 — zu Sessionbeginn neu sweepen, Stand kann sich geändert
haben:
1. **Christophs Endgeräte → VLAN10** (`dirtyvader-main`): MacBook-Air `.41.182`
(`c0:c7:db:de:71:be` — **= Claude-Sandbox-Client!** Als Erstes umhängen, sonst verliert die laufende
Session ggf. die Verbindung), iPhone `.41.186`.
2. **2 unidentifizierte VLAN1-Geräte:** `.41.133` (`02:11:32:22:1e:25`, randomisierte/lokal-admin.
MAC — evtl. Phone-Privacy-MAC oder VM) + `.41.198` (`34:2b:6e:6f:1f:ef`) → **vor Teardown verorten**
(größter Zeit-Unsicherheitsfaktor laut Schätzung). Falls nicht auflösbar in angemessener Zeit:
Risiko abwägen — Gerät verwaist beim Teardown, taucht dann als "kein DHCP mehr" auf und lässt sich
danach über den Symptom-Report re-identifizieren.
3. **Media → VLAN40 verifizieren:** Apple TV 4K + Philips TV 50PUS7304 (beide zuletzt **aus**) —
einschalten, ap1-ARP prüfen ob `dirtyvader-media`/VLAN40 oder noch cudy/VLAN1. ⚠️ **Apple TV =
vermutlich Thread-Border-Router** der 22-Matter-Geräte-Flotte (TP17.1) — nicht sorglos stromlos
lassen, nur kurz für den Check.
4. **Saisonale Shellys** s1/s2/s3/s12 (aus, Weihnachtsdeko/Diele-Steckdose): **Empfehlung** kurz vor
dem Teardown einstecken + `mcp/shelly/migrate.py`, sonst müssen sie später per physischem
AP-Mode-Reset nachgezogen werden. **Nicht blockierend** — kann übersprungen werden, wenn der
spätere Reset-Aufwand akzeptiert wird.
5. **pve-Interim-IP `.41.100`** (bewusster Fallback) beim Teardown mit abräumen.
### B2 — Teardown-Sequenz
1. **VLAN1-Client-Sweep = leer verifizieren** (nur Mgmt-IPs sw1/sw2/ap2 übrig).
2. **cudy1/cudy2 stromlos/Reset/ausbauen** (`.41.246`/`.247`).
3. **SwitchBot floor-lamp** (`.41.184`, `b8:f8:62:09:f2:04`) via App/BLE auf `dirtyvader-iot`/VLAN30
provisionieren (Reservierung `.30.227` liegt bereits) — **laut User erst jetzt (nach cudy-Tod)
zuverlässig möglich**, davor nicht versuchen.
4. **ap1 `defconf`/pool-v1-Client-DHCP zurückziehen** — Mgmt-Reachability für sw1/sw2/ap2 (VLAN1
statisch) dabei erhalten, nicht die ganze VLAN1-Interface-Config killen.
5. **Interim-Krücken aufräumen:**
- ap2 `frame-types=admit-only-vlan-tagged` (TP3.1) — verschwindet automatisch mit VLAN1, kein
Rückbau nötig (bleibt im Zielbild korrekt).
- ap1-Härtung aus Phase A — dito, wird mit VLAN1-Tod redundant, kann bleiben.
- `st-main rrm/wnm` (802.11k/v Roaming-Provisorium) neu bewerten, ob nach Migration noch nötig.
6. **Nachziehen:** `inventory/bf.csv`, `docs/ip-plan.md`, ap1 `bf.lan`-DNS, `docs/teilprojekte.md`
TP19 auf ✅.
---
## Risiken & Rollback
- **Lockout-Risiko (wie bei jedem VLAN1-Touch):** VLAN muss existieren + der Port/Radio muss es tragen,
**in einem Schritt** ändern. Vor dem Zurückziehen von `defconf`/pool-v1 sicherstellen, dass sw1/sw2/
ap2-Mgmt-IPs weiterhin **statisch** erreichbar sind (kein DHCP-Abhängigkeit für die Mgmt-Pfade).
- **MacBook = Sandbox-Client:** Reihenfolge einhalten (B1.1 zuerst) — sonst reißt beim cudy-Abbau die
eigene Session-Verbindung ab, bevor der Umzug bestätigt ist.
- **Verwaiste Geräte:** falls B1.2 (unidentifizierte Geräte) nicht rechtzeitig auflösbar ist und der
Teardown trotzdem durchgezogen wird → Gerät fällt aus dem Netz, ist aber nicht zerstört (physischer
Zugriff/Re-Provisionierung später möglich, kein Datenverlust-Risiko).
- **Rollback Phase A:** `frame-types` auf ap1 zurück auf `admit-all` (macht das Leck wieder auf, aber
reversibel).
- **Rollback Phase B:** cudy-Hardware ist nach Ausbau nicht mehr im Netz — Rollback würde Wiedereinbau
+ Reset auf alte Config bedeuten (nicht vorgesehen, Teardown ist bewusst final).
## Verifikation (Gesamt)
- `dirtyvader-main`-Clients bekommen ausschließlich `.10.x`-Leases (Phase-A- und Phase-B-Beweis).
- VLAN1-ARP/DHCP-Sweep auf ap1: nur noch sw1/sw2/ap2-Mgmt-IPs sichtbar, keine Client-Leases mehr.
- cudy-SSID nicht mehr sichtbar in WLAN-Scans.
- Alle in B1 gelisteten Geräte auf ihrem Ziel-VLAN erreichbar (HA-Cross-Check wie im TP17-Runbook-Muster).