From 09cadadd334e8f3cbc5127e6aa1fa2923b116e9b Mon Sep 17 00:00:00 2001 From: Christoph Emsenhuber Date: Sun, 23 Aug 2026 07:12:51 +0200 Subject: [PATCH] PSK-Befund dokumentiert: Wert ist live, Historie bleibt, Rotation bleibt nachgelagert Ergebnis der read-only-Recherche-Session, hier gegengeprueft und in die kanonische Doku uebernommen. Der PSK in docs/teilprojekte-archiv.md (TP17) ist NOCH der live konfigurierte -- verifiziert am Manager per Fingerprint (Laenge + drei Zeichenpaare) statt im Klartext, damit der Wert nicht ein zweites Mal in einem Transkript landet. Das ist zugleich die Merkregel: Uebereinstimmung prueft man mit Stichproben, nicht durch Ausgeben. User-Entscheid: Historie belassen, im Nachtrag dokumentieren -- kein filter-repo. Traegt, weil es genau eine getrackte Fundstelle gibt, drei Commits, Remote nur gitea.emsenhuber.net und einen einzigen lokalen Klon; der Wert hat die eigene Infrastruktur nie verlassen. Der wirksame Schritt ist die Rotation, und die bleibt hinter TP17.1. Blast radius selbst nachgemessen (crs326-core, read-only), Peer-Zahlen bestaetigt: 26 der 27 WLAN-Clients des gesamten Netzes haengen auf dirtyvader-iot (main 1, media/untrusted/guest je 0), VLAN30 fuehrt 41 Leases/Reservierungen (5 bound). Neben den ~26 Shellys: P750W, Airfryer, SwitchBot, Twinkly, DTUBI, SONOFF-NSPanelPro, ein iPhone. Damit praezisiert sich TP17.1: nach zehn migrierten Gen4 blieben grob 16 Geraete auf dem IoT-SSID, nicht 12 -- der Funkruhe-Effekt ist real (-38 % Clients), der PSK-Effekt nur halb. Die Reihenfolge-Entscheidung bleibt richtig, ihre Begruendung wird ehrlicher. Zwei Umsetzungshinweise fuers spaetere Rotations-Paket festgehalten: migrate.py hat kein Rotate-Kommando, und ein Flag-Day ist vermeidbar ueber Passphrase-Overrides je MAC in /interface wifi access-list -- was dem TP25-Befund "keine access-list" nebenbei einen Zweck gibt. Co-Authored-By: Claude Opus 5 --- docs/teilprojekte-archiv.md | 13 +++++++++++++ docs/teilprojekte.md | 37 ++++++++++++++++++++++++++++++++++++- 2 files changed, 49 insertions(+), 1 deletion(-) diff --git a/docs/teilprojekte-archiv.md b/docs/teilprojekte-archiv.md index d573077..d9f2745 100644 --- a/docs/teilprojekte-archiv.md +++ b/docs/teilprojekte-archiv.md @@ -879,6 +879,19 @@ FT kaschierte das bisher als „Roaming" statt „schwache Abdeckung". ist real und in der Übergabe ausgeführt. - 📊 **Bestandszahl, live 2026-08-23:** 22 der 26 Shellys erreichbar — **12 Gen4**, 8 Gen3, 2 Gen2. Die „~11 Gen4" aus der Schätzung von 2026-07-11 waren also nah dran. +- 🔑 **Nachtrag 2026-08-23 — der IOT-PSK steht in der „Ziel"-Zeile oben im KLARTEXT, und das bleibt + vorerst so (User-Entscheid).** Der Wert ist am selben Tag gegen den Manager geprüft worden und ist + **noch der live konfigurierte**. Bewusst **nicht** redigiert und **keine** History-Rewrite: + - Redigieren allein hilft nicht — die Zeile liegt seit `e76289c` (2026-07-11) in der Historie. + - Ein `git filter-repo` wäre hier Aufwand ohne Gegenwert: **eine** getrackte Fundstelle, drei + Commits, Remote **nur** `gitea.emsenhuber.net` (kein GitHub), **ein** lokaler Klon — der Wert hat + die eigene Infrastruktur nie verlassen. + - **Der wirksame Schritt ist die Rotation**, und die kostet heute ~26 Geräte. Sie ist deshalb + bewusst **hinter TP17.1** eingereiht (Gen4 → Thread), s. Follow-ups in + [`teilprojekte.md`](teilprojekte.md). + ⚠️ **Wer diesen Abschnitt liest, behandelt den Wert als aktives Geheimnis** — nicht zitieren, nicht + in Transkripte, nicht in Tickets. Zum Abgleich reicht ein Fingerprint (Länge + Stichproben), + genau so ist er am 08-23 verifiziert worden. diff --git a/docs/teilprojekte.md b/docs/teilprojekte.md index e4e05f2..cbf55b9 100644 --- a/docs/teilprojekte.md +++ b/docs/teilprojekte.md @@ -396,9 +396,14 @@ nachmessen und dann entscheiden**. Blocker gibt es keine mehr. TP5 ist in der Na Projekt (`hencou/shelly_gen4_matter_module`) deckt 1/1 Mini/1PM/2PM Gen4 ab = **10 der 12** Geräte; die zwei **Plug S Gen4 fallen raus**. Preis: Garantie und Shelly-Cloud weg, Rückweg nur mit **UART-Vollbackup je Gerät**, PM-Kalibrierung zunächst Platzhalter. - ⇒ **Selbst bei vollem Erfolg blieben 12 Geräte im WLAN** (8 Gen3 + 2 Gen2 + 2 Plug S + die 4 + ⇒ **Selbst bei vollem Erfolg blieben 12 Shellys im WLAN** (8 Gen3 + 2 Gen2 + 2 Plug S + die 4 ausgesteckten). Die Rotation wird **kleiner, nicht überflüssig** — und Gen3 kann nie folgen, dort fehlt 802.15.4. **Das ist Christophs Abwägung vor dem ersten Flash, nicht die des Umsetzenden.** + - 📊 **Und die Rechnung ist noch etwas ungünstiger, als „Shellys" nahelegt** (live 2026-08-23): + auf `dirtyvader-iot` hängen **26 der 27 WLAN-Clients des ganzen Netzes** — darunter Drucker + (P750W), Airfryer, SwitchBot, Twinkly, DTUBI und ein SONOFF-NSPanelPro, die von Thread **nichts** + haben. Nach zehn migrierten Gen4 blieben also grob **16 Geräte** auf dem IoT-SSID, nicht 12. + Der WLAN-Ruhe-Effekt ist real (−38 % Clients), der PSK-Effekt ist es **halb**. - ✅ **Was netzseitig schon steht und nicht nochmal gebaut werden muss:** Thread-Border-Router läuft mit ~30 produktiven Matter-Knoten; der **Commissioning-Weg ist erprobt** — temporäre SSID `dirtyvader-infra` (VLAN20) nach [`matter-pairing-infra-ssid-runbook.md`](matter-pairing-infra-ssid-runbook.md), @@ -794,6 +799,36 @@ den Weg, über den man den Fehler zurücknehmen wollte. Weg: `manage_user set-password` (⚠️ `/user set*` ist per Deny-Policy blockiert), danach `~/.secrets/credentials.env` (`ROUTER_*_PASS`/`CRS326_*_PASS`) und `~/.claude.json` nachziehen. Es ist **ein** Passwort für alle vier Geräte — die „Überlebensversicherung" aus CLAUDE.md. + - 🔎 **Nachtrag 2026-08-23 (Recherche-Session, read-only — kein Eingriff): der PSK in der Doku ist + noch der LIVE konfigurierte.** Gegengeprüft am Manager `crs326-core` (`/interface wifi security`, + Profil `sec-iot` → `cfg-iot` → SSID `dirtyvader-iot`, `datapath.vlan-id=30`, + `wpa2-psk,wpa3-psk`) — und zwar **per Fingerprint statt Klartext** (Länge + drei Zeichenpaare), + damit der Wert nicht ein zweites Mal in ein Transkript wandert. **Diese Methode ist die Merkregel + daraus:** einen Verdacht auf Übereinstimmung prüft man mit Stichproben, nicht durch Ausgeben. + - ✅ **User-Entscheid 2026-08-23 zur Git-Historie: belassen, im Nachtrag dokumentieren** — **kein** + `git filter-repo`. Begründung trägt: genau **eine** getrackte Fundstelle + ([Archiv](teilprojekte-archiv.md#tp17)), drei Commits (`e76289c` Ersteintrag 2026-07-11, + `f0d1ff9` 08-08, `7ee64b5` Doku-Split 08-23), Remote **ausschließlich** `gitea.emsenhuber.net`, + **ein** lokaler Klon. Eine History-Rewrite hätte hier also nichts gerettet, was nicht ohnehin nur + auf der eigenen Infrastruktur liegt — und den Preis (alle Hashes neu) für nichts bezahlt. + - 📊 **Warum die Rotation heute teuer ist — live gemessen 2026-08-23:** **26 der 27 WLAN-Clients des + gesamten Netzes hängen auf `dirtyvader-iot`** (`dirtyvader-main` 1, MEDIA/UNTRUSTED/GUEST je 0). + VLAN30 führt **41 Leases/Reservierungen** (5 aktuell `bound`, der Rest sind statische + Reservierungen ausgeschalteter Geräte). Neben den ~26 Shellys hängen dort **P750W** (Drucker), + **Airfryer** (`espressif`, `.180`), **SwitchBot floor-lamp**, **Twinkly** `.228`, **DTUBI** `.8`, + **SONOFF-NSPanelPro** und ein **iPhone** `.177`. ⇒ Ein Passwortwechsel ist heute eine + Batch-Aktion über ~26 Geräte, und **das ist genau die Rechnung, die TP17.1 verkleinert.** + - 🔧 **Zwei Umsetzungshinweise fürs spätere Rotations-Paket:** + **(a)** `mcp/shelly/migrate.py` hat **kein** Rotate-Kommando (nur `migrate`/`deanchor`/`auth`/ + `table`) — es bräuchte eine kleine Variante über denselben `set_sta`-Pfad. + **(b) Ein Flag-Day ist vermeidbar:** RouterOS 7 kann in `/interface wifi access-list` + **Passphrase-Overrides je MAC**. Also neuer PSK aufs Profil, Altgeräte übergangsweise per MAC mit + dem alten weiter, danach die Liste leeren. 💡 Nebeneffekt: der TP25-Befund „keine `access-list`" + bekäme damit endlich einen Zweck — und seit dem 08-23 gibt es die ComplianceRule + `wifi-access-list`, die Einträge dort auch sichtbar macht. + - **Mitzuziehen bei der Rotation** (legitime, gitignorete Ablagen desselben Werts): + `~/.secrets/credentials.env` (+ `.bak-20260808`), `routeros/.secrets/wlan-psks.env`, + `mcp/shelly/.env`. - **TP14.4 —** CF-Access-Service-Token rotieren. - ~~**Doku-Aufräumen** (`docs/doku-cleanup-session.md`)~~ ✅ **abgeschlossen 2026-08-23.** Punkte A–D (08-16), E (08-18/19) und **F — der Split** (08-23) sind durch: abgeschlossene TPs liegen jetzt in