Caddy in LXC 130 ist produktiv: 17 von 17 Zertifikaten per DNS-01 von Let's Encrypt, Dienst active+enabled, Proxy gegen Host-Header verifiziert (nautobot 302, gitea 200, pve 200, portainer 200). deploy.sh laeuft End-to-End; Token per Fingerprint gegengeprueft -- eigenes Zone:DNS:Edit, nicht das account-weite. đ´ Fund beim Durchtesten: grafana war seit Langem tot und Cloudflare Access hat es maskiert. LXC 104 stopped, konfigurativ noch auf VLAN1 (10.40.41.109), waehrend die Ingress-Zeile auf 10.40.20.109 zeigte -- eine Adresse die es fuer Grafana nie gab. Der FQDN lieferte trotzdem 302, weil das der Access-Login war. Exakt die Falle aus TP16.3 Paragraph 8, diesmal in freier Wildbahn: ein toter Dienst sieht hinter Access monatelang gesund aus. => Caddy-Zeile raus (16 Sites), LXC 104 zerstoert, aus dem Backup-Job. Die 14 PBS-Snapshots bleiben bewusst stehen -- einzige Kopie etwaiger Dashboards. hass liefert 400: bekannter trusted_proxies-Punkt aus TP16, gehoert vor die CNAME-Umstellung. Split-Horizon entschieden (User): in AdGuard zusammen mit TP23 Stufe 2. Dokumentiert, was das bedeutet -- heute liefert der DHCP in allen sieben VLANs den Core als DNS; AGH bekommt niemand. Der Schritt verschiebt die Aufloesung des ganzen Hauses in einen Container, deshalb als Paar 110/111 bauen. Die geloeschten Altlasten hiessen nicht zufaellig adguard-bf1/-bf2. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
175 KiB
BF-Netzwerk â Teilprojekte (kanonische Steuerung, Stand 2026-06-10)
Zweck: Das groĂe Netz-Projekt in einzeln durchziehbare Teilprojekte (TP) zerlegt â jedes mit klarem Scope, aktuellen Entscheidungen, Abhängigkeiten und Status. Jedes TP ist so geschnitten, dass es eine frische Session mit sauberem Kontext straight abarbeiten kann. Architektur/Historie:
~/.claude/plans/ich-will-das-delegieren-atomic-sunrise.md.đ Diese Datei fĂźhrt den Ist-Stand, den kritischen Pfad und die OFFENEN Teilprojekte. Abgeschlossene TPs stehen im Archiv â im Volltext, unverändert, mit Inhaltsverzeichnis. FĂźr den Einstieg reicht diese Datei; ins Archiv sieht man, wenn man wissen will, warum etwas so entschieden wurde. (Aufgeteilt am 2026-08-23, Doku-Session Punkt F: 2217 Zeilen waren zu 49 % Historie erledigter TPs.)
Kanonisches VLAN-Modell (gĂźltig â Ăźberschreibt ältere Tabellen)
| VLAN | Name | Subnetz (Ziel) | Zweck |
|---|---|---|---|
| 10 | MAIN | 10.40.10.0/24 | Trusted (Handy/Laptop/Apple Watch) |
| 20 | INFRA | 10.40.20.0/24 | NAS/VMs/Docker/HA |
| 30 | IOT | 10.40.30.0/24 | Smart-Home (HA-managed), Waage, Fitness-Tracker |
| 40 | MEDIA | 10.40.40.0/24 | Sonos, AppleTV, TV, VuPlus, Cast-Ziele (getauscht ggĂź. frĂźher) |
| 50 | UNTRUSTED | 10.40.50.0/24 | Spielekonsole, eBook-Reader, Low-Trust-Internet |
| 90 | GUEST | 10.40.90.0/24 | nur Internet |
| 99 | MGMT | 10.40.99.0/24 | Switch/AP/Hypervisor-Mgmt |
| 100 | WAN | (Arris-Transfer) | zum Arris-Kabelmodem (Liwest, Bridge-Mode, Public-IP an crs326-core) |
IP-BlĂścke: .1â10 Router/Gateways ¡ .11â20 Switches/APs. GW je VLAN = .1 (crs326-core). |
|||
Mgmt (VLAN99, Ist 2026-08-16): core .99.1 ¡ branch .99.2 ¡ ap1 .99.11 ¡ ap2 .99.12. |
|||
| (Historisch, Ăźberholt: âap1=.1, ap2=.2 ¡ ALLNET=.11, Omada=.12" â aus der Zeit vor dem Core-Cutover.) |
Ist-Stand (Kurz)
Stand 2026-08-18 â live gegen die Geräte geprĂźft (MikroMCP/REST), nicht aus der Doku abgeschrieben. Die Compliance-Zeile unten ist am 2026-08-23 gegen die Nautobot-API nachgezogen. (Die Fassung vom 2026-08-16 stand bis zum 18. hier und war an vier Stellen Ăźberholt â Standalone-APs, RouterOS-Versionen, âplain 1.1.1.1", 68/68. Wer diesen Block liest, liest ihn als Erstes: er wird ab jetzt bei jeder Ănderung mitgezogen, nicht nur die TP-Abschnitte.)
- Alle vier MikroTik laufen auf RouterOS 7.24 (stable, 2026-08-17 von Christoph selbst gehoben, TP27),
RouterBOOT ebenfalls 7.24 auf allen vieren (
current-firmware=upgrade-firmware, geprĂźft 08-18). - L3 + WAN-Edge =
crs326-core(CRS326-24G-2S+, Technik UG): Routing, DHCP (7 Server, 54 Reservierungen), DNS, NAT, NTP-Server fĂźr den Standort und der WG-Hub (TP10, Peersfm/dw) laufen hier. Mgmt-SVI10.40.99.1(vlan99), Gateway.1je VLAN. WAN =vlan100â DHCP-Client hält die Ăśffentliche Liwest-IP90.146.33.177/24direkt vom Arris (Bridge-Mode) â kein Double-NAT. DNS-Upstream = DoH zum CF-Gateway mitverify-doh-cert=yes(TP23 Stufe 1 â 08-18);servers=1.1.1.1steht nur noch als Bootstrap fĂźr den DoH-Hostnamen. - đĽ Die Firewall ist deny-by-default â in BEIDEN Ketten (TP5 E3/E4 â
08-18).
TP10-seal-lanistdisabled; Mgmt-Input kommt nur noch aus VLAN10, von HA (8728), von Nautobot (22) und Ăźbercf-mesh. Ein neuer Dienst Ăźber eine VLAN-Grenze braucht ab jetzt eine explizite Regel. - L2-Branch =
crs326-branch(Technik OG): reiner L2-Switch, Mgmt10.40.99.2, Uplinkether1â coreether8. - WLAN = CAPsMAN auf dem Core (TP28 â
08-17, GC-Modell nachgezogen 08-18): ap1
10.40.99.11(an coreether15), ap210.40.99.12(an branchether24), beide reine CAPs âcap enabled=yes,discovery-interfaces=vlan99. Die APs halten keine eigene WLAN-Config mehr; Kanäle, SSIDs, Security und Steering kommen vom Manager. 802.11r/k/v aktiv,ft-over-ds=yes. - SSDP-Relay (TP7.1, nachgebessert 08-25): LXC 108
mcast-relayauf pve, zweibeinig10.40.10.21(VLAN10) +10.40.40.21(VLAN40) â dafĂźr trägtcore ether13beide VLANs; mDNS macht weiterhin der Core. Läuft seit 08-25 ohne--ssdpUnicastAddrâ die Flagge verwarf die M-SEARCH der App auf dem Weg nach VLAN40 (Messung: 0 Paketevia eth1gegen 308via eth0in 20 min, 0ĂReceived SSDP Unicastim ganzen Journal seit 08-18). Der RĂźckweg läuft jetzt nativ geroutet Ăźber die längst offene RegelTP5: MEDIA->MAIN; nachgemessen kommenHTTP/1.1 200 OKvon10.40.40.193/.195an beiden MacBook-Beinen an. Unit liegt im Repo:mcast-relay/multicast-relay.service, Details als Gotcha inCLAUDE.md. â ď¸ Der Fall hatte zwei unabhängige Ursachen â nach der Relay-Reparatur suchte die App immer noch nicht (macOS-Local-Network-Gate stand auf âan" und griff nicht; Fix war Schalter aus/ein + Neustart, User-bestätigt 08-25). Beide sind erledigt. - Ausgebaut / gelĂśscht: ALLNET-
sw1und Omada-sw2sind physisch weg (2026-08-08 bzw. 2026-07-23, in Nautobot Decommissioned); Omada-Controller +omada-mcpgelĂśscht (2026-07-16); FritzBox 6660 raus seit 2026-07-01 (Liwest-Tausch auf Arris). VLAN1 ist leer (/ip arpaufbridge= 0 Einträge, 08-18) â TP19 ist geschlossen;cudy1hängt stromlos an coreether11, physischer Ausbau ist hands-on. - Kontrolle / Governance: MikroMCP fĂźr Reads/Debug (alle 4 Geräte in der Registry),
Config-Ănderungen ausschlieĂlich Ăźber Nautobot Golden Config (TP21/TP22 â Deploy-Pipeline scharf,
104/104 Compliance-Checks grĂźn, 0 Drifts bei 26 Rules Ă 4 Geräten â live gegen die API
geprĂźft am 2026-08-23; zuletzt dazugekommen:
wifi-access-list(08-22),queue(08-23, TP6) undip-firewall-mangle(08-23, TP6.1), s. TP22-Nachtrag im Archiv). (Hier stand bis zum 08-23 â100/100 bei 25 Rules" â eine Zählung, die TP6.1 am selben Tag Ăźberholt hat. Die Merkregel gilt: der Ist-Stand-Block wird bei jeder Ănderung mitgezogen, nicht nur der TP.)
đ Historische Fassung (Stand bis 2026-08-08, Topologie vor dem Core-Cutover â bewusst erhalten, nicht als Ist lesen)
ALLNET-Core
.11(FW2.2.1, VLANs 10/20/30/40/50/90/99/100; GE1/GE2/GE8 Trunk; TP1 â 2026-06-15). Omada-Switch.12(adopted, TP2 â 2026-06-15; Trunk-ALL auf P1+P2, Access-Profile auf P3-P8; Profile noch PVID=1 bis Omada-PVID-Fix). Omada-Controller.175(DS923/macvlan, mbentley 6.2, đ˘ live). omada-mcp.176(pve-LXC, StreamableHTTP, đ˘ live, 84 read-Tools; Controller-API v2 intern via christoph@emsenhuber.com). 2Ă hAP ax² (7.23.1): ap1.1(ALLNET P1) â TP4 â 2026-07-01: Router + WAN-Edge (VLAN-Subinterfaces, DHCP, DNS, NAT, Public-Edge). ap2.2(Omada P2 â Trunk). Edge-Cutover â 2026-07-01: FB6660 physisch entfernt (Liwest-Kabelmodemtausch, kein ZurĂźck), Arris-Kabelmodem im Bridge-Mode; WAN =sw1 gi16 Access VLAN100 â gi15 Trunk â ap1 ether2 â vlan100 auf bridge(NICHT ether1); ap1 hält Public-IP direkt (Liwest, kein CGNAT), Double-NAT weg. Telefonie war auf der FB und wird nicht weitergefĂźhrt. Vorarbeit: TP10-Kern durch (2026-06-27, WG-Hub live) â Bridge-Gate vorher gelĂśst. Runbook:routeros/wan-cutover-runbook.md. Kontrolle: MikroMCP (MikroTik) live ¡ ALLNET = Klickanleitungen ¡ Omada â Controller + omada-mcp đ˘.
Nächster Schritt (Stand 2026-08-25): TP31 â Caddy als Reverse Proxy fĂźr innen und auĂen.
đ Neu am 2026-08-24/25: TP31 lĂśst TP16 und TP16.2 ab und dampft cloudflared von sechs Containern auf einen ein; TP32 gibt die Nummern- und Adress-Systematik vor (und hat nebenbei die falsche Startreihenfolge auf pve repariert â HA startete vor seiner Datenbank). TP16 â , TP25 â und TP16.3 (Pilot) â sind am 24./25. durchgezogen worden.
Vorherige Fassung (Stand 2026-08-23): Christoph entscheidet â der kritische Pfad ist LEER.
đŻ Das Projekt ist in seinem Kern fertig. deny-by-default steht (TP5), Golden Config steht und meldet 104/104 compliant bei 0 Drifts (live geprĂźft 2026-08-23), WLAN steht Ăźber CAPsMAN auf dem Core (TP28), VLAN1 ist leer (TP19) â und TP6 ist beantwortet statt offengelassen: CAKE gebaut, gemessen, wieder ausgebaut. Nichts blockiert mehr etwas. đ˘ Was zuletzt wirklich etwas gebracht hat, war TP6.1 (2026-08-23): nicht Shapen, sondern Klassentrennung â NAS-Bulk
priority=8gegen interaktivpriority=1drĂźckt dieselbe Strecke unter derselben Sättigung von 40,8 auf 11,0 ms (â73 %). Die zuerst notierte DOCSIS-Erklärung aus TP6 ist damit widerlegt; der Fehler lag in der Messmethode (Last und Messung vom selben Host). đ Offen und ohne Blockadewirkung: TP25 (Fund F = 5:05-Takt bei IoT, plus die Entscheidung â5 GHz auf 20 MHz") ¡ TP16 (CF-Tunnel-HA degradiert, vier tote Alt-Tunnel) ¡ TP16.2/16.3 ¡ TP23 Stufe 2 ¡ TP24 (DC-USV) ¡ TP13/TP14.4 (beide mit fertigem Runbook) ¡ â TP17.1 VERWORFEN 2026-08-23 (Zigbee-Weg bewiesen, Ziel damit nicht erreichbar â das Gerät bleibt WLAN-Client;s9zurĂźckgebaut) ¡ â TP17.3 ERLEDIGT (Ursacheeco_modebewiesen;s23+s26repariert;eco_modeflottenweit aus, 22/22 auĂers24) ¡ âĄď¸ TP17.2 ist am 2026-08-24 in TP30 aufgegangen (Shelly-Gerätepasswort = Erstvergabe eines Credentials; TP30 ist das Sammelbecken dafĂźr) ¡ đ Alle Passwort-/Token-Rotationen sind seit 2026-08-24 TP30 (Sammel-TP) â bewusst gebĂźndelt gegen Projektende, User-Entscheid. Damit ist die ältere Einreihung âhinter TP17.1" gegenstandslos (TP17.1 ist verworfen). Etappe 1 â die Service-Accounts â ist durch; dasadmin-Passwort selbst ist nicht rotiert und bleibt es bis dahin bewusst. đ Einstieg fĂźr die nächste Session:handoff-20260824-session.mdâ â ď¸ dessen Empfehlung âStart bei der Passwort-Rotation Etappe 2" ist durch den TP30-Entscheid Ăźberholt; der Rest der Ăbergabe gilt. Ăltere Sitzungsvorschläge:handoff-20260822-naechste-schritte.md. âcrs326-coreist transaktionsfrei (seit 2026-08-22, geprĂźft): ein gemeldeter Drift ist ab jetzt echt, nicht beabsichtigt âpython3 nautobot/gc-transaktion.py status.
đ Vorherige Fassungen dieses Absatzes (2026-07-22 â 2026-08-21, bewusst erhalten)
Fassung 2026-08-21 abends (erledigt â TP25s Dead Spot ist am 08-22 repariert, TP6 am 08-23 geschlossen): Nächster Schritt: TP25 â Steering-Test in den Schlafräumen. đ Einstieg:
handoff-tp25-session-20260821.mdâ dort steht der verifizierte Ist-Stand, die Messfallen und der nächste Test. âcrs326-coreist transaktionsfrei (2026-08-22).TEST-ether3-trunk-ap1-sideboardundTEST-infra-ssid-matter-pairingsind beide zurĂźckgerollt und geschlossen; ap1 hängt wieder aufether15,ether3ist wieder untagged VLAN40. Ein gemeldeter Drift ist ab jetzt echt, nicht beabsichtigt âpython3 nautobot/gc-transaktion.py status. đ TP29 (Anwesenheitserkennung fĂźrs Energiesparen) ist als Idee angelegt, nicht auf dem Pfad. đ Die TP6-Prämisse ist am 2026-08-20/21 gemessen (Runbook §5): formal Fall B (+28âŚ+47 ms unter Dauer-Upload), aber im Videocall nicht wahrnehmbar â kein einziger Problem-Klick Ăźber sechs Lastphasen. Laut war stattdessen der Funk: Sticky Client + Band-Ping-Pong, zwĂślf Wechsel in neun Minuten, je Wechsel bis zu 4 s ohne Durchsatz âtp25-wlan-roaming-messung-20260820.md. Deshalb steht jetzt TP25 vor TP6; TP6 bleibt offen und begrĂźndet, aber nachrangig.Vorherige Fassung (Stand 2026-08-18, erledigt): TP6 wird hier seit Monaten als âDAS Ziel" gefĂźhrt, aber
docs/call-quality-diagnosis.mdhat den Bufferbloat 2026-06-16 bereits gemessen (A/A+, âCAKE wäre marginal, nicht deployt"). Die Messung stammt aus der FritzBox-Ăra, der Edge ist seither getauscht â also einmal gegen den heutigen Edge nachmessen und dann entscheiden. Blocker gibt es keine mehr. TP5 ist in der Nacht auf den 18. abgeschlossen worden (Etappe 3 + 4: deny-by-default inforwardundinput, MGMT isoliert,seal-lanabgeschaltet), TP23 Stufe 1 (DoH auf dem Core) ebenfalls. Nebenher offen, blockiert nichts: TP25 (Signal-Boden + Re-Walk), TP28-Rest (die fĂźnfwifi-*-Features vom AP-Scope auf den Core umhängen â die einzigen verbliebenen Compliance-Drifts), TP7.1 (SSDP-Relay fĂźr die macOS-Sonos-App), TP16.3, TP24. Vorherige Fassung (Stand 2026-08-14, Ăźberholt): âTP5 â Deny-by-default am Ende vonforward." Alles Davorliegende ist durch: CRS326-Bring-up + L3-Umzug ap1âcrs326-core(TP15/TP21.1 â 2026-08-08), WLAN-Neuprovisionierung ohne CAPsMAN (TP3 â 2026-08-08), Nautobot-Plattform + Fleet-Adoption + Deploy-Pipeline (TP21/TP22 â 2026-08-13). Danach TP6 (CAKE) = das Projektziel. Kleine Follow-ups nebenher: DoH-Cloudflare auf core, DC-USV (TP24, seit 2026-08-16 eigener TP). ⪠Omada-PVID-Fix ist obsolet (User-Entscheid 2026-07-22 â Omada spielt seit der TP15-Korrektur keine Rolle mehr im Netz, nie mehr aufgreifen). Vorherige Fassung (Stand 2026-07-22, erledigt): âTP15 CRS326-Bring-up als neuer L3-Core, danach WLAN-Neuprovisionierung ohne CAPsMAN; TP5 folgt nach TP21/CRS326-Adoption."
đŻ Ziel: sauberes System âfrom scratch", keine Leichen/Altlasten. Migrations-Session-Endstand = VLAN1 + altes cudy-WLAN komplett weg (VLAN1 nur noch Mgmt,
defconf-Client-DHCP zurĂźckgezogen, cudy-Uplinks aufs Ziel-Client-VLAN getaggt oder cudy abgebaut). Unterpunkte/Aufräum-Liste bei Migration: (a) die Interim-Härtung ap2wifi1/wifi2 frame-types=admit-only-vlan-tagged(TP3.1, 2026-07-06) bleibt gĂźltig â verschwindet automatisch mit VLAN1; (b)â kein Provisorium mehr (2026-08-13, TP3.3): Steering ist fester Bestandteil des Golden-Config-Templates + ComplianceFeaturest-main rrm/wnm= reines Roaming-Provisoriumwifi-steeringâ es war die Neuprovisionierung, die es stillschweigend verloren hatte; (c)cudy1 = verbleibender aktiver VLAN1-Leakâ ERLEDIGT (User-bestätigt + verifiziert 2026-08-14): cudy1 ist offline.core ether11trägt kein Link (keinR-Flag), Nautobot-Status Offline (TP22 Schritt 5). Damit existiert kein aktiver VLAN1-Leak mehr; der Dual-DHCP-Race ausproject_vlan1_dhcp_incidentist Historie. Der formale Teardown (Gerät ausbauen, Doku/Inventar) bleibt TP19. â ď¸ 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. â Genehmigte Ausnahme #4 (User, 2026-08-16): die WireGuard-Zeilen des Cloudflare-Mesh-Bring-ups aufcrs326-core(TP16.1). DĂźrfen direkt via MikroMCP/REST gesetzt werden. BegrĂźndung ist strukturell, nicht bequem: TP22-Regel 1 schlieĂt jede Sektion mit<<REDACTED>>generell vom GC-Push aus, und/interface wireguardist genau so eine â ein privater SchlĂźssel ist Ăźber Golden Config nicht deploybar. Damit ist die frĂźhere TP16.1-Zusage âCRS326-Zeilen laufen regulär Ăźber GC" gegenstandslos. Auflage: vorher/system backup, danach Ist-Stand als intended config zurĂźck nach Nautobot. Scope-Grenze: nur der Mesh-Bring-up aufcrs326-coreâ nicht spätere WG-Ănderungen, nicht andere Geräte, und sie verlängert sich nicht automatisch. Langfristige AuflĂśsung = das Secret-Handling-Design in TP16.1 (Privkey ist Geräte-Identität, nicht Config). â Genehmigte Ausnahme #2 (User, 2026-07-22): der CRS326-Bring-up (TP15). Die Grundkonfiguration beider CRS326 â Management-IP, Bridge, VLAN-Filtering, Trunks/Access-Ports â darf direkt via MikroMCP/Winbox gemacht werden. BegrĂźndung = Henne-Ei: Golden Config kann nicht auf ein Gerät pushen, das im Werkszustand keine erreichbare IP hat, und die GC-Templates existieren noch nicht (TP21 âoffen: Templates/intended config"). Auflage: der so entstandene Ist-Stand wird anschlieĂend als intended config nach Nautobot zurĂźckgeschrieben, danach Ăźbernimmt GC â die Ausnahme deckt das Bootstrapping, nicht den Dauerbetrieb. Scope-Grenze: gilt fĂźr die beiden CRS326 im Bring-up. Sie hebt die Regel fĂźr ap1/ap2 nicht auf (deren Neuprovisionierung läuft weiterhin Ăźber GC) und verlängert sich nicht automatisch auf spätere CRS326-Ănderungen. Damit ist die frĂźhere Formulierung in TP16.1 (âCRS326-Config läuft regulär Ăźber Nautobot GC oder braucht eine eigene, dann neu zu erteilende Ausnahme") erfĂźllt â dies ist diese Ausnahme.
Offene Teilprojekte
Alles hier hat noch offene Arbeit. Abgeschlossenes steht im Archiv (Volltext, mit Inhaltsverzeichnis) â die Zuordnung ist mechanisch: ein TP wandert erst dann ins Archiv, wenn nichts mehr daran zu tun ist. Wo nur ein Sub-TP offen war, steht dieses hier und das erledigte Eltern-TP im Archiv (so bei
TP17.2 â TP17(TP17.2 ist am 2026-08-24 in TP30 aufgegangen und kein eigenes TP mehr) und TP20.1 â TP20).
TP5.1 â DNS-Visibility & Flow-Observability fĂźr Low-Trust-Geräte (Airfryer-Fall) ⸠vorgemerkt
- Kontext (2026-07-08/09): Airfryer âairschreier" (Philips/Versuni, ESP,
10.40.30.180) bekam per DHCP-Option 6dns 1.1.1.1als Override, weil das OTA-Update Ăźber den ap1-DoH-Gateway-Pfad nicht durchging (DoH-Latenz beim primitiven ESP-Stack â kein Content-Block, via Gateway-Logs bewiesen, s.memory/ref_esp_ota_doh_not_block). Nebenwirkung: public 1.1.1.1 = anonymer Consumer-Resolver â accountgebundener Gateway-DoH (px35ynlol3.cloudflare-gateway.com) â DNS-Sicht auf das Gerät weg, Gerät umgeht zudem die Filterung. - (a) DNS-Redirect statt Geräte-Override (der dauerhafte Fix): dst-nat âUDP/53 (+TCP/53) von Low-Trust-Src â auf einen plain Resolver umbiegen" gibt Logging zurĂźck UND funktionierendes OTA (kein langsamer DoH-Pfad fĂźrs Gerät). Redirect-Ziel-Optionen: (i) ap1-Resolver mit nicht-DoH-Upstream fĂźr dieses Src-Set, (ii) direkt public 1.1.1.1 (dann nur Flow-Logging), (iii) eigener plain-Resolver. Sauberer als âGerät verschwindet auf 1.1.1.1". Verortung: Teil des UNTRUSTED-Internet-only-Pinnings (TP5-âOffen"); Entscheidung v50-DNS-Policy (gefiltert vs. plain) hängt dran.
- (b) Live-Torch als Ad-hoc-Observability: DNS ist bei direktem 1.1.1.1 blind, Flows nicht (NATen Ăźber ap1).
torchaufvlan30/vlan50gefiltert auf die Geräte-IP zeigt Ziel-IPs live (Versuni â AWSeu-west-1IoT erkennbar). Voraussetzung: Gerät aktiv. Merkregel: Airfryer nur online wenn er kocht â Capture ans Einschalten koppeln. - Abh.: UNTRUSTED-Move des Airfryers (Kandidat, s. VLAN50) + TP5-Deny-by-default. Kein Blocker.
TP8 â Identity & Access-Control ⸠research-gated
- RADIUS = FreeRADIUS auf der NAS (âď¸ User-Manager v5 kann KEIN LDAP â openldap nur via FreeRADIUS anbindbar).
- EAP-TLS (Zert) je Gerät + dynamische VLAN-Zuweisung (RADIUS-Attribut
Tunnel-Private-Group-ID). Einfachste Heim-Alternative: pro VLAN eine SSID mit WPA3-PSK (kein RADIUS) â Abwägung Komfort vs. Admin-Aufwand. - Abh.: TP3. (Research erledigt, s. TP-R.)
TP11 â Monitoring & Mgmt-Control-Plane ⸠research-gated
- MikroMCP + omada-mcp + SNMP/icinga-mikrotik, RoMON, NTP, E-Mail-Alerts, Netwatch. â Teil von
docs/research/routeros-capabilities.md. - CF-Tunnel #1033 Track A â
live (2026-06-30): Round-Robin-1033er Ăźber 3 asymmetrische Connectors behoben
durch Reduktion auf pve-only Connector (NAS + macmini scheiterten an pve-lokalen/stalen Origins). SSoT:
docs/cf-tunnel-mapping.md. Track B/C läuft Ăźber TP14 (Ingress bereits v116 .41â.20 fĂźr NAS; pve-ConnectorâVLAN20 via TP14 Session B = #1033-Zielbild).
TP12 â IPv6 (intern + extern, 3 Standorte) ⸠research-gated
- Konzept fĂźr FM/BF/DW. â TP-R.
TP12.1 â IPv6 im LAN (ULA) + v6-Firewall ⸠đ KONKRET GEWORDEN (2026-08-22), Treiber: Matter/Thread
Anlass: der runde IKEA-FĂźhler TIMMERFLOTTE (Matter over Thread) lieĂ sich nicht anlernen â âpairing failed" in der Companion-App. Ursache ist nicht die Firewall, sondern dass zwischen VLAN10 und VLAN20 Ăźberhaupt kein IPv6 geroutet wird. Damit ist TP12 vom Konzept-TP zu einem Punkt mit einem konkreten, wiederkehrenden Schaden geworden.
-
Befund am
crs326-core(live gelesen 2026-08-22):- IPv6-Adressen: ausschlieĂlich Link-Local (
fe80::âŚ) auf jedem Interface. Keine ULA, keine GUA. - IPv6-Routing-Tabelle: nur
::1/128undfe80::/64je Interface. Keine Route auf den Thread-OMR-Prefixfd92:505a:c64e:1::/64und keine auffd03:cace:953f:e13d::/64(den On-Link-Prefix, den der OTBR auf VLAN20 wirbt). /ipv6 nd: Default-Eintrag,advertise-dns=noâ es gibt aber ohnehin keine Prefixe zu werben.
- IPv6-Adressen: ausschlieĂlich Link-Local (
-
đ´đ´ Der eigentliche Kostenpunkt ist nicht IPv6, sondern die Firewall:
/ipv6 firewall filterist komplett leer. Heute harmlos, weil ohne Adressen nichts geroutet wird. In der Sekunde, in der Adressen vergeben werden, steht IOTâMAIN offen, GUESTâINFRA offen â an TP5 vorbei. Das gesamte TP5-Regelwerk muss vorher in v6 nachgebaut sein, sonst reiĂt dieser TP genau die Segmentierung auf, die TP5 am 2026-08-18 geschlossen hat. Das ist die Arbeit, nicht die Adressvergabe. -
đ Warum Matter das braucht: Commissioning läuft in zwei Etappen. Etappe 1 (BLE zum Gerät) ist netzunabhängig. In Etappe 2 muss der Commissioner â das iPhone â das Gerät auf dem operativen Thread-Netz wiederfinden (DNS-SD
_matter._tcp, dann CASE). DafĂźr braucht das Telefon eine IPv6-Route in den OMR-Prefix hinein. iPhone hängt auf VLAN10, OTBR auf VLAN20 â Etappe 2 bricht ab. Die ~30 bereits laufenden Matter-Knoten widersprechen dem nicht: HA und OTBR sitzen auf demselben Host (wpan0ist lokal), im Betrieb quert nichts die VLAN-Grenze. Nur das Anlernen tut es. -
â ď¸ Zwei Fallen, die den naiven Weg verbauen:
- (a) Der OMR-Prefix ist generiert und wandert. Am 2026-08-22 um 17:33 (OTBR-Neustart) sind alle
Knoten von
fd92:505a:c64e:1::/64auf Mesh-Localfd66:986:170:bb1a::/64gefallen â und Mesh-Local ist per Definition nicht off-mesh routbar. Eine statische Route auf den OMR-Prefix ist also nur so stabil wie der nächste Neustart. Ihn im Thread-Dataset festzunageln formiert das Netz neu â mit 30+ produktiven Knoten daran kein Nebenbei-Change. - (b) RouterOS lernt fremde RAs nicht. Der OTBR wirbt den OMR-Prefix per RA mit Route-Information-Option auf VLAN20. Der Core mĂźsste die annehmen â als forwardender Router fĂźr dieses Interface tut er das nicht sauber.
- (a) Der OMR-Prefix ist generiert und wandert. Am 2026-08-22 um 17:33 (OTBR-Neustart) sind alle
Knoten von
-
đĄ Dritter Baustein: DNS-SD Ăźber die VLAN-Grenze.
mdns-repeat-ifacesam Core (vlan10/20/30/40/90) ist IPv4. FĂźr Matter-Discovery bräuchte es zusätzlich einen v6-fähigen Reflector â dermcast-relay-LXC (108) kann das prinzipiell, aber als zweite Instanz mit Beinen in VLAN10+VLAN20 (SSDP-Instanz ist VLAN10+VLAN40, s. Gotcha in CLAUDE.md). -
â Der Workaround, der das umgeht statt lĂśst: iPhone zum Anlernen auf VLAN20 â dann sind Telefon und Border Router auf demselben L2-Link, der OTBR wirbt dort On-Link-Prefix und Route, und iOS wertet beides aus.
cfg-infra/ SSIDdirtyvader-infra(dp-infra, VLAN20,sec-inframit PSK) existiert am Manager bereits, ist nur in keinerprovisioning-Zeile als Slave hinterlegt. Runbook:docs/matter-pairing-infra-ssid-runbook.md. -
â 2026-08-22 durchgefuehrt und wieder zurueckgebaut.
dirtyvader-infratemporaer auf ap2 (TransaktionTEST-infra-ssid-matter-pairing, Scopewifi-provisioning), iPhone dort hinein, TIMMERFLOTTE per Companion-App angelernt â liefert 25,44 °C / 53,1 % rF / Batterie 100 % (Bereich Technik UG). Danach SSID deaktiviert;cfg-infra/dp-infra/sec-infrableiben auf User-Wunsch inaktiv am Manager stehen, damit der Weg beim naechsten Thread-Geraet ein Zweizeiler ist. Beide Akten geschlossen,crs326-coretransaktionsfrei. â Der Workaround ist damit bewiesen â und TP12.1 bleibt trotzdem offen: er umgeht das fehlende IPv6-Routing, er behebt es nicht. -
â Der Weg, der das Problem dauerhaft erledigt: Matter-Server-Option
ble_proxy: true(ab HA 2026.06, hier 2026.8.3). Dann kommissioniert HA selbst Ăźber seinen Bluetooth-Stack; das Telefon ist raus und die VLAN-Grenze wird nie berĂźhrt. Braucht eine connectable BLE-Quelle â Shelly-Proxies sind reine Advertisement-Scanner (kein GATT), ein ESP32 als ESPHome-BT-Proxy (active: true) reicht. Der ESPHome Device Builder ist bereits installiert. Damit wäre TP12.1 fĂźr Matter optional. đ´ User-Entscheid 2026-08-22: ESP32 wird NICHT angeschafft. Damit bleibtble_proxyzwar an (schadet nicht, kostet nichts), ist aber wirkungslos â HA hat keine connectable BLE-Quelle und wird auch keine bekommen. Konsequenz, die man beim nächsten Thread-Gerät kennen muss: der Weg ist dann wieder die temporäre-infra-SSID nach dem Runbook. Die ist inzwischen ein Zweizeiler, weilcfg-infra/dp-infra/sec-infraam Manager stehen bleiben â aber sie ist jedes Mal ein Config-Change am Core plus eine Transaktion. Wer das dauerhaft loswerden will, muss TP12.1 bauen (v6-Firewall zuerst); ein dritter Weg ist damit nicht mehr vorgesehen. -
đ Nebenbefund 2026-08-22, gehĂśrt zur Thread-Gesundheit, NICHT zu IPv6: drei Matter-Knoten flappen dauerhaft â
@1:a(âDiele OG/Treppenauge"),@1:fund@1:10. Muster im Matter-Server-Log:IpServiceStatus ⌠Resolving (address is unreachable), dannoffline grace period expired, marking unavailable, im Abstand von 15â30 Minuten, Ăźber Stunden. Die Ăźbrigen ~20 Knoten sind stabil, es ist also kein Border-Router- oder Fabric-Problem. â ď¸ Vor einer Diagnose die Sonderlage von heute abziehen: der OTBR ist am 2026-08-22 um 17:33 neu gestartet (Knoten fielen kurzzeitig von OMRfd92:âŚauf Mesh-Localfd66:âŚzurĂźck), und ap1 war zwischenzeitlich vom Netz. Erst nachsehen, ob das Flappen danach noch besteht â sonst diagnostiziert man das Nachbeben eines Umbaus. Erste Verdachtsrichtungen, wenn es bleibt: Thread-Routing/Parent-Wechsel dieser drei Knoten, schwache Funkstrecke zum nächsten Router-Knoten, oder eine ICD-/Sleepy-End-Device-Eigenheit dieser Geräteklasse. -
Abh.: hängt an nichts. Blockiert nichts â auĂer kĂźnftige Thread-Geräte, solange weder
ble_proxynoch die-infra-SSID steht. Reihenfolge innerhalb des TP ist zwingend: v6-Firewall nachbauen â dann erst Adressen vergeben. GehĂśrt unter TP12 (Gesamtkonzept 3 Standorte), ist aber allein fĂźr BF ausfĂźhrbar.
TP13 â âBotschafts-WLANs" ⸠đ AUSFĂHRBAR (Runbook 2026-08-19) â docs/tp13-botschafts-wlan-runbook.md ¡ fun/low-prio
đ Am 2026-08-19 Ăźberarbeitet: der Technikteil beschrieb noch Standalone-APs (SSIDs entstehen seit TP28 am Manager, also ein Deploy statt zwei), und der Entwurf ânur
ssid=, kein Security" war ein Denkfehler â eine SSID ohne Security ist ein offenes WLAN, also genau der Fall, den der Rechtsvorbehalt ausschlieĂen soll. Richtig: PSK, den niemand kennt. Dazu die Datapath-Falle (Slave-VAP ohnevlan-idlandet ungetaggt in der Bridge â dieselbe Mechanik wie der 14-h-Ausfall).
- Idee: eine/mehrere Broadcast-only-SSIDs als âschwarzes Brett" an die Funk-Nachbarschaft â der SSID-Name ist die Botschaft (z.B.
Kanal-11-bitte-freihalten,WLAN-Tuning-siehe-Portal). Optional ein offenes WLAN mit Captive-Portal auf eine statische Info-HTML (Kanalabsprache, Auto-Kanalwechsel-Bitte). Leitgedanke: wer die SSID sieht, kann auch stĂśren â die Infoseite erreicht genau die Zielgruppe. Technik (jetzt einfach, da WLAN standalone seit TP3-Rebuild): reine Namens-SSIDs = zusätzlicheâ ď¸ Ăberholt 2026-08-19, in zwei Punkten:/interface/wifiSlave-VAPs auf wifi1/wifi2 mit eigenerconfiguration(nurssid=, kein Security/Datapath)- (a) WLAN ist seit TP28 nicht mehr standalone. SSIDs entstehen am Manager
crs326-core(9configuration-, 6datapath-Objekte, 4provisioning-Zeilen â live gelesen 08-19). Das ist fĂźr TP13 sogar einfacher: ein Deploy statt zwei. - (b) đ´ âkein Security" ist ein offenes WLAN â genau das, was der Rechtsvorbehalt unten ausschlieĂen will. Richtig ist eine SSID mit WPA2/WPA3-PSK, den niemand kennt: sie beacont den Namen, ist aber nicht beitretbar.
- Captive-Portal-Variante (RouterOS-Hotspot, isoliertes VLAN,
walled-garden) bleibt als Option bestehen â s. Rechts-Gate unten.
- (a) WLAN ist seit TP28 nicht mehr standalone. SSIDs entstehen am Manager
Umsetzungs-Skizze: ⌠Beacon-SSIDs inâ diese Dateien sind fĂźr den WLAN-Teil Historie (die CAPs sind auf dierouteros/.secrets/ap{1,2}-prov-base.rscergänzen âŚcap-Zeile eingedampft). Aktuelle Umsetzung:docs/tp13-botschafts-wlan-runbook.md(2026-08-19).- đ´đ´ Die Falle, die dort ausfĂźhrlich steht: ein Slave-VAP ohne explizite
vlan-idam Manager landet ungetaggt inbridgeâ weil der CAP vom Manager-Datapath nur dievlan-idĂźbernimmt. Das ist dasselbe Leck wie TP3.1 (cfg-main-2gohne datapath) und dieselbe Mechanik wie der 14-h-Ausfall vom 08-18. Die Botschafts-SSID braucht deshalb einen Datapath mit totemvlan-idâ PSK und toter Datapath, nicht eines von beidem. - â
VAP-Budget geprĂźft (live 08-19), unkritisch:
max-interfaces=16je Radio, belegt sind 4 (5 GHz) bzw. 5 (2,4 GHz). Die Grenze ist Airtime, nicht die Zahl â jeder VAP beacont eigenständig. Empfehlung: genau eine SSID, auf 2,4 GHz (mehr Reichweite = mehr Nachbarn, und 5 GHz bleibt fĂźr Nutzverkehr frei).
- đ´đ´ Die Falle, die dort ausfĂźhrlich steht: ein Slave-VAP ohne explizite
- â ď¸ Recht vor Scharfschalten prĂźfen (User privat, AT): offenes WLAN + Portal berĂźhrt Impressumspflicht/StĂśrerhaftung â reine Namens-SSIDs ohne offenen Zugang sind unkritisch (kein Fremd-Datenverkehr); im Zweifel nur die Beacon-Variante.
- Abh.:
TP3-Rebuild â (Standalone-APs â SSID-Ănderung = 1 Deploy/GC-Job)â TP28 â (CAPsMAN auf dem Core) + TP22 â (GC-Deploy-Pipeline). SSID-Ănderung = ein Deploy auf den Core; Direkt-Edit am Gerät ist durch den Governance-Entscheid ausgeschlossen.
TP14.4 â Session D: CF-Access-Profil fĂźr Claude ⸠đ AUSFĂHRBAR (Runbook 2026-08-19) â docs/tp14.4-cf-access-token-runbook.md ¡ nicht cutoff-kritisch
đ Ist-Stand geprĂźft: in
mcp/cloudflare/.envstehen wederCF_ACCESS_CLIENT_IDnoch_SECRETâ es ist also nichts halb erledigt. â ď¸ Das Secret existiert nur im Moment der Rotation. Abnahme braucht beide Fälle (mit Headern antwortet / ohne Header 403), sonst ginge ein bypass-Hostname wievwfälschlich als Erfolg durch. Kein CF-Write erfolgt.
- CF-Token âclaude code mcp" hat jetzt
Access: Service Tokens: Write+Readâclaude-mcprotieren (POST âŚ/access/service_tokens/{id}/rotate) âCF_ACCESS_CLIENT_ID/_SECRETinmcp/cloudflare/.env(chmod600). Memoryref-cf-access-claude-profile. - đ Runbook:
docs/tp14.4-cf-access-token-runbook.md(2026-08-19). Ist-Stand verifiziert:mcp/cloudflare/.enventhält bisher wederCF_ACCESS_CLIENT_IDnoch_SECRETâ es ist nichts halb erledigt. đ´ Das Secret wird nur bei der Rotation ausgegeben, wer es nicht sofort schreibt, muss erneut rotieren. Abnahme = ein Aufruf mit den Headern (antwortet) und einer ohne (403) â der Erfolgsfall allein beweist nichts, der Hostname kĂśnnte aufbypassstehen.
TP16 â CF-Tunnel: Round-Robin killen + reziprokes HA ⸠â
HA WIEDER VOLL (2026-08-24) â Kern 2026-07-10 â docs/cf-tunnel-mapping.md §10 + §15, #1033
- â
GEFIXT 2026-08-24 â Ursache war ein
docker stop, kein QUIC-Flap. Die beiden macmini-Connectoren (cloudflared-bfnas,cloudflared-bfpve) standen aufExited (0), beidefinishedAtauf derselben Sekunde2026-07-21T13:00:53, bei korrekt gesetztemrestart=unless-stoppedundhttp2. Fix =docker startder zwei, sonst nichts. Abnahme: alle drei bf-Tunnel je 2 Connectoren / 8 conns, und 36 Anfragen Ăźber 6 FQDNs beider betroffener Tunnel mit530er = 0. Details§15.- đ´ Die Datierung im Befund unten war falsch: degradiert seit 2026-07-21, nicht seit dem 08-16 â der 08-16 war der Tag der Entdeckung. Vier Wochen unbemerkt.
- đ´ Die eigentliche Lehre ist die NachweislĂźcke: ein Tunnel mit 1 von 2 Connectoren meldet
healthy. Ăber den Tunnel-Status ist die Degradation unsichtbar, nur die Connector-Anzahl zeigt sie. â Check nach TP11:connectoren < 2je bf-Tunnel = Alarm. Ein HA-Design ohne Zähler auf die Redundanz ist kein HA-Design.
- đ UrsprĂźnglicher Befund 2026-08-16 (Historie, Ursache s.o.):
bf-mm= 2 Connectoren (je 4 conns) â ¡bf-nas= 1 Connector (3 conns) đ ¡bf-pve= 1 Connector (4 conns) đ .- Bedeutung: die Dienste hinter
bf-nas(gitea, grafana, pve-mcp, vw, ds-bf, nautobot) undbf-pve(pve, ccu, iobroker, z2m25, portainer, hass, ha-mcp) hängen jeweils an einem einzigen cloudflared-Prozess. Fällt dessen Host aus, sind sie weg â genau der Zustand, den TP16 beseitigt hat. Kein530/Round-Robin-Problem (das bleibt strukturell gelĂśst), sondern Redundanzverlust. Bekanntes Muster: identisch zum Incident vom 2026-07-16đ´ war es NICHT â s. Fix oben. Ursprungstext: Bekanntes Muster: identisch zum Incident vom 2026-07-16 (macmini-Connectoren flappten unter QUIC â FixTUNNEL_TRANSPORT_PROTOCOL=http2). Diesmal sind die macmini-Connectoren oben (bf-mm hat 2), es fehlt je ein GegenstĂźck auf NAS/pve. Nächster Schritt (eigene Session): auf NAS und pve nachsehen, welcher der beiden cloudflared-Container nicht läuft, und ob es derhttp2-Konventionsfall ist.
- â
GELĂSCHT 2026-08-24 (User-Entscheid âalle vier"):
openclaw,coolify,johnny2,TeilzeitCharliesind Ăźber die CF-API entfernt, alle vier mitsuccess: true. Gegenprobe: 5 Tunnel verbleiben (bf-mm/bf-nas/bf-pveje 2 Connectoren,fmundterpene-dbje 1 â beide standortfremd bzw. eigenes Projekt, kein Defekt). Damit sind auch die letzten VLAN1-Origins (10.40.41.147/.148/.139/.133) aus der Cloudflare-Config verschwunden â der Rest von TP19. - đ UrsprĂźnglicher Nebenbefund (Historie): Alt-Tunnel mit VLAN1-Origins (alle
down, 0 Connectoren, daher aktuell harmlos):**openclaw(â10.40.41.147/.148/.139),coolify(â10.40.41.133),johnny2,TeilzeitCharlie. â ď¸openclawbeanspruchtn8n.emsenhuber.net, das produktiv aufbf-mmläuft â käme der Tunnel je wieder hoch, entstĂźnde exakt das alte Round-Robin-Muster auf diesem Hostname. Empfehlung: die vier toten Tunnel lĂśschen (user-gated, LĂśschen ist nicht umkehrbar) đľ BegrĂźndung korrigiert 2026-08-24: die Sorge âkäme der Tunnel wieder hoch, entstĂźnde das alte Round-Robin auf diesem Hostname" ist so nicht richtig â welcher Tunnel einen Hostname bedient, entscheidet das DNS, und live zeigt kein einziger CNAME auf die vier (n8nzeigt korrekt aufbf-mm). Ein hochkommenderopenclawwäre inert. Der reale Pfad ist ein aktivescloudflared tunnel route dns, das den CNAME umschreibt. â LĂśschen bleibt richtig â als Hygiene und um genau diese Falle zu entfernen, nicht als StĂśrungsbehebung. â gehĂśrt fachlich zu TP19 (VLAN1-Retirement:.41.133war eines der âunidentifizierten VLAN1-Geräte" aus TP19 B1.2 â hiermit als coolify-Origin identifiziert).
â Umgesetzt (2026-07-10, eigene Session): reziprokes 3-Tunnel-HA live (bf-nas
70d6a4cf/ bf-pvef7fdf3a6/ bf-mm7a322261), 6 Connectoren (2/Host, je Fremdhost), 19 FQDNs Loop-Smoke 0Ă530, HA per Host-Ausfall-Sim bewiesen. Round-Robin-#1033 strukturell weg. As-Built =docs/cf-tunnel-mapping.md §10. Schritt 5 Access-Strang:â đ´ GESTRICHEN (User-Constraint 2026-08-14, s. TP16.2). Verbleibend offen:vwbypassâgeschĂźtzt via WARPhass/ha-mcp400/403;gateway-dw(WGâ404) klären.
-
Symptom (User): FQDNs Ăźber CF werden sporadisch / âsehr unsicher" aufgelĂśst = #1033-Muster zurĂźck (âjeden 3. Schuss eine Niete"). User hat alle 3 cloudflared-Images + Container aktualisiert/neu gestartet.
-
â Root-Cause endgĂźltig (User-Diagnose bestätigt): macvlan/ipvlan-Host-Isolation. Ein cloudflared-Connector ist blind fĂźr macvlan/ipvlan-Container auf seinem EIGENEN Host (Linux-Kernel-Regel), erreicht aber Fremdhost-L2 + co-lokierte Bridge-Container. Mehrere Connectoren auf EINEM Tunnel = geteilter Ingress + CF-Round-Robin â jede Origin, die auf dem Host eines Connectors liegt, fällt bei ~1/N aus. Strukturell, nicht durch âOrigins fixen" heilbar. Bsp:
omada .20.175/pve-mcp .20.173/gitea .20.157/grafana .20.109= NAS-macvlan â vom NAS-Connector NICHT erreichbar. -
Invariante: innerhalb EINES Tunnels ist kein RouteâConnector-Pinning mĂśglich (alle Connectoren teilen Ingress, CF round-robined). âAusgewählte Routen fĂźr ausgewählte Connectoren" = getrennte Tunnel.
-
Ziel-Design (HA): reziproke Per-Host-Tunnel â jeder Host-Dienst wird von den Connectoren der ANDEREN Hosts bedient (nie vom eigenen):
Tunnel (= Dienste eines Hosts) Connectoren auf HA pve-Dienste NAS + macmini 1 abdrehbar NAS-Dienste (omada/pve-mcp/gitea/grafana/âŚ) pve + macmini 1 abdrehbar macmini-Dienste ( .20.167)pve + NAS 1 abdrehbar 3 Tunnel, jeder Host fährt 2 cloudflared â Host-Ausfall â jeder Tunnel âĽ1 Connector = voll HA. Voraussetzung: jede Origin L2-erreichbar.
-
Ist-Inventory (live 2026-07-10, s.
cf-tunnel-mapping.md §9): Ingress v119, 24 Hostnames, 2 live Connectoren. DOWN/stale:pbs .20.135,nginx-bf .41.123(noch VLAN1!),hermes+hermes-geli .20.167. Zu klären (Host/Netz):vw .20.127/ccu .20.232/iobroker .20.107/z2m25 .20.106â ggf.vw/ccuauf VLAN20-macvlan heben.gateway-dw(192.168.178.1) = WG-Sonderfall. -
CF-Access-Strang (verzahnt, s. TP11 Track-B):
hass-400 in der HA-iPhone-App = CF-Access davor (Companion-App kann Access-Login nicht) â Fix ohne Passthrough: iPhone in WARP enrollen (Device-Identity erfĂźllt Access; âWarp Login App" existiert bereitsallow:christoph).â ď¸đ´ Ăberholt (2026-08-14):vw= aktuellbypass(Ăśffentlich!) â von bypass auf geschĂźtzt heben.vwBLEIBT bypass â harter User-Constraint, Härtung stattdessen Ăźber TP16.2. âPassthrough-Hosts sind die kritischen" (User). -
Umsetzungs-Reihenfolge (fĂźr die eigene Session): (1) Reachability-Matrix je Host (pve/NAS/macmini â jede Origin, read-only) BEVOR gruppiert wird; (2) Interim-Sofortfix: bf-Tunnel auf pve-only (pve erreicht alles auĂer gateway-dw) â 0Ă1033, reversibel; (3) reziprokes 3-Tunnel-HA bauen (CNAMEs re-pointen, 6 Connectoren, Token je Tunnel; NAS/macmini-Alt-Token entfernen); (4) tote Origins bereinigen; (5) Access-Strang (WARP + vw); (6) Loop-Gegentest.
-
Abh.: TP14.1/14.2 â . Verwandt: TP11 (CF-Tunnel-Track-B/C + Access), #1033. SSoT:
docs/cf-tunnel-mapping.md. Memoryproject_cf_tunnel_1033. -
â Incident 2026-07-16 (User unterwegs, WARP âspinnt", keine BF-IPs mehr) ⸠Public-FQDN-Teil gefixt: macmini-Connectoren (
cloudflared-bfnas/-bfpve) flappten live unter QUIC/UDP (Docker-Desktop-Bridge-NAT) âbf-nas/bf-pvevon 2 auf 1 Connector degradiert (HA faktisch weg, nicht down). Fix: beide aufTUNNEL_TRANSPORT_PROTOCOL=http2umgestellt (rollend, 0 Downtime), wieder voll HA. Konvention: macmini-Connectoren kĂźnftig immerhttp2. ICMP-Befund (getrennt, strukturell): TCP Ăźber die WARP-Route ging Ăźberall, ICMP nicht (fm 36 %/bf 100 %/dw 100 % Loss) â cloudflared ist QUIC-Proxy, kein WireGuard. Kurz als âbf-pve-Route wegen USV" notiert (Commit1c1a676) â REVIDIERT (BegrĂźndung invertiert: bf-pve-Connectoren laufen auf NAS+macmini, nicht pve). Details:docs/cf-tunnel-mapping.md §13. â Richtungswechsel fĂźr Private Access = TP16.1.
TP16.2 â Härtung der Ăśffentlich erreichbaren Dienste (bypass-Strang) ⸠đ KONZEPT (2026-08-14), Umsetzung offen
- đ´ HARTER CONSTRAINT (User 2026-08-14):
vwwird NICHT WARP-/Access-geschĂźtzt. Gilt dauerhaft, nicht âvorerst". BegrĂźndung (technisch belastbar, nicht Bequemlichkeit): die Bitwarden-Clients (Browser-Extension, Mobile, Desktop) kĂśnnen den interaktiven Access-Login nicht durchfĂźhren â dasselbe Muster, das die HA-Companion-App auf400laufen lässt. Ein Passwortmanager hinter einem Client, den man im Notfall (fremdes Gerät, Neuinstallation, Handyverlust) nicht installieren kann, ist ein Aussperr-Risiko gegen den eigenen SchlĂźsselbund â und damit gefährlicher als das, wovor die MaĂnahme schĂźtzen soll. Die frĂźhere TP16-Schritt-5-Absicht âvw von bypass auf geschĂźtzt heben" ist damit gestrichen. - Ziel stattdessen: Schutz erhĂśhen, ohne Clients zu brechen â gilt fĂźr alle bypass-Dienste (
vw,hass,gitea). - â Schicht 0 â bereits vorhanden, nicht unterschätzen: keine offenen Ports, alles ausschlieĂlich Ăźber CF-Tunnel (3-Tunnel-HA, TP16), TLS terminiert an der Edge, DDoS-Schutz. Der Origin ist nicht direkt erreichbar. Das ist bereits mehr als bei den meisten Selfhostern.
- â
Schicht 1 â chirurgisch: Access nur auf die Pfade, die kein Client anfasst. CF Access wertet die spezifischere Application zuerst â man kann eine zweite Access-App auf
vw.emsenhuber.net/admin*legen (echte Policy) und den Host im Ăbrigen auf bypass lassen. Das Admin-Panel wird ausschlieĂlich per Browser bedient â dort funktioniert der Access-Login einwandfrei, während/api,/identityund/notifications(die Client-Pfade) unberĂźhrt bleiben. Kein Client bricht, das wertvollste Ziel ist weg.- Alternativ noch härter: Admin-Panel ganz aus (
ADMIN_TOKENleer lassen) und nur bei Bedarf temporär aktivieren. - Analog fßr
gitea:/admin*+ Registrierung path-scoped schĂźtzen (Git-Ăźber-HTTPS mit Token bleibt offen).
- Alternativ noch härter: Admin-Panel ganz aus (
- â
Schicht 2 â App-eigene Bremsen (kostenlos, sofort): Vaultwarden hat Rate-Limits per Default an (
LOGIN_RATELIMIT_SECONDS=60,LOGIN_RATELIMIT_MAX_BURST=10, dazuADMIN_RATELIMIT_*) â Werte prĂźfen/verschärfen;SIGNUPS_ALLOWED=false,INVITATIONS_ALLOWED=false,SHOW_PASSWORD_HINT=false, 2FA erzwingen. HA hatip_ban_enabled+login_attempts_threshold. Gitea: Registrierung aus. - â
Schicht 3 â Edge-Regeln (CF), wirkt fĂźr alle Dienste gemeinsam: WAF-Custom-Rules + Rate Limiting gezielt auf die Login-Endpunkte (
/identity/connect/tokenbei vw,/auth/loginbei HA,/user/loginbei Gitea); optional Geo-/ASN-Filter. â ď¸ Free-Plan-Kontingente vorher im Dashboard prĂźfen (nicht belegt). - â Schicht 4 â ein Mechanismus fĂźr alle: CrowdSec (oder fail2ban) mit Cloudflare-Bouncer. Bans landen dann an der Edge statt erst am Origin. Vaultwarden hat ein offizielles Fail2Ban-Setup-Wiki (Log-Muster fĂźr Login und Admin-Panel).
- đ´ Voraussetzung fĂźr Schicht 2â4, und der eigentliche Knackpunkt: die echte Client-IP muss am Origin ankommen. Hinter dem CF-Tunnel sieht die Anwendung sonst nur die IP des cloudflared-Containers â jede IP-Sperre bannt den Tunnel statt den Angreifer = Selbstaussperrung aller Nutzer, und Rate-Limits greifen ins Leere. Genau dieser Defekt ist bereits offen dokumentiert: HAs
trusted_proxiesfehlen.20.10/.20.167(TP16,hass-400-Strang). âĄď¸X-Forwarded-For/CF-Connecting-IPsauber durchreichen ist Schritt 1 dieses TPs, alles andere baut darauf auf. - Reihenfolge: (1) Client-IP-Weitergabe fixen (inkl. HA
trusted_proxies) â (2)/admin-Pfade path-scoped schĂźtzen â (3) App-Limits + 2FA â (4) Edge-Rules â (5) CrowdSec/fail2ban mit CF-Bouncer. - Abh.: TP16 â
(Tunnel-HA). Verwandt: TP20.1 (vw wandert auf Platform-Postgres â DB-HA â Access, getrennt halten), TP23 (dessen WARP-Managed-Network-Idee ist durch diesen Constraint entlastet:
vwverlangt keine Device-Identity, also kollidiert âWARP zuhause aus" nicht mehr mit dem Access-Strang).
TP16.3 â cloudflared-Reduktion: was der Mesh als Datenpfad kann (und was nicht) ⸠ⳠPROBE LĂUFT SEIT 2026-08-24 â docs/tp16.3-nautobot-mesh-only-runbook.md §8
- âśď¸ Schnitt ausgefĂźhrt 2026-08-24:
nautobot.emsenhuber.netist aus dem Ingress vonbf-nasentfernt (8 â 7 Regeln, Catch-all weiterhin letzte). Rollback-Sicherung liegt unterdocs/cf-backup/bf-nas-ingress-20260824-vor-tp16.3.jsonâ RĂźckweg ist einPUT, eine Minute. Abnahme vollständig: private IP mit WARP von auĂerhalb des LAN 302 in 0,16 s ¡ die Ăźbrigen fĂźnfbf-nas-Hostnames unverändert ¡ und der Punkt, den man Ăźbersieht â Golden Config lief durch: Backup â Intended â Compliance, 104/104, 0 Drifts.- đŻ Der Testaufbau war der einzige, der etwas beweist: die Session lief auf einem Host im
Hotspot-Netz
172.20.10.13mit aktivem WARP, also nicht im BF-LAN. Aus dem LAN heraus wäre der Zugriff ohnehin gegangen und hätte nichts gezeigt (Merkregelfeedback_adresse_lesen_nicht_ansagen). - đ´ Befund, der die Abnahmetabelle des Runbooks korrigiert: der Ăśffentliche FQDN taugt nicht als
Test.
nautobot.emsenhuber.netliefert vor und nach dem Schnitt HTTP 302 â der kommt von Cloudflare Access, nicht vom Origin (location: emsenhuber.cloudflareaccess.com/cdn-cgi/access/âŚ, JWTauth_status: NONEbeiis_warp: true). Access greift vor dem Tunnel. â GĂźltiger Nachweis ist das ZurĂźcklesen der Ingress-Config, nicht die Antwort des Frontends â dieselbe TP22/TP23-Regel. - đ Und die Erwartung wird damit ehrlicher: Nautobot war nie ohne Access-Login Ăśffentlich erreichbar. Der Schnitt schlieĂt keine offene TĂźr, er entfernt eine ĂźberflĂźssige zweite.
- â ď¸ VorprĂźfung, die vor jedem weiteren Schnitt zu wiederholen ist: hängt Werkzeug am
Ăśffentlichen Namen? Hier nein â
gc-configplan.pysprichthttp://10.40.20.30:8080/api, und kein Repo-Skript nutzt den FQDN.
- đŻ Der Testaufbau war der einzige, der etwas beweist: die Session lief auf einem Host im
Hotspot-Netz
- âł Offen: das Betriebsfenster. Eine Woche fahren (bis ~2026-08-31), dann entscheiden, ob es so
bleibt und ob
pve/portainer/grafana/pve-mcp/ha-mcp/gitea-mcp/ds-bf/ccu/iobroker/z2m25folgen. - đ Ein Argument des TP ist entfallen: die HA-Degradierung, die §7 als Nebeneffekt anfĂźhrte, ist am selben Tag repariert (TP16 â ). Der Fall steht damit allein auf dem eigentlichen Argument â weniger bewegliche Teile fĂźr Dienste, die Ăśffentlich nicht gebraucht werden.
đ Der Schnitt (
nautobotaus dembf-nas-Ingress) ist ausformuliert inkl. Vorbedingungen, PUT-Ablauf und Rollback. Zwei Punkte stehen dort explizit, weil sie den TP sonst kippen: Mesh-Hostname-Routes sind Egress und verĂśffentlichen nichts (wer das verwechselt, baut den Public-Strang ab), und Nautobot ist nicht nur Web-UI, sondern die Deploy-Pipeline â zur Abnahme gehĂśrt ein Job-Lauf, nicht nur ein Browser-Aufruf. Christophs Frage (2026-08-17): ârecherchiere, ob unser neuer wg-tunnel/cf mesh als datenpfad fĂźr die server/services genutzt werden kann. die containerpflicht als offizieller weg ist fĂźr mich unlogisch."
- â
Die Container-âPflicht" gibt es fĂźr den privaten Zugang tatsächlich nicht â und wir nutzen sie schon nicht mehr.
CF-Docs (MeshâTunnel-Vergleichstabelle) sind eindeutig: Mesh = bidirektional, L3/L4, TCP+UDP+ICMP, jeder
Teilnehmer bekommt eine Mesh-IP, Connector =
warp-clioder ein nativer WireGuard-Peer (unser Fall). Tunnel = inbound zum Origin, VerĂśffentlichen von Hostnames, Connector =cloudflared, Protokolle HTTP/S¡TCP¡SSH¡RDP¡SMB Ăźber WebSocket geproxied. FĂźr âServer hinter dem Node erreichbar machen, die keinen Client laufen lassen kĂśnnen" nennen die Docs ausdrĂźcklich CIDR-Routes auf dem Mesh-Node als den Weg â wĂśrtlich fĂźr âservers, databases, printers, IoT devices". - đŻ Das ist bei uns seit TP16.1 bereits scharf: die vnet-Route
10.40.0.0/16zeigt aufbf-core-mesh(§4.4, Weg A). Der gesamte private Datenpfad läuft schon Ăźber natives WireGuard auf dem Core, ohne jeden Container. Und er ist im TP5-Log-Lauf belegt, nicht vermutet: 137 Zeilenin:cf-mesh, Quelle100.96.0.1â Nautobot.20.30:8080(62Ă), NAS.20.10:6690(46Ă), macmini:22, NAS:5000/:5001/:443/:22, pve.20.100:8006, pve-mcp.20.173:3000, branch/ap1/ap2:22. Christophs Instinkt war richtig. - đ´ Wo die Container-Pflicht echt ist â und warum sie nicht willkĂźrlich ist: fĂźr einen Ăśffentlichen
Hostname, den jemand ohne WARP im Browser aufruft, braucht es einen Reverse-Proxy an der Edge. Das ist
cloudflared. Achtung Verwechslungsfalle: Mesh kennt seit 2026-07-02 ebenfalls Hostname-Routes, und die kĂśnnen auch public hostnames â aber das ist Egress: âroute that hostname's traffic through the node and egress via the node's public IP". Es verĂśffentlicht nichts. Wer das verwechselt, baut den Public-Strang ab und ist Ăźberrascht. - â
Der reale Gewinn ist trotzdem groĂ, weil die meisten Dienste keinen Ăśffentlichen Hostname brauchen.
Kriterium: hat der Dienst einen Client, der keinen interaktiven Access-Login kann? (dieselbe Logik wie der
TP16.2-Constraint bei
vw)Muss Ăśffentlich bleiben (cloudflared) Grund Kann auf Mesh-only vwBitwarden-Clients, harter TP16.2-Constraint pve,nautobot,portainer,grafanahassCompanion-App (400-Muster) pve-mcp,ha-mcp,gitea-mcp,ds-bfn8neingehende Webhooks von Dritten ccu,iobroker,z2m25giteaGit-Clients / CI von auĂen â zu prĂźfen â FĂźr die rechte Spalte ist der Mesh funktional gleichwertig und operativ einfacher (keine Ingress-Zeile, kein Connector-Paar, keine HA-Frage). Sie erreicht man ohnehin schon per privater IP. - đ Zwei Nebeneffekte, die den Fall stärken: (1) die TP16-HA-Degradierung (
bf-nas/bf-pveje nur ein Connector) verliert an Gewicht, sobald nur noch die vier Public-Dienste an cloudflared hängen â weniger Dienste pro SPOF; (2) ICMP + beliebiges UDP gehen Ăźber den Mesh und Ăźber cloudflared grundsätzlich nicht (der QUIC-Proxy war genau die LĂźcke aus TP16.1). - â ď¸ Grenzen, ehrlich benannt: (a) der Mesh-Weg setzt WARP auf dem Client voraus â fĂźr Christophs eigene Geräte gegeben, fĂźr Gäste/Fremdgeräte nicht; (b) IPv6-CIDR-Routes brauchen MASQUE und funktionieren mit einem WireGuard-Device-Profil nicht â deckt sich mit dem v4-only-Entscheid aus TP16.1, wäre aber ein Blocker, falls TP12 später v6 Ăźber den Mesh wollte; (c) es bleibt eine Cloudflare-Abhängigkeit â der Mesh ersetzt cloudflared, nicht Cloudflare.
- Vorgeschlagener Umsetzungsschnitt (klein anfangen, reversibel): einen Dienst der rechten Spalte als Probe
aus dem CF-Ingress nehmen (Kandidat:
nautobotâ nur Christoph nutzt es, im Mesh-Log mit 62 Treffern der am häufigsten per Mesh angefasste Dienst, und ein Fehlschlag kostet nichts Produktives), eine Woche fahren, dann entscheiden. Rollback = eine Ingress-Zeile zurĂźck. - đ Runbook:
docs/tp16.3-nautobot-mesh-only-runbook.md(2026-08-19) â der Schnitt oben, ausfĂźhrbar ausformuliert: Vorbedingungen (Mesh-Route, Zugriff Ăźber10.40.20.30:8080mit WARP von auĂerhalb), Ingress-PUTĂźberCF_API_TOKEN(nicht Ăźber den CF-MCP, der ist read-only), Rollback aus der gesicherten Config.- đ´ Der Abnahmepunkt, den man Ăźbersieht: Nautobot ist nicht nur Web-UI, sondern die
Deploy-Pipeline. Nach dem Schnitt gehĂśrt ein Job-Lauf zur Abnahme, nicht nur ein Browser-Aufruf
â der Netmiko-Deploy kommt von
10.40.20.31(nautobot-worker), nicht von.20.30. - â ď¸ Beim KĂźrzen des
ingress-Arrays muss die Catch-all-Regel die letzte bleiben, sonst greift der Ingress fĂźr alle Ăźbrigen Hostnames nicht mehr.
- đ´ Der Abnahmepunkt, den man Ăźbersieht: Nautobot ist nicht nur Web-UI, sondern die
Deploy-Pipeline. Nach dem Schnitt gehĂśrt ein Job-Lauf zur Abnahme, nicht nur ein Browser-Aufruf
â der Netmiko-Deploy kommt von
- Abh.: TP16.1 â
(Mesh live), TP16 (Public-Strang + dessen HA-Degradierung), TP16.2 (der
vw-Constraint liefert das Entscheidungskriterium). â ď¸ BerĂźhrt TP5: der Mesh-Verkehr braucht bei deny-by-default eine expliziteforward-Zeile â s. TP5 Etappe 2.
TP17.1 â Shelly Gen4 raus aus dem WLAN ⸠â VERWORFEN (2026-08-23) â Weg bewiesen, Ziel damit nicht erreichbar â đ docs/tp17.1-shelly-gen4-funkmigration-runbook.md
â User-Entscheid 2026-08-23 nach dem Pilot: stoppen und zurĂźckbauen. AuslĂśser war Christophs strukturelle Frage: âzigbee sollte die antwort auf die vielen radios auf -iot geben. nutzt aber wenig wenn man das wifi nicht abdrehen kann bzw. es nicht mehr aktivieren kann ohne reset."
Der Pilot hat den Weg technisch vollständig bewiesen â
s9lief aufPowerStripZB, trat ZHA bei, ein Zigbee-Befehl schaltete das physische Relais, kein Broadcast-Sturm. Und er hat gezeigt, dass das Ziel so nicht erreichbar ist:
- Das Gerät bleibt WLAN-Client â Zigbee kommt zusätzlich, nicht statt.
- Der Funkgewinn ist gemessen klein: die 12 Gen4 sind 12 von 26 IoT-Clients, bewegen aber je nur ~150â200 KB rx / 0,6â3 MB tx in sechs Stunden. Leerlaufende Stationen.
- Der Preis wäre dauerhaft: die Zigbee-Firmware hat keinen AP (
WiFi.GetConfigkennt nursta/sta1/roam), Shelly macht kein Zigbee-OTA, undShelly.InstallAltbraucht IP. WLAN aus hieĂe: nie wieder Firmware-Update, kein RĂźckweg â bei 10 Unterputz-Modulen.â RĂźckbau durchgefĂźhrt 2026-08-23: ZHA-Knoten sauber entfernt (Leave vor dem Flash, damit kein Geisterrouter im 52-Geräte-Mesh bleibt),
s9zurĂźck aufPowerStrip, Config aus dem Backup wiederhergestellt. Compliance des Zigbee-Netzes unauffällig: alle vier roten EZSP-Zähler blieben 0, Retry-Quote fiel im Delta auf 8,9 %. â ď¸ Beim RĂźckflash zog die Firmware einen OFFENEN AP hoch (ap.enable=true, is_open=true) â abgeschaltet und mit dem IoT-PSK abgesichert. Nach jedem Shelly-Firmwarewechsel den AP prĂźfen.đ Das Runbook bleibt â es enthält den kartierten Mechanismus (drei undokumentierte RPCs, Zwei-Slot-Modell), das gemessene 2,4-GHz-Bild und die ZHA-Sturmzähler mit Baseline. Der Weg ist nicht gescheitert, das Ziel war mit ihm nicht erreichbar. đ Einziger Restposten: der FrĂźhindikator â
Shelly.CheckForUpdateauf einem Gen4 auf einenâŚMT/Thread-alt-Eintrag beobachten. Erscheint er, ändert sich die Rechnung.
UrsprĂźnglicher Planungstext (historisch)
User-Formulierung (2026-08-23): âwir lassen das pwd vorerst wie es ist. wir werden alle shelly gen4 auf thread umstellen â neue firmware. das machen wir im ha-projekt. das sehe ich als subpunkt zu pwd ändern. der vorteil: wir mĂźssen dann weit weniger geräte umstellen, steigern thread-stabilität und bringen zudem mehr ruhe ins wifi."
đ Runbook:
tp17.1-shelly-gen4-funkmigration-runbook.mdâ Bestand, die drei Wege im Vergleich, Ablauf, Abnahme, Verzahnung mit der PSK-Rotation. đ Wohnort ist das Netz-Projekt (User-Entscheid 2026-08-23). Eine erste Fassung lag kurz im HA-Projekt (ha-xstate); sie ist dort entfernt, damit es keine zweite Wahrheit gibt. HA ist Betroffener, nicht EigentĂźmer: die Entities brechen, aber die Entscheidung ist eine Funk- und Netzentscheidung. (Der Titel sagt jetzt âThread oder Zigbee" â der ursprĂźngliche Thread-Zuschnitt hat den heute tatsächlich verfĂźgbaren Weg ausgeschlossen, s. Nachtrag unten.)
- đ Die Reihenfolge ist der eigentliche Entscheid: die PSK-Rotation (Follow-up unten) wird nachgelagert, nicht vorgezogen. BegrĂźndung des Users: jedes Gerät, das vorher auf Thread wandert, muss beim PSK-Wechsel nicht mehr angefasst werden. Damit ist die Rotation Nachfolger von TP17.1, nicht mehr eigenständig. (Sie war nie dringend â Anlass war ein Passwort in einem Sitzungstranskript, kein Vorfall.)
- đ Bestand live gesweept 2026-08-23 (
mcp/shelly/discover.py, read-only, VLAN30): 22 von 26 erreichbar, davon 12 Gen4 (9Ă 2PM Gen4S4SW-002P16EU, 1Ă 1PM Gen4, 2Ă Plug S Gen4), 8 Gen3, 2 Gen2 â alle auf Firmware 2.0.0. Nicht erreichbar: s1/s2/s3 (weihnachten_*, saisonal) und s4kueche_mikrowelle(Metallgehäuse, RSSI â93 â der Härtefall des WLAN-Betriebs). - đ´ Die Prämisse âneue Firmware" trägt so nicht, und das ändert die Rechnung: Shelly
unterstĂźtzt Matter over Thread offiziell nicht und plant es nicht. Gen4 kann offiziell nur
Matter over WiFi â was hier nutzlos wäre, weil das Gerät im WLAN bliebe und den PSK weiter
bräuchte. Thread geht nur ßber Dritt-Firmware (die ESP32-C6-Hardware kann es). Das brauchbare
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 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-iothä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.
- đ Und die Rechnung ist noch etwas ungĂźnstiger, als âShellys" nahelegt (live 2026-08-23):
auf
- â
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) nachmatter-pairing-infra-ssid-runbook.md, am 2026-08-22 mit dem TIMMERFLOTTE bewiesen.cfg-infra/dp-infra/sec-infrastehen dauerhaft am Manager, das Anlernen ist ein Zweizeiler plus eine Config-Transaktion. - đ´ Der Umweg bleibt nĂśtig, weil TP12.1 offen ist (kein IPv6-Routing VLAN10âVLAN20 â Matter-
Commissioning-Etappe 2 bricht ab), und
ble_proxyist wirkungslos, seit der ESP32-BT-Proxy ausgeschlossen wurde. Je mehr Thread-Geräte kommen, desto Ăśfter zahlt man diesen Umweg â das ist das stärkste neue Argument fĂźr TP12.1, das bisher nur an einem einzigen FĂźhler hing. - Abnahme (aus TP28 gelernt): pro Gerät ein frischer Thread-Knoten und eine funktionierende HA-Entity â nicht die Anzeige in einer Tabelle. Ein Gerät, das in Thread hängt und in HA halbtot ist, ist ein RĂźckschritt.
- đŹ Nachtrag 2026-08-23 (abends) â die Geräte selbst befragt (
Shelly.CheckForUpdate, read-only). Ergebnis: es gibt heute KEIN Thread-Update, aber die offizielle Alt-Firmware-Schiene existiert â sie liefert bisher ZIGBEE.Was Stand am Gerät Stable 2.0.0 auf allen 22 â fĂźr keines ein stabiles Update verfĂźgbar Beta 2.0.1-beta1(Build 2026-08-19) fĂźr alle, auch Gen3Alt-Varianten (nur Gen4!) S2PMG4ZBâShelly 2 PM Gen4 with Zigbee" ¡S1PMG4ZB(1 PM Gen4) ¡PowerStripZB(Power Strip Gen4) â je stable 2.0.0 + betaGen3 ( S3PL-*)kein alt-Eintrag â Alternativfunk ist eine reine Gen4-Sache, wie erwartet- đŻ Das ist die wichtigste Erkenntnis fĂźr die Planung: Shelly liefert alternative
Funk-Firmware fßr Gen4 ßber den normalen Update-Kanal, nicht ßber einen Bastelpfad. Käme
eine Thread/Matter-Variante, erschiene sie mit hoher Wahrscheinlichkeit genau dort als weiterer
alt-Eintrag. â Billiger FrĂźhindikator statt Warten auf Pressemeldungen:Shelly.CheckForUpdateauf einem Gen4 pollen und auf einenâŚMT/Thread-Eintrag warten. - đ° Presselage (recherchiert 08-23): Shellys offizielle Linie ist âwird evaluiert", nicht âist angekĂźndigt" â Stand Juli 2026, mit Flash-Platz als genanntem Engpass. Ein Release-Datum gibt es nicht. (Die Thread-Firmware, die im Mai 2026 als âfĂźr Gen4 verfĂźgbar" durch die Presse ging, ist die Dritt-Firmware von automatous-io, nicht Shelly.)
- đĄ Und daraus folgt eine Option, die vorher nicht auf dem Tisch lag: ZIGBEE statt Thread. Sie
erfĂźllt alle drei Ziele von TP17.1 â Geräte raus aus dem WLAN (PSK-Rotation wird billiger),
Mesh-Stabilität, Funkruhe im 2,4-GHz-WLAN â und zwar heute, mit Hersteller-Firmware Ăźber den
offiziellen Kanal, also ohne Garantieverlust, ohne UART-Backup, ohne Test-VID. Die Infrastruktur
steht bereits: Zigbee2MQTT läuft als LXC 112 (
10.40.20.106,z2m25). â ď¸ Zu prĂźfen, bevor das zur Empfehlung wird: (a) ob die Alt-Firmware genauso zurĂźckrollbar ist wie ein normales Update (Wechsel des Funkstacks, nicht nur der Version) â offen; (b)der Entity-Bruchâ entschärft (User 2026-08-23): der Umbau behält die Entity-Namen â damit fällt der teuerste Posten der Abwägung weg, fĂźr Zigbee und Thread gleichermaĂen (zwei Fallen dazu im Runbook: die alteentity_idist erst nach dem Entfernen frei, undunique_id/Statistiken sind trotzdem neu); (c) Kanalplanung â erhoben 2026-08-23 â es gibt drei 802.15.4-Netze, nicht eines: Thread 15 (~30 Matter-Knoten), ZHA 20 (52 Geräte, SONOFF Dongle-M Ăźbersocket://10.40.30.137:6638), Z2M 25 (Sonoff Dongle Plus). Gegen WLAN ap1 ch1 / ap2 ch11 ist das sauber â auĂer ZHA ch20 (2450), das direkt auf der Unterkante von WLAN ch11 (2451) sitzt, ausgerechnet 52 Geräte gegen den AP mit 26 Clients. Die LĂźcke 2423â2451 (ZB 16/17/18) ist unbenutzt; â ď¸ ein ZHA-Kanalwechsel mĂźsste von 52 Geräten mitgemacht werden, schlafende und ältere Router folgen nicht zuverlässig â erst Energy-Scan, dann entscheiden. đ´ Und der Vorbehalt, der schwerer wiegt als alle drei: Christophs Z2M-Vorfall von 2024 (âLichterdisko", Installation unsteuerbar, Neuaufbau). Fehlerklasse ist benennbar (Broadcast-/Routing-Sturm â trifft ZHA genauso), Root Cause nicht mehr rekonstruierbar. â Mitigation ohne Ursachenkenntnis = Blast Radius trennen: die zehn neuen Router komplett in ein Zigbee-Netz, und zwar in das, das nicht Licht und Fernbedienungen trägt. Details und Abbruchkriterium im Runbook.
- đŻ Das ist die wichtigste Erkenntnis fĂźr die Planung: Shelly liefert alternative
Funk-Firmware fßr Gen4 ßber den normalen Update-Kanal, nicht ßber einen Bastelpfad. Käme
eine Thread/Matter-Variante, erschiene sie mit hoher Wahrscheinlichkeit genau dort als weiterer
- 𩺠HA-Gegencheck 2026-08-23: genau EIN Shelly ist offline â
s4 kueche_mikrowelle(23 Entitiesunavailable). Deckungsgleich mit dem Netz-Sweep, und es ist dasselbe Gerät, das bei RSSI â93 hinter Metall hängt. s1/s2/s3 (weihnachten_*) sind in HA nur DEAKTIVIERT, nicht gelĂśscht (Christoph 2026-08-23) â deaktivierte Entities haben keinen Zustand und tauchen deshalb in keiner Zustandssuche auf. Die Entities gibt es also zu Recht; sie kommen mit den Geräten zurĂźck. (Meine erste Formulierung âexistieren gar nicht" war falsch.) â FĂźr die PSK-Rotation heiĂt das: drei Geräte, die niemand vermisst, aber die beim nächsten Einstecken mit dem alten PSK kommen. Genau dafĂźr ist die Ăbergangs-access-listda. - đ¨ď¸ Es gibt ZWEI Drucker â geklärt 2026-08-23, beide Angaben waren richtig:
(1) P750W = Etikettendrucker, VLAN30 (
10.40.30.5, Reservierung aufdhcp-v30, ARPvlan30; am 08-23 aus,last-seen 3d15hâ deshalb nicht unter den 26 assoziierten Clients). (2) Brother MFC = der eigentliche Drucker, VLAN10 â live bestätigt10.40.10.6, MAC30:05:5C:78:86:20(OUI Brother Industries), ARPdelay= aktiv, statisch konfiguriert, keine DHCP-Reservierung. đ Folge fĂźr TP5: die Merkregel âDrucker fällt mit udp/161 (SNMP) aus, nicht mit 631" (ref_printer_snmp_before_ipp) gilt dem VLAN-Ăźbergreifenden Fall. Der MFC steht im selben VLAN wie die Macs â dort greift dieforward-Kette gar nicht. - đ Reihenfolge revidiert (User 2026-08-23): PSK-Rotation und Thread-Umstellung laufen PARALLEL.
Sie blockieren einander nicht â der Passphrase-Override je MAC (
/interface wifi access-list, s. Follow-up) macht den Flag-Day ĂźberflĂźssig: neuer PSK aufs Profil, die noch nicht migrierten Geräte Ăźbergangsweise per MAC mit dem alten weiter. Einzige Regel, damit die Parallelität nichts kostet: ein Gerät, das ohnehin auf Thread/Zigbee wandert, bekommt den neuen PSK gar nicht â es kommt auf die Override-Liste und verschwindet später ganz. (Die frĂźhere Formulierung âblockt die Rotation" war zu streng; die Reihenfolge war nie technisch nĂśtig, nur Ăśkonomisch.) - Abh.: keine harten fĂźrs Netz. Läuft parallel zur PSK-Rotation (User-Entscheid 08-23,
vorher als Blocker gefĂźhrt). Verwandt: TP12.1
(IPv6/Matter â profitiert direkt), TP25 (jedes Gerät weniger im 2,4-GHz-Band ist Funkruhe),
TP17 im Archiv (Migrationshistorie +
mcp/shelly/-Werkzeug).
TP17.3 â Shelly-Regression nach der VLAN30-Migration ⸠â
ERLEDIGT (2026-08-23, Folge-Session): beide Geräte repariert, Ursache eco_mode bewiesen â offen nur noch der Flotten-Entscheid (gehĂśrt TP17.1) â aus TP17 herausgelĂśst, User-Meldung
User-Meldung 2026-08-23: âvor einiger zeit hast du an den shellys änderungen vorgenommen. das hatte bei einigen einen bĂśsen seiteneffekt: lĂźfter-shelly musste ich doppelt drĂźcken. der Ăźbelste ist jedoch der von diele ug: seit deinen änderungen spinnt er herum und blinkt wie ein wilder. sobald AP on ist, ist die symptomatik weg. ich muss vermutlich eh alle shellys neu machen."
- đ´ Erste Konsequenz, sofort: der aktivierte AP auf
s23ist ein WORKAROUND, kein Rest. Ich hatte ihn beim WLAN-Scan am selben Tag als âĂźbrig gebliebenen Anker aus TP17, gehĂśrt abgeschaltet" eingeordnet â das war falsch, und es hätte Christophs Notbehelf zerstĂśrt. Er ist bewusst an. Nicht abschalten, bevor die Ursache behoben ist. (Merkregel: ein Zustand, der nach einem Verfahren âĂźbrig" aussieht, kann eine Reparatur sein. Vor dem Aufräumen fragen, wozu er da ist.) â AufgelĂśst 2026-08-23: die Ursache ist behoben, der AP aufs23ist abgeschaltet und wird nicht mehr gebraucht. Der Workaround hat exakt das getan, was die Hypothese vorhersagte. - Symptome und Geräte:
Gerät Modell Symptom s23 dieleug-wohnzimmer_licht.203SPDM-002PE01EU, app ProDimmerx= Phasenanschnitt-Dimmer (Diele UG/Licht + Wohnzimmer/Seitenlicht)âblinkt wie ein wilder", AP an â weg s26 bad_luefter.233S4SW-002P16EU (Gen4), switch:0 in_mode=momentarymuss doppelt gedrĂźckt werden
Was die Migration am Gerät wirklich verändert hat (TP17, 2026-07-13)
Vier Dinge, nicht nur die WLAN-Config: (1) STA-SSID/PSK ¡ (2) statische IP statt DHCP
(ipv4mode=static, gw/dns 10.40.30.1 â an allen 22 bestätigt) ¡ (3) eco_mode nach einer
RSSI-Politik ¡ (4) AP-Anker an/aus.
đŻ â
BESTĂTIGTE URSACHE: eco_mode, nicht die WLAN-Config
eco_modesenkt den CPU-Takt und die WLAN-Sendeleistung â so steht es in TP17 selbst.- Ein Phasenanschnitt-Dimmer braucht präzises Nulldurchgangs-Timing. Ein gedrosselter Takt erzeugt Jitter in genau diesem Timing â Flackern. Das ist s23.
- Warum âAP an" heilt: ein aktiver Access Point muss beaconen, das Funkteil darf nicht in die Sparzustände. Der AP hebt also faktisch den Energiesparbetrieb auf â er behandelt das Symptom genau dort, wo die Hypothese die Ursache vermutet. Diese Korrelation ist das stärkste Indiz.
- s26:
momentary-Eingang + gedrosselter Takt â die erste Flanke wird verschluckt â âdoppelt drĂźcken". - â
Gegenprobe im Bestand:
s12 dieleug_steckdosenhängt am selben Ort, ist dasselbe Gen4-Modell wie s26 â und hateco_mode=false. Es ist unauffällig. (Kein Beweis, aber die Hypothese Ăźberlebt ihn.) - â
Die Alternativerklärung ist damit erledigt: der Verdacht auf gerätespezifische Dimmer-Themen
(Leading/Trailing Edge, Kalibrierung, Mindestlast/LED-Treiber) hat sich nicht bestätigt â
eco_modeallein genĂźgte. Nebenbei: die Config dieses Geräts kennt fĂźr Phasenan-/-abschnitt ohnehin keinen Parameter; Stellschrauben wären nurwarmup,range_map,gamma,min_brightness_on_togglegewesen. Der Link war mit â54 dBm die ganze Zeit sehr gut, ein reines Funkproblem war nie plausibel.
Der diskriminierende Test (klein, reversibel, ein Gerät) â âśď¸ AUSGEFĂHRT 2026-08-23
- â
s23:Sys.SetConfig {"config":{"device":{"eco_mode":false}}}â AP zunächst AN gelassen.cfg_rev91 â 92,eco_mode=falsegelesen. - â Christoph beobachtet: âlicht in diele ug ist jetzt flackerfrei". â ď¸ Das ist noch kein Nachweis â mit AP an war es vorher schon flackerfrei. Beide Hypothesen sagen an dieser Stelle dasselbe voraus. (Merkregel feedback_abnahme_wirkung_nicht_anzeige.)
- â
AP aus (
WiFi.SetConfig ap.enable=false) â damit war der Test scharf:eco_mode=false,ap.enable=false, STAgot ip 10.40.30.203bei â54 dBm. - đŻ ERGEBNIS â Christoph, 2026-08-23: âbeide lampenausgänge getestet. funktioniert perfekt, kein
flackern." Genau die Konstellation, die vorher geflackert hat, ist ohne AP stabil.
â
eco_modewar die Ursache. Hypothese bestätigt,s23repariert. - â
s26 bad_luefteranalog:eco_mode=falsegesetzt (cfg_rev18 â 19) + Reboot (s.u.). đŻ ERGEBNIS â Christoph: âlĂźfter perfekt." Der Doppeldruck ist weg. â Beide gemeldeten Geräte repariert, beide Symptome durch dieselbe Ursache erklärt.
đ´ Korrektur einer Annahme aus dieser Session: ich hatte gewarnt, eco_mode brauche einen
Neustart, um zu wirken, und der Test sei deshalb unvollständig. Falsch â das Gerät antwortet auf
Sys.SetConfig selbst mit {"restart_required": false}. Der Test war richtig formuliert, ein Reboot
des Dimmers (= Lichtausfall in Diele UG/Wohnzimmer) wurde daraufhin nicht ausgefĂźhrt.
(Und daraus folgt der wichtigere Schluss: eco_mode kann das restart_required der 14 Geräte unten
nicht verursacht haben.)
Weitere Funde aus dem Sweep vom 2026-08-23 (read-only, alle 22 Geräte)
-
đ´ Die eco-Politik ist damit nicht nur stale, sondern WIDERLEGT. Regel von 2026-07-13 war âeco an bei RSSI ⼠â80, aus darunter" â sie hat an
s23realen Alltagsschaden erzeugt und war nie konsistent umgesetzt. Ist-Stand des Sweeps 2026-08-23 (22 Geräte, live): eco AUS: s7 (â90), s12 (â64), s17 (â76), s18 (â81), s19 (â88) ¡ eco AN: alle Ăźbrigen 16, darunter s20 (â85) und s21 (â85) â die RSSI-Regel ist an keiner Kante mehr erkennbar. Die Werte haben sich seit Juli durch TP25/TP28 ohnehin verschoben. Die in TP17 vorgemerkte â2. Evaluation nach TP3.3" hat nie stattgefunden. â â ENTSCHIEDEN UND AUSGEFĂHRT 2026-08-23. User: âeco-mode fĂźr alle deaktivieren. der rotz macht nur probleme." 13 Geräte umgestellt (s5, s6, s8, s10, s11, s13, s14, s15, s16, s20, s21, s22, s25), null Fehler; 9 standen bereits auffalse. Stand jetzt:eco_mode=falseauf allen 22 erreichbaren Shellys, einzige Ausnahmes24(SNDC-0D4P10WW meldeteco_mode: Noneâ nicht unterstĂźtzt). Offen nur s1/s2/s3 (weihnachten_*, saisonal stromlos). đ§ Werkzeug:mcp/shelly/migrate.py eco <range> [--go|--on]â neu, Ăźber denselben_rpc-Pfad, mit Retry je Gerät (ein Timeout an einem schwachen Link darf den Sweep nicht abreiĂen) und einer Fehlerliste am Ende.đŹ Und die Gegenmessung widerlegt meine eigene Warnung. Ich hatte hier notiert, eco aus hebe die Sendeleistung an und sei deshalb eine Airtime-Ănderung, die TP25 berĂźhre. Gemessen stimmt das nicht: Signal der 13 geänderten Geräte in der Registration-Table des Managers, vorher/nachher â Mittel â0,9 dB, Median â1 dB, Spanne â3..+3, bei einer Kontrollgruppe von 13 unveränderten Geräten mit +0,0 dB und derselben Streuung. Das ist Rauschen, kein Effekt. â Die Aussage aus TP17,
eco_modesenke âden CPU-Takt UND die WLAN-Sendeleistung", stimmt nur zur Hälfte. Der Takt-Teil ist durch das Dimmer-Flackern bewiesen; der Sendeleistungs-Teil ist an diesen Geräten nicht messbar. Kein Funkbild-Argument mehr fĂźr oder gegen eco. -
â AP-Anker-Sweep erledigt (der offene read-only-Punkt aus der Ăbergabe):
WiFi.GetConfig â ap.enableĂźber alle 22 Geräte. Nurs23hatte einen AP an (= Christophs Workaround, inzwischen abgeschaltet), die Ăźbrigen 21 stehen auffalse. Kein Aufräumbedarf, kein weiterer Anker im Bestand. -
đľ Nebenbefund, gehĂśrt nicht hierher, aber nicht verlieren: alle Shellys stehen auf
sys.sntp.server = time.cloudflare.com. Kanonisch ist seit 2026-08-18 der Core als Zeitquelle, ausgeliefert per DHCP-Option 42 â die Shellys haben aber aus TP17 statische IPs und sehen die Option nie. Funktioniert (Uhrzeit stimmt, udp/123 aus VLAN30 geht raus), ist aber ein blinder Fleck in der NTP-Vereinheitlichung. Gleiche Klasse fĂźr jedes statisch adressierte Gerät im Netz. -
đľ
inventory/bf.csvist beis12stale: dort steht noch10.40.41.219, live ist das Gerät auf10.40.30.219(migriert). Die dreiweihnachten_*(s1âs3) sind saisonal stromlos,s4 kueche_mikrowelleoffline â das erklärt 26 Einträge vs. 22 erreichbare. -
đ
restart_required = trueâ nicht auf 2 Geräten, sondern auf 14 von 22 (Sweep 2026-08-23, Folge-Session): s5, s6, s7, s10, s12, s13, s16, s17, s18, s19, s20, s21, s24, s26. Uptimes 22â41 Tage. â Entwarnung, empirisch:s26wurde kontrolliert neu gestartet und die Config davor/danach verglichen â sie ist identisch. Der Flag stand fĂźr keine abweichende Konfiguration; er ist ein sticky Bit, das nur nie zurĂźckgesetzt wurde. Die Geräte sitzen nicht auf versteckten Ănderungen. Reboots kĂśnnen damit gefahrlos gebĂźndelt mit TP17.1 laufen. -
đ Was
restart_requiredgesetzt hat, ist am Gerät NICHT rekonstruierbar â drei Wege zu Ende gegangen: (a) 169 RPC-Methoden aufs26, keine gibt Auskunft Ăźber Pending-Zustand; (b) der Config-Diff Ăźber die Gruppengrenze trägt nicht â die Gen3-FamilieS3PL-00112EUhat identische Configs, davon s6/s7/s10 flagged und s8/s11/s14/s15 sauber; (c) kein persistentes Gerätelog (sys.debug.file_log.enable=false,/debug/logist ein Live-Stream ohne Ring-Puffer). Ausgeschlossen sind immerhinmatter.enable,ble.rpc.enable,cloud,mqtt,ws(trennen die Gruppen alle nicht) â undeco_mode(s.o.). Nicht erneut untersuchen; der Aufwand ist gedeckelt und das Ergebnis negativ.
Scope / Abgrenzung
- GehÜrt hierher: alles, was die Migration am Gerät verstellt hat (eco_mode, statische IP, AP-Anker) und was daraus an Fehlverhalten folgt.
- GehÜrt nicht hierher: die Funkumstellung selbst (TP17.1, verworfen) und das Geräte-Passwort (seit 2026-08-24 TP30 Posten #3, vormals TP17.2).
- đ Aber die Verzahnung mit TP17.1 ist der Hebel: wenn ohnehin alle Shellys angefasst werden,
ist das der Moment,
eco_modegrundsätzlich zu entscheiden statt gerätweise zu pflegen. Christophs âich muss vermutlich eh alle shellys neu machen" ist damit nicht Resignation, sondern der effiziente Weg â nur eben nach dem Test, nicht davor. - Governance: Shellys laufen nicht Ăźber Nautobot GC (kein Netzgerät im GC-Sinn). Ănderungen
Ăźber
mcp/shelly/bzw. direkte RPC. â ď¸migrate.pyhat kein Kommando fĂźreco_modeâ der Sweep-Weg wäre eine kleine Ergänzung Ăźber denselben Pfad. - Abh.: keine. Blockt nichts. Der Alltagsschaden ist seit 2026-08-23 behoben.
đ Was noch offen ist (Stand 2026-08-23, Folge-Session)
- â
Tastentest
s26â erledigt, Doppeldruck weg. - Flotten-Entscheid
eco_modeaus fĂźr die Ăźbrigen ~20 Geräte â gebĂźndelt mit TP17.1 wegen der Funkbild-/Airtime-Wirkung (s.o.). GehĂśrt Christoph. migrate.pyum eineco-Kommando ergänzen, wenn 2. beschlossen wird â heute gibt es dafĂźr keinen Pfad im Werkzeug, der Sweep lief ad hoc.- Reboots der verbleibenden 13
restart_required-Geräte â gefahrlos (empirisch ans26belegt), deshalb kein eigener Termin, sondern Mitnahme bei TP17.1.
TP18 â Souveräner Objektspeicher (Garage, Multi-Site, S3-Cold-Tier) ⸠đ KONZEPT (2026-07-12)
- AuslĂśser: 9-TB-Syno-Backup-Volume zu 2/3 voll; reine Daten ~3 TB, Tendenz steigend, âschlagartiger" Bedarf nicht ausgeschlossen. âWenn skalieren, dann jetzt Syno-Nachfolger mitdenken."
- Kriterien (User-priorisiert): (1) keine Fremd-Abhängigkeit / kein Cloud-Lock-in (Cloud-Opex abschreckend); (2) Multi-Site BF/FM/DW; (3) HA (Standort-Verlust Ăźberlebbar); (4) billig/teuer trennen â Variante âkalt = Objektspeicher, heiĂ = lokal" genĂźgt (kein Hot/Cold innerhalb des Stores nĂśtig); (5) horizontal + vertikal skalierbar; (6) S3-API als Branchenstandard, den jedes Backup-Tool spricht.
- Entscheid Engine = Garage (Deuxfleurs, Rust): einziger Kandidat, der geo-verteilt Ăźber offenes Internet/WAN latenztolerant ist (CRDT-Metadaten, eventually consistent) â passt aufs 3-Keller-Modell BF/FM/DW. Ceph verworfen (will Sub-ms-LAN, Single-Cluster-Ăźber-WAN = Anti-Pattern; zu schwer, ~1 GB RAM/TB). MinIO (AGPL + Console/Feature-Abbau 2025) und SeaweedFS (kann Hot/Cold + Erasure-Coding, aber komplexer, Multi-Site async) = Fallback, falls später feingranulares Tiering / EC-Effizienz bei zweistelligen TB dominant wird.
- Entscheid Disk-Layout = JBOD, KEIN RAID. Redundanz gehĂśrt in eine Schicht: Garage RF=3 Ăźber 3 Sites ist die Redundanz. RAID 1 darunter = Doppelt-Bezahlen (3 Sites Ă 2 Mirror = 6Ă roh fĂźr 1Ă nutzbar, absurd). RAID 0 verworfen (1 Platte tot = ganzer Node-Rebuild Ăźber WAN). JBOD = jede Platte eigenes Garage-Data-Dir (v1 Multi-HDD): Failure-Domain = 1 Platte, Rebuild nur deren Anteil, kein Kapazitätsverlust. Merksatz: distributed store = âjust a bunch of disks", Redundanz ausschlieĂlich Ăźber die Sites.
- Was man dafĂźr bezahlt: Plattentod triggert Re-Replikation Ăźber WAN (durch Upload-BW gedeckelt). Bei ~3 TB/Site tolerabel; wenn Bedarf âschlagartig" auf zweistellige TB springt â mehr/kleinere Platten (Blast-Radius) oder 4. Node, ggf. Wechsel auf SeaweedFS-EC.
- Dimensionierung (Planungsanker 10 TB nutzbar; heute 3 TB unique / 6 TB Backup-used): RF=3 â 30 TB roh gesamt = 1 volle Kopie ~10 TB/Site (provisionieren ~16 TB roh/Site: 2 Platten = halber Blast-Radius + Headroom). Linear skalierend.
- Kostenmodell (Annahmen: HDD neu CMR ~âŹ18/TB ¡ recert ~âŹ10/TB ¡ Strom âŹ0,25/kWh ¡ Lean-Node Mini-PC/pve 12 W + 2 HDD ~20â28 W):
- Capex kumulativ (3 Sites): Platten âŹ540 (recert) â âŹ900 (neu) + Nodes âŹ400 (BF=pve âŹ0; FM/DW je Mini-PC
âŹ200) = **âŹ600â1.300**. Vergleich: ein resilienter Syno-Nachfolger fĂźr 10 TB = âŹ1.000â1.600 capex ohne Geo-HA â Garage-3-Node gleich teuer/billiger mit HA. - Opex kumulativ: ~âŹ135â185/J Strom â aber getrennt gerechnet: FM/DW laufen Ăźber fremde Zähler, auf Christophs Zähler landet nur der BF-Node â âŹ50â60/J (Gegenleistung: er hostet deren Kopie, reziprok wie TP16).
- JBOD-vs-RAID1-Ersparnis: Strom bloĂ âŹ9â22/J (Christophs Zähler) â kein Entscheidungsgrund; der Hebel ist Capex ~âŹ900 (nicht gekaufte Spiegelplatten) + architektonische Korrektheit. (Reicht nicht fĂźr ein BW-Upgrade âŹ120â240/J, taugt aber als Seed fĂźr HW-RĂźckstellungen.)
- Capex kumulativ (3 Sites): Platten âŹ540 (recert) â âŹ900 (neu) + Nodes âŹ400 (BF=pve âŹ0; FM/DW je Mini-PC
- Konzeptioneller Bruch (Syno-Nachfolger): Kein groĂes resilientes NAS mehr nĂśtig â die kollektive 3-Site-Redundanz ist die Garantie. Syno-Rolle splittet: Hot/SMB/VM-Disks bleiben lokal (Syno oder ZFS auf pve, klein/schnell); Backup/Cold wandert in Garage Ăźber BF/FM/DW â das 9-TB-Volume wird aufgelĂśst statt ersetzt (aus 1 SPOF werden 3 geo-redundante Kopien). Backup-Tool (restic/Kopia) sprechen S3 nativ.
- Impacts auf Bestand (Kurz): (a) Storage-Redundanz-Philosophie kippt â weg von SHR/RAID pro NAS, hin zu 3Ă JBOD; (b) Backup-Kette Hyper-Backup/SMB â S3-Bucket umstellen; (c) Container-Host-System (TP14) kriegt Garage als LXC/Container je Site, aber auf rohen Platten, nicht auf bestehenden SHR-Volumes; (d) Upload-BW wird Durchsatz-/Rebuild-Limit; (e) HW-Planung verzahnt mit TP15 (Node-HW, pve-Standort) und TP24 (Stromversorgung je Site), FM/DW brauchen je 1 Node.
- Startpfad (inkrementell/reversibel): â BF zuerst â Garage-Container auf pve, 2 HDDs JBOD, Backups lokal auf Bucket (sofort Nutzen, noch keine Redundanz). ⥠FM/DW nachziehen (Mini-PC + 2 Platten), RFâ3, ab jetzt geo-redundant+HA. ⢠Syno entlasten (Backup-Last abgeben).
- Offen (Modell scharfstellen): realer Strompreis; ob FM/DW eigene Nodes stellen oder Christoph HW hinstellt; Backup-Tool-Wahl (restic vs Kopia); ob heiĂes Zeug kĂźnftig auf ZFS/pve statt Syno.
- Abh.: TP10 (WG-Multi-Site = Transport, Upload-BW-Constraint), TP14 (Container-Hosts), TP15 (Node-HW) / TP24 (Stromversorgung), Muster von TP16 (reziprokes Per-Host-HA). Kein Blocker fĂźr laufende TPs. SSoT dieser Session.
TP20.1 â Vaultwarden â Platform-Postgres + Cross-Site-HA ⸠đ KONZEPT (2026-07-14, ausgelagert aus TP20)
- Ziel:
vw(.20.127, heute MariaDB) auf den Precious-Tier holen und das eigentliche User-Ziel erfĂźllen: DB-Replikation Ăźber 2 Sites (Standort-Verlust Ăźberlebbar). - Phase 1 â Migration (single-site): vw MariaDBâPostgres (Export â Import in Tier-1-DB
vaultwardenâDATABASE_URLumstellen â verifizieren). Danach ist vw precious + im pgBackRest/PITR-Schirm von TP20. (Alternative verworfen: vw auf MariaDB lassen + MariaDB-Repl â zugunsten EINER Replikations-/Backup-Mechanik im Precious-Tier.) - Phase 2 â Cross-Site-Standby:
db-platform-standby-LXC am 2. Standort âpg_basebackup/Streaming-Replication Ăźber WG (TP10) â manuelles Promote-Runbook. Repliziert den ganzen Tier-1-Cluster (vw = HA-Ziel, Nautobot bekommt Gratis-DR-Kopie). Patroni + 3. Witness nur, falls später Auto-Failover statt manuellem Promote gewĂźnscht. - Verwandt/Abgrenzung: vw ist auch in TP16 offen (CF-Access:
bypassâWARP-geschĂźtzt) â DB-HA â Access, getrennt behandeln. Reziprokes 2-Site-Muster analog TP16/TP18. - Abh.: TP20 (Tier-1 Postgres muss stehen), TP10 (WG-Transport fĂźr Phase-2), TP18 (Backup-Schirm). Kein Blocker fĂźr TP21.
TP23 â DNS-Policy & Self-Service-Ausnahmen ⸠ⳠSTUFE 1 DURCH, STUFE 2 VORBEREITET (2026-08-18)
- â
Stufe 1 â DoH auf dem Core scharf (
routeros/tp23-stufe1-doh-core.rsc), schliesst zugleich TP21.1 TODO 1.use-doh-server=https://px35ynlol3.cloudflare-gateway.com/dns-query,verify-doh-cert=yes.servers=1.1.1.1bleibt als Bootstrap fuer den DoH-Hostnamen stehen.- đ Die alte Begruendung âcore hat kein CA-Bundle, verify also unmoeglich" war zu pessimistisch.
Es braucht kein Bundle, sondern genau einen Root: die Kette ist
Leaf â GTS WE1 â GTS Root R4, importiert wurde nur R4 (~1 KB, gueltig bis 2036) â bei 2,8 MB freiem Flash ist das der Unterschied zwischen geht und geht nicht. Fingerprint lokal und am Geraet gegengeprueft (349dfa40âŚ3c7d). - đ Der Zertifikatsimport steht bewusst nicht im GC-Template: er braucht die Datei am Geraet
und ist einmaliger Bootstrap, kein Sollzustand. Im Template steht nur die
/ip dns set-Zeile. - â ď¸ Der Deploy meldete FAILURE, obwohl alles sass.
/certificate importgibtfailed: 0aus, und der Job scannt den Geraete-Output stumpf nach dem Wort. Wieder ein Beleg fuer die TP22-Regel: Job-Status ist kein Wirksamkeitsnachweis, nur die Gegenpruefung am Geraet zaehlt.
- đ Die alte Begruendung âcore hat kein CA-Bundle, verify also unmoeglich" war zu pessimistisch.
Es braucht kein Bundle, sondern genau einen Root: die Kette ist
- âł Stufe 2 â AdGuard eingerichtet, aber bewusst NICHT scharf geschaltet (User-Vorgabe 2026-08-18).
adguard_bf1(10.40.20.16) macht bereits DoH zum selben CF-Gateway. Ergaenzt wurden: conditional upstreams[/bf.lan/]10.40.20.1und[/40.10.in-addr.arpa/]10.40.20.1(ohne die zweite Zeile wuerden interne Reverse-Lookups zu Cloudflare abfliessen), sechs CIDR-Client-Gruppen (ein VLAN = eine Gruppe) und die permanente Ausnahmegruppedns-bypass-exempt(aktuell10.40.10.183). Abnahme perdig:core.bf.lanâ10.40.99.1,nas.bf.lanâ10.40.20.10, extern ueber DoH. BackupAdGuardHome.yaml.bak-tp23-20260817.- Kein DHCP-Scope wurde angefasst â alle sieben liefern weiter
10.40.X.1aus. Das Scharfschalten ist damit spaeter ein reiner DHCP-Change; die passende Firewall-Zeile (TP5-E2: LAN->AGH dns (Vorrat)) steht bereits, damit dabei die scharfe Firewall nicht angefasst werden muss. - â ď¸ AGH schreibt die YAML beim Start neu (eigene Schluesselreihenfolge, Kommentare weg,
time_zone: LocalâUTC). Wer die Datei patcht, muss danach am laufenden Stand pruefen, nicht am eigenen Entwurf.
- Kein DHCP-Scope wurde angefasst â alle sieben liefern weiter
- đ Offen bleiben Stufe 3â6 (zweite AGH-Instanz, per-Lease Option 6, HA-Buttons, und zuletzt die Bypass-Sperre). Ausdruecklich keine HA/zweite Instanz (User 2026-08-18).
- AuslĂśser: sobald gefiltertes DNS scharf ist, gehen einzelne Seiten/Dienste kaputt. Es braucht Ausnahmen ohne Admin-Eingriff â per User/Client/Gruppe/global, temporär oder permanent, mit Oberfläche. Bedarf ist belegt, nicht vermutet: der bisherige Workaround war âClient von Hand auf
1.1.1.1stellen", regelmäĂig (User 2026-08-14). - đ´ Zentrale Reihenfolge-Regel: genau dieser Workaround IST der DNS-Bypass, den TP5 schlieĂen will â erst der Ersatz, dann die Sperre. Ohne funktionierende Ausnahme-Oberfläche verliert u.a. der Entwicklungsrechner samt Agenten-Toolchain seinen Ausweg â und DNS-Blocks äuĂern sich dort nicht als klare Meldung, sondern als diffus kaputte Build-Umgebung.
- Zwei Befunde, die die Architektur bestimmen:
- DoH ist nicht das Problem. Clients sprechen plain mit dem lokalen Resolver, der macht DoH nach oben â die empfohlene AuflĂśsung des DoH/Split-Horizon-Konflikts,
bf.lanbleibt heil. Was Seiten blockiert, ist die Policy. âĄď¸ Nie einen âDoH aus"-Schalter bauen, sondern Policy-Ausnahmen. - Identität existiert nur dort, wo die Client-IP sichtbar ist. Router-DoH aggregiert alle Clients hinter einer Quelle â CF sieht nur den Core. Per-User-Identität bei CF verlangt einen Agent (WARP; bei NextDNS/ControlD deren CLI) â auf Shelly/Sonos/TV unmĂśglich. RouterOS kann keine per-Client-Ausnahme (keine DNS-Views;
/ip dns staticwirkt domain-weit â verifiziert). âĄď¸ Ein lokaler Resolver mit Client-Policy ist unvermeidbar.
- DoH ist nicht das Problem. Clients sprechen plain mit dem lokalen Resolver, der macht DoH nach oben â die empfohlene AuflĂśsung des DoH/Split-Horizon-Konflikts,
- â Architektur-Entscheid: Filter zentral bei CF, Identität + Ausnahmen lokal. Die Filterliste bleibt vollständig bei Cloudflare (Core via DoH, unterwegs via WARP); lokal wird nie eine Filterliste vorgehalten, nur die Diffs. Vorteile: kein RAM-Thema auf dem Core (eine Adlist kostet ~1,9 KB/Domain, 50k â 95 MB â Konkurrenz mit Conntrack/DHCP/WG), eine Policy-Quelle statt zweier, gleiche Regelbasis zuhause wie unterwegs.
- â
Resolver-Wahl: AdGuard Home (läuft bereits,
10.40.20.16). Vergleich gegen die realen Anforderungen:- Pi-hole disqualifiziert: spricht kein DoH â bräuchte cloudflared/unbound als Sidecar (vierte QUIC-Komponente neben den drei TP16-Connectoren). Dazu belegtes Bruchrisiko v5âv6 (FTL/API/Web neu, Docker-Env-Variablen tot).
- AGHs âkeine Gruppen"-Schwäche verschwindet hier, weil Clients als CIDR eintragbar sind â
10.40.30.0/24= die IoT-Gruppe. Die VLAN-Segmentierung ist bereits die Policy-Grenze. Dazu natives DoH, per-Device-ID auch bei wechselnder IP, âUnblock for this client", API + HA-Integration. - Technitium = ernsthafte Alternative (autoritativer DNS + DHCP + Apps,
networkGroupMap); seine IP/Subnet-Bindung trifft uns kaum, weil die IPs per Reservierung faktisch statisch sind. Neubewertung legitim (die TP4-Ablehnung galt einer anderen Frage) â sinnvoller Anlass wäre, DNS und DHCP zusammenzufĂźhren. Eigener TP, nicht dieser. - Verworfen: eigene Self-Service-UI bauen ¡ per-Device-DoH via NextDNS/ControlD (Agent-Zwang, bricht
bf.lan) ¡ Umbrella ($30â45/User/Jahr) ¡ Cloudflare verlassen (wirft TP16/TP16.1 weg) ¡ Adlist auf dem Core.
- Zuweisung ist nativ mĂśglich:
/ip/dhcp-server/leasehat die Propertydhcp-option(verifiziert) â Option 6 pro Lease, bei 54 Reservierungen ein Konfigurationsschritt. (Nebenfund: Leases habenaddress-listsâ automatische Aufnahme in eine Firewall-Liste, direkt nĂźtzlich fĂźr die TP5-JIT-Gruppe.) - â
WARP im LAN abschalten â Mechanismus: Cloudflare âManaged Networks". Der Client sucht bei jedem Netzwechsel einen selbst gehosteten TLS-Endpunkt, prĂźft dessen SHA-256-Fingerprint und zieht ein Device-Profil, das WARP deaktiviert. Beacon auf NAS/pve, nicht auf den Core (
certs=0). Beseitigt die ICMP-Falle vom 2026-08-13 (ref_warp_local_icmp_trap) an der Wurzel.- â
Kollision aufgelĂśst (2026-08-14): die frĂźhere Sorge war, dass TP16-Schritt 5
vwauf WARP-geschĂźtzt hebt und damit âWARP zuhause aus" bricht. Der User-Constraint aus TP16.2 streicht genau das âvwbleibt bypass und verlangt nie Device-Identity. Damit steht der Managed-Networks-Weg frei. Rest-Risiko nur fĂźr Dienste, die kĂźnftig doch Device-Identity verlangen sollten â dann Access-Policy zusätzlich auf die Heim-IP (bf4-home-ipexistiert bereits). - â Kein Verlust beim Fremdnetz-Zugriff: FM/DW laufen Ăźber den WG-Hub (TP10), nicht Ăźber WARP. Managed Networks schaltet nur im Heimnetz ab.
- â ď¸ Free-Plan-VerfĂźgbarkeit des Features nicht belegt â im Dashboard gegenprĂźfen. Holzhammer-Alternative (WARP-Endpunkte per Firewall sperren) nicht empfohlen: bricht still, Client probiert Transport-Fallbacks, trifft auch Gäste.
- â
Kollision aufgelĂśst (2026-08-14): die frĂźhere Sorge war, dass TP16-Schritt 5
- Umsetzung in Stufen â Sperre zuletzt:
- DoH auf dem Core scharf â schlieĂt TP21.1-TODO 1 (heute plain
1.1.1.1); CA-Bundle nĂśtig. - WARP-Managed-Network (Beacon auf NAS/pve) â WARP zuhause aus.
- AGH in den Pfad, zweite Instanz + Config-Sync, beide per DHCP als DNS 1 + 2.
- Client-Gruppen per CIDR (ein VLAN = eine Gruppe); per-Lease Option 6 nur fĂźr Abweichler.
- HA-Buttons fßr temporäre Freigaben + JIT (AGH-API, RouterOS-REST, CF-API), RouterOS-
schedulerals Backstop, damit Ablauf auch ohne HA greift. - đ´ Erst jetzt (in TP5): DNS-Bypass sperren â Vorbedingung: Freigabe Ăźber HA funktioniert nachweislich, und die permanente Ausnahmegruppe
dns-bypass-exempt(Entwicklungsrechner + Build-/Agent-Tooling) steht. Dann: nur Resolver dĂźrfen 53/853 nach auĂen (schlieĂt Geräte, die eigene Resolver hardcoden â Smart-TV mit8.8.8.8ist der Klassiker).
- DoH auf dem Core scharf â schlieĂt TP21.1-TODO 1 (heute plain
- Grenzen, offen benannt: ein Resolver im Datenpfad ist unvermeidbar (zwei Instanzen federn ab, â ď¸ AGH hat kein natives HA â Config-Sync ist Betriebsaufwand, sonst gilt nach Failover eine andere Policy) ¡ keine Blockseite bei HTTPS (gilt fĂźr jede DNS-FilterlĂśsung, auch Umbrella) ¡ CF-Log-Retention 24 h im Free-Plan â laut User ausreichend, weil Ausnahmen JIT entstehen und ältere Fälle reproduziert werden.
- â ď¸ 802.1X lĂśst die IoT-Identität NICHT: Consumer-IoT (Shelly, Sonos) hat keinen 802.1X-Supplicant; der Standardweg ist MAB = wieder MAC-basiert â kein Identitätsgewinn gegenĂźber der DHCP-Reservierung. TP8 bleibt richtig, aber als Sicherheitsthema (dynamische VLAN-Zuweisung, kein MAC-Spoofing bei Managed-Geräten), nicht als DNS-Identitätsquelle.
- Abh.: TP21.1 TODO 1 (DoH auf core), TP5 (Firewall/Bypass-Sperre â Reihenfolge s.o.), TP16 Schritt 5 (Access-Kollision), TP16.1 (falls WARP zuhause bleiben soll), TP8 (nur Sicherheit). Kein Blocker fĂźr TP5 â TP6, aber TP5 darf die Bypass-Sperre nicht vorziehen.
TP24 â Unterbrechungsfreie Stromversorgung (DC-USV, 48V-Bus) ⸠đ KONZEPT â aus TP15 herausgelĂśst (User-Entscheid 2026-08-16) â docs/hw-refresh-requirements.md §9
-
Warum ein eigener TP: Die USV hing bisher als Unterpunkt in TP15 (HW-Refresh Switching/Router) mit. TP15s Kernauftrag â CRS326-Beschaffung, Bring-up, Core-Tausch â ist seit 2026-08-08 durch; die Stromversorgung ist als einziger Rest Ăźbrig geblieben und hat mit Switching sachlich nichts zu tun. Sie ist ein eigenständiges Infrastruktur-Thema mit eigener Einkaufs-, Verkabelungs- und Entscheidungslogik (Elektrik, Batterie, Standort) und blockiert nichts auf dem kritischen Pfad. Darum eigener TP.
-
Was es ist (Begriffsklärung): eine Pufferbatterie fĂźr die Netz-/Infrastruktur-Hardware â keine klassische AC-USV mit 230-V-Steckdosen. Ein 48-V-Gleichspannungsbus versorgt die Geräte direkt an ihrem DC-Eingang; die Batterie hängt am selben Bus und Ăźbernimmt bei Netzausfall ohne UmschaltlĂźcke. Der Umweg ACâDCâACâDC (und damit dessen Dauerverlust) entfällt.
-
Zielbild (Aufbau, unverändert gßltig aus der TP15-Recherche):
Teil Typ Preis Wirkungsgrad Netzteil MeanWell LRS-150-48 (150 W, 48 V) ~âŹ30 ~88 % DC-USV-Modul MeanWell DDR-120-48 (120 W) ~âŹ80 ~95 % (pass-through) Batterie LiFePO4 12,8 V / 20 Ah (256 Wh) ~âŹ50 â DC-DC 12 V MeanWell SD-100A-12 (100 W, fĂźr NAS/pve) ~âŹ30 ~85 % Summe ~âŹ190 230 V AC â LRS-150-48 â 48-V-Bus âSwitches direkt ¡â DC-DC 12 V âDS923/pve ¡â DDR-120-48 âLiFePO4. -
Warum 48 V: PoE-Technik arbeitet nativ mit 44â57 V (kein Wandler nĂśtig), hĂśhere Spannung = kleinere StrĂśme = weniger Leitungsverlust, und 48 V ist der Telecom-/USV-Standard.
-
Laufzeit (256 Wh): ~2,5 h bei 100 W reiner DC-Last ¡ ~5,5 h wenn nur Switch + PoE (45 W) ¡ ~2 h wenn ein Inverter fßr den Mac mini mithängt.
-
Effizienz-Argument (der eigentliche Grund fĂźr DC statt AC): eine AC-USV verheizt bei 100 W Dauerlast ~25â40 W (â âŹ66â105/Jahr), die DC-Variante
5â12 W (â âŹ13â32/Jahr) â bei praktisch gleicher Anschaffung (âŹ190 vs. âŹ150â250). Der Mehrpreis amortisiert sich Ăźber den Dauerbetrieb. -
â DC-Eingang vorhanden (geprĂźft):
crs326-core+crs326-branch(12â57 V, DC-Jack) ¡ ap1/ap2 hAP ax² (12â57 V, alternativ PoE-in). â ď¸ Adapter/Sonderfall: DS923+ (externes 12 V/7 A, 4-Pin Mini-Fit JR) ¡ pve/N100 (12 V Hohlstecker) ¡ Mac mini hat gar keinen DC-Eingang (eingebautes Netzteil â nur Ăźber Inverter). -
Offene Entscheidungen (aus TP15 mitgenommen, unverändert offen):
- Mac mini auf USV? Braucht einen Inverter (~15â20 % Verlust + Komplexität). Vorfrage: läuft er Ăźberhaupt 24/7? Wenn nein, reicht ein Graceful-Shutdown-Script auf USV-Warnung.
- Standort/Verkabelung: Der Bus soll laut Skizze im Arbeitszimmer/Technik OG sitzen â der L3-Core steht aber in Technik UG. Entweder zweiter Zweig nach unten oder Bus dorthin, wo der Core steht. Diese Frage ist durch den Core-Umzug neu zu stellen (die Skizze stammt aus der Zeit, als oben der Verteiler geplant war).
- Arris-Kabelmodem: vorentschieden auf Grid (muss ohnehin am Netz bleiben, DC-Zweig nach unten wäre Aufwand fĂźr ~1â2 W).
- BatteriegrĂśĂe: 20 Ah als Startwert; 50 Ah wenn die gepufferte Last Ăźber Switch+AP hinaus wächst.
- Monitoring/Shutdown: wie meldet die USV einen Netzausfall an NAS/pve (Signalkontakt vs. nichts)? Ohne das gibt es kein sauberes Herunterfahren, nur Durchhalten bis die Batterie leer ist.
-
Nutzen konkret: bei Stromausfall bleiben Core-Switch, Branch-Switch und beide APs online â Netz, WLAN und der WG-Hub Ăźberleben (der WAN-Uplink nur, solange auch der Arris Strom hat, s. Entscheidung 3). FĂźr NAS/pve zählt vor allem das kontrollierte Herunterfahren statt des harten Abschaltens.
-
Abh.: keine harten. TP15 â (die zu versorgende Hardware steht und hat DC-Eingänge). Verwandt: TP18 (Garage-Nodes brauchen je Site eine Stromversorgung), TP11 (USV-Zustand ins Monitoring). Kein Blocker fĂźr TP5/TP6.
-
Historie: war bis 2026-08-16 Unterpunkt von TP15 (âđ DC-USV: MeanWell LRS-150-48 + DDR-120-48 + LiFePO4 20Ah (~âŹ190), 48V-Bus; CRS326 DC-input passt"). Vollständige Recherche inkl. Schaltbild, Effizienzvergleich und Gerätetabelle:
docs/hw-refresh-requirements.md §9(+ §10 D/E/F fßr die offenen Fragen).
TP25 â WLAN-Stabilisierung ⸠đ˘ KERN ERLEDIGT (2026-08-22): Dead Spot Terrasse repariert (43 % â 9 % Verlust, 20,4 s â 1,0 s). Fund F â aufgelĂśst (08-24, geräteseitig â kein Netzfehler), 5-GHz-Umfeldscan â (08-24), Kanalplan fĂźr AP 3 â gerechnet. Offen nur noch die Umsetzung, wenn der dritte AP kommt. Nicht mehr kritischer Pfad â Sammel-TP fĂźr Christophs Beobachtungen 1â6
đ Kondensiert am 2026-08-23 (Doku-Session, Punkt F). Dieser Abschnitt war mit 394 Zeilen 18 % der Datei. Die Langfassung steht vollständig und unverändert im Archiv:
teilprojekte-archiv.mdâ TP25 (Langfassung) â Messchronik (A)â(G), Funde AâE im Volltext, die beantworteten Fragen (Beobachtung 5, ch149-Herkunft,2ghz-g, Deckenmontage), Umsetzungsreihenfolge mit allen Deploy-Gotchas. Hier steht: Stand, Offenes, Merkregeln. Wer an TP25 weiterarbeitet, kommt mit diesem Abschnitt aus; wer wissen will warum etwas so entschieden wurde, liest die Langfassung.
Stand 2026-08-22, 23:30 â die Terrasse ist repariert. Erster Lauf mit beiden Ping-Strecken
(tp25-runde-20260822-2330-auswertung.md): 43 % Verlust /
20,4 s längste LĂźcke (08-21) â 9 % / 1,0 s bei gleichem Gerät und gleicher Rolle. Wirksam war das
Anheben von ap2 auf 2,5 m; 1,0 s liegt unter der HĂśrbarkeitsschwelle im Call. Der Dead Spot, der
TP25 seit dem 08-20 getragen hat, ist damit weg.
đ Kernbefund, der bleibt: das Netz ist gut, die Redundanz ist es nicht. Die frei roamende Referenz hat in 17 von 21 Raumabschnitten 0 % Verlust; der Gegen-AP liefert Schlafzimmer â84,6/38 %, Bad â82,3/24 %, KĂźche â82,0/23 %, Terrasse â78,7/19 %. Fällt ein AP aus, ist die halbe Wohnung âverbunden, aber tot". â Ein dritter AP ist nach Christophs eigener Randbedingung derzeit NICHT begrĂźndet â er kaufte Redundanz, keine Abdeckung. Das ist eine andere Frage und Christophs.
Beide vormals offenen Punkte sind am 2026-08-24 abgearbeitet â Fund F ist aufgelĂśst, der 5-GHz-Umfeldscan gefahren und der Kanalplan fĂźr einen dritten AP gerechnet. Was von TP25 bleibt, ist Umsetzung bei Bedarf, keine offene Frage:
-
â Fund F â GEMESSEN UND AUFGELĂST (2026-08-24): kein netzseitiges Phänomen. Kollektor am Manager (
/interface wifi registration-table, 15-s-Takt, 29 Samples Ăźber 7,7 min, 28 Clients), Rohdatendocs/messdaten/tp25-fundf-20260824.log. Von den drei Kandidaten sind zwei erledigt, einer bleibt â und die zwei fielen ohne Wartezeit:Kandidat Ergebnis woran es hängt (b) DHCP- lease-timegegen die Periodeâ tot dhcp-v30fährtlease-time=1dâ Renew bei 12 h. Kann 5:05 nicht erzeugen. Eine Abfrage, keine Messung.(a) periodischer VAP-Re-Apply â tot Ein Re-Apply wirft alle Clients des VAP gleichzeitig. Auf cap-wifi4-virtual1standen zeitgleich drei Clients bei 16 h 51 min Uptime, 25 von 28 Ăźber 6 h. Mit einem 5-Minuten-Takt ist das unvereinbar.(c) das Gerät selbst đĄ bleibt Der einzige Client, der im Fenster Ăźberhaupt neu verband. đ Der entscheidende Punkt an der BeweisfĂźhrung: dafĂźr braucht es die vier Zyklen nicht. Ein einziges Sample mit 16 h 51 min Uptime auf genau dem VAP, der angeblich alle 5:05 abwirft, widerlegt (a) vollständig. Die Fensterlänge begrenzt nur, was man Ăźber abwesende Geräte sagen kann.
đ´ Und genau die sind abwesend: die beiden Fund-F-MACs gibt es gerade nicht.
38:A5:C9:C0:73:1E(10.40.30.178) und38:A5:C9:BC:33:31(10.40.30.179) stehen in/ip arpaufstatus=failed, haben keine DHCP-Lease, stehen nicht in der Registration-Table und sind auch HA unbekannt (keindevice_trackerzu diesen MACs). â Das Phänomen ist an diesen Geräten derzeit nicht reproduzierbar, weil die Geräte weg sind. đ Merkregel â dieselbe wie beim P750W: bevor ein periodisches Trennen als Funk- oder Konfigurationsfehler untersucht wird, erst prĂźfen, ob die betroffenen Geräte Ăźberhaupt da sind. Beim Drucker war die Fehldiagnose âPower-Save", hier wäre sie âVAP-Re-Apply" geworden.â Fund F wird geschlossen: was auch immer der 5:05-Takt war, er lag geräteseitig, und die zwei betroffenen Geräte sind vom Netz. Netzseitig ist nichts zu tun. Nicht erneut aufgreifen, solange
.30.178/.179nicht wieder da sind und das Muster erneut gemessen wird.đĄ Nebenbefund mit Substanz â der DTU ist der einzige Wackelkandidat, den es wirklich gibt.
54:F2:9F:12:51:F0(DTU/Wechselrichter, aufcap-wifi4-virtual1= ap1) war der einzige Client mit einem Uptime-RĂźcksetzer: 43 min Sitzung, dann weg fĂźr ein Sample, dann wieder da â bei â52 dBm, also bei tadellosem Signal. Das ist derselbe Mechanismus, der schon die TransaktionTP17.1-dtu-pin-ap2begrĂźndet hat: ein ESP hat EIN Radio, sein eigener AP und die STA-Verbindung teilen sich den Kanal. Periode hier 43 min, nicht 5:05 â es ist nicht Fund F, aber es ist echt. â GehĂśrt zur ohnehin vorgesehenen Neubewertung des DTU-Pins, sobald der Kanalplan steht (s.o.).đ UrsprĂźngliche Fund-F-Formulierung (2026-08-22)
- đĄ Fund F â IoT-Clients trennen exakt alle ~5:05 bei gutem Signal (â59 dBm, vier Messpaare,
auf 3 s reproduzierbar â ein Timer, kein Funk). Muss am Manager nachgemessen werden, die
AP-Tabellen sind unter CAPsMAN leer. Kandidaten und der Test, der sie trennt:
(a) periodischer VAP-Re-Apply (Fund D war die Ursache â prĂźfen, ob es nach dem Fix weg ist);
(b) DHCP-
lease-timeder beiden MACs (38:A5:C9:C0:73:1E,38:A5:C9:BC:33:31) gegen die Periode legen; (c) das Gerät selbst mit 5-min-Duty-Cycle â dann bleibt es unverändert. đŤ Nicht die alte Power-Save-Merkregel wiederbeleben â die ist am 2026-08-13 als Fehldiagnose zurĂźckgezogen (ref_wifi_powersave_multicast).
- đĄ Fund F â IoT-Clients trennen exakt alle ~5:05 bei gutem Signal (â59 dBm, vier Messpaare,
auf 3 s reproduzierbar â ein Timer, kein Funk). Muss am Manager nachgemessen werden, die
AP-Tabellen sind unter CAPsMAN leer. Kandidaten und der Test, der sie trennt:
(a) periodischer VAP-Re-Apply (Fund D war die Ursache â prĂźfen, ob es nach dem Fix weg ist);
(b) DHCP-
-
âď¸ Entscheidung 5 GHz auf 20 MHz (statt heute 20/40) â â 5-GHz-Umfeldscan durchgefĂźhrt 2026-08-24, Empfehlung: NICHT verschmälern, Entscheidung an einen AuslĂśser hängen. â ď¸ 2,4 GHz NICHT vorschnell drosseln â dort hängen ~20 IoT-Geräte.
Messung (
/interface wifi scanam Manager, cap-wifi3 = ap1 / cap-wifi1 = ap2, 10â12 s):vom Radio auf fremdes 5-GHz-Netz Kanal Signal Abstand zum eigenen AP ap1 (5180/Ce) Drei_H288A_5G_acHG5745/ac/80 MHz â86 dBm 19 dB darunter ap2 (5220/Ce) LiwestBB93-5G5200/ac/80 MHz (Block 5180â5240) â89 dBm 24 dB darunter â Das 5-GHz-Band ist an beiden Standorten praktisch leer. Genau ein Fremdnetz je AP, beide rund 20 dB unter dem eigenen Pegel. Der Nachbar
LiwestBB93-5Gliegt mit 80 MHz zwar formal Ăźber beiden unserer BlĂścke â bei â89 dBm ist das ohne Wirkung.đŻ Warum das gegen 20 MHz spricht â die zwei Ăźblichen GrĂźnde treffen hier nicht zu:
- Fremdinterferenz: existiert nicht (â86/â89). Ein schmalerer Kanal hätte nichts abzuwehren.
- SelbstĂźberlappung: existiert nicht. ap1
5180/Ce= ch36+40, ap25220/Ce= ch44+48 â Ăźberlappungsfrei (Fund C, 08-17). - Bleibt allein das +3 dB Link-Budget â und das ist zum guten Teil schon vorhanden: in einem 40-MHz-BSS sendet die Ratenanpassung an schwache Clients ohnehin auf dem Primärkanal in 20 MHz. Den Ceiling zahlen aber alle Clients dauerhaft. Der Nutzen geht an die, die ihn schon haben.
- Und es lĂśst das gemessene Problem nicht: die offenen Schwachstellen sind die Redundanz-LĂźcken (Schlafzimmer â84,6 / 38 %, Bad â82,3 / 24 %) am Gegen-AP. +3 dB macht aus 38 % Verlust keine 0 % â das ist eine Platzierungs-/AP-Zahl-Frage, keine Kanalbreiten-Frage.
đ Der echte AuslĂśser ist die AP-Zahl, nicht die Interferenz â und das ist der Grund, die Entscheidung jetzt zu treffen statt sie offenzulassen. Beide Kanäle stehen hart in Band A (
ch-5g-ap1=5180,ch-5g-ap2=5220, keinskip-dfs-channels), und Band A hat unter ETSI genau 4 Ă 20 MHz = 2 Ă 40 MHz. Mit zwei APs ist es damit exakt aufgebraucht:Szenario bei 40 MHz bei 20 MHz 2 APs (heute) â passt genau, Ăźberlappungsfrei â passt, +3 dB, halber Ceiling 3.â4. AP â Band A voll â nur mit DFS (Band B ch52â64: Radar-Events, 60 s CAC) â 4 saubere Kanäle, kein DFS â Empfehlung: 20/40 MHz beibehalten. Die Verschmälerung ist heute ein Preis ohne Gegenwert. Sie wird fällig, sobald ein dritter AP dazukommt â dann lautet die Wahl nicht mehr â20 gegen 40", sondern â20 MHz flottenweit" gegen âDFS akzeptieren", und dafĂźr ist 20 MHz die ruhigere Antwort. Ein Zwischenweg existiert (ap1 behält 40 MHz, AP 2+3 fahren 20 MHz auf 5220/5240) und braucht ebenfalls kein DFS. đ Damit ist dieser Punkt entscheidungsreif und an einen AuslĂśser gebunden statt offen.
đ Kanalplan fĂźr den dritten AP ⸠gerechnet 2026-08-24, DFS vom User genehmigt
User-Vorgaben (2026-08-24): 20/40 MHz bleibt ¡ DFS ist genehmigt, soll aber auf ap1 oder ap2 liegen, nicht auf dem Neuen ¡ der Neue ist ein MikroTik-Deckenstrahler mit ax ¡ mĂśglicherweise kommt er an die Stelle eines der bisherigen APs ¡ der vorhandene Outdoor-AP bleibt konzeptionell auĂen vor.
Das Kanalbudget unter ETSI (Indoor), als Rechnung statt als GefĂźhl. Ein 40-MHz-Block darf keine
Bandgrenze Ăźberschreiten â [48+52] ist deshalb unmĂśglich, und daran hängt die ganze Knappheit:
| Band | Frequenzen | Kanäle | 40-MHz-BlÜcke | DFS | EIRP |
|---|---|---|---|---|---|
| A | 5150â5250 | 36/40/44/48 | 2 (5180/Ce, 5220/Ce) |
nein | 23 dBm |
| B | 5250â5350 | 52/56/60/64 | 2 (5260/Ce, 5300/Ce) |
ja + TPC | 23 dBm |
| C | 5470â5725 | 100â140 | 5 | ja + TPC | 30 dBm, outdoor erlaubt |
Heute belegen zwei APs mit 40 MHz ganz Band A. Genau das macht den dritten AP zur Bandfrage â und mit genehmigtem DFS ist sie lĂśsbar, ohne irgendwo auf 20 MHz zu gehen.
Empfohlene Zuordnung (3 APs, alle 40 MHz):
| AP | Rolle | Kanal 5 GHz | Band | DFS | 2,4 GHz |
|---|---|---|---|---|---|
| cAP ax (neu) | Primär, beste Position | 5180/Ce (36+40) |
A | nein | 2437 (ch6) |
| ap1 hAP ax² | Sekundär | 5260/Ce (52+56) |
B | ja | 2412 (ch1) |
| ap2 hAP ax² | Sekundär | 5300/Ce (60+64) |
B | ja | 2462 (ch11) |
| â | Ausweichspur, frei halten | 5220/Ce (44+48) |
A | â | â |
- Warum Band B und nicht Band C fĂźr die zwei DFS-Radios: gleicher 23-dBm-Deckel wie Band A (kein Leistungssprung zwischen den APs) und CAC 60 s statt 600 s â die 10-Minuten-PrĂźfung gilt im Wetterradar-Bereich von Band C. Band C bleibt damit frei fĂźr den Outdoor-AP, wo seine 30 dBm auch hingehĂśren.
- Warum der Neue das nicht-DFS-Band bekommt: DFS kostet 60 s CAC bei jedem Boot und jeder Provisionierung plus einen erzwungenen Kanalwechsel bei Radar-Erkennung. Diese Kosten gehĂśren auf die Radios, deren Fläche von einem anderen AP mitgetragen wird â nicht auf den bestplatzierten. Christophs Instinkt ist hier richtig.
- 2,4 GHz fällt nebenbei sauber: ch1/6/11 ist mit drei APs erstmals vollständig ßberlappungsfrei mÜglich (heute 1/11 mit einer Lßcke in der Mitte).
đ´ Zwei Fallen, ohne die der Plan teurer wird als er aussieht:
- Eine hart gepinnte Frequenz macht DFS zum Single Point of Failure.
ch-5g-ap1/-ap2tragen heute je genau einen Wert (frequency=5180bzw.5220). Bei einer Radar-Erkennung muss das Radio den Kanal verlassen â hat es keinen zweiten konfiguriert, bleibt das 5-GHz-Funk dieses APs unten. â FĂźr DFS gehĂśrt in das Channel-Objekt eine Liste (z.B.frequency=5260,5280,5220), damit der AP neu wählen kann. Das ist der Unterschied zwischen âDFS ist unkritisch" und âDFS kostet einen AP". - Vor dem Umzug die erreichte Sendeleistung messen â das ist Fund B, nochmal. Band B/C verlangen
TPC; ohne TPC sinkt der erlaubte EIRP um 3 dB. TP25 Fund B war exakt dieses Muster: 18 dBm gesetzt,
9 dBm gesendet, weil ch149 unter ETSI leistungsbegrenzt ist. â Diskriminierender Test, bevor
irgendwas gekauft oder umgezogen wird: ap2 testweise auf
5260, dann/interface wifi monitorlesen und die tatsächlichetx-powergegen die heutigen 18 dBm auf5220stellen. Kostet eine Config-Transaktion und zehn Minuten, und entscheidet, ob der Plan trägt.
âď¸ Zur Platzierung â die Messung widerspricht dem Aufstellen an einer bisherigen Stelle. Die Referenzmessung vom 08-22 sagt: 17 von 21 Raumabschnitten haben 0 % Verlust. Zusätzliche Abdeckung ist damit wertlos. Der ganze Wert liegt im Gegen-AP: Schlafzimmer â84,6 / 38 %, Bad â82,3 / 24 %, KĂźche â82,0 / 23 %.
| Variante | was sie bringt |
|---|---|
| Neuer AP an bisheriger Stelle | besseres Deckenbild an einem Punkt, der schon funktioniert. Die Drei-Zimmer-LĂźcke bleibt unverändert â gleicher Standort, gleicher Schatten. |
| Neuer AP an neuer Stelle (Richtung Schlafzimmer/Bad/KĂźche) | schlieĂt die LĂźcke, also genau die Redundanz, die gekauft werden soll. |
| đŻ Beides: cAP ax an die bisherige Stelle, der verdrängte hAP ax² wandert in den Schatten | bestes Deckenbild dort, wo die Clients sind, und eine zweite Option in den drei Räumen. Braucht keine vierte Antenne, nur eine Steckdose/PoE im Zielraum. |
â Empfehlung: Variante 3. Sie ist der einzige Weg, bei dem der Deckenstrahler an den guten Platz darf, ohne dass die gemessene Schwäche unangetastet bleibt.
- Voraussetzung Neuer AP: PoE-in am Zielort (die cAP-ax-Reihe hat einen Gigabit-PoE-Port, kein
Netzteil im Lieferumfang Ăźblich) und ein Trunk mit VLAN 10/30/40/50/90/99 wie bei ap1/ap2. Der AP
läuft auf
wifi-qcomund tritt damit als regulärer CAP dem Manager bei â kein neues Modell im GC, nur ein weiteres Gerät plus zweichannel-Objekte. â ď¸ Exaktes Modell vor dem Kauf prĂźfen (cAP axvs.cAP XL ax) â beide sind ax/wifi-qcom, unterscheiden sich in Abdeckung und Preis. - Wenn später doch der Outdoor-AP dazukommt: er gehĂśrt nach Band C (30 dBm, outdoor zulässig);
Band A/B sind dann von den drei Indoor-APs belegt und die Ausweichspur
5220/Ceist aufgebraucht.
Fund E (signal-range-Boden am Manager) â abgestuft, NICHT umsetzen. Der Sticky-Client vom 08-20
reproduzierte sich am 08-22 nicht (Treppe: sauberer Wechsel ap2âap1, 0 % Ăźber 57 s). Und auf der
Terrasse wĂźrde ein Boden schaden, weil es dort keinen besseren AP gibt, auf den gesteuert werden
kĂśnnte. â Erst wieder aufgreifen, wenn ein Sticky-Fall erneut gemessen ist.
(Der Defekt ist nicht gegenstandslos, nur unbelegt: Fund B/C wurden am 08-20 mit ap1 auf ether15
gemessen â also in genau der Stellung, in der ap1 heute wieder hängt. Er ist platzierungsunabhängig.)
â Erledigte Funde â Ergebnis und Merkregel (Volltext im Archiv):
| Fund | Ergebnis | Merkregel, die bleibt |
|---|---|---|
| A 2,4 GHz fuhr 40 MHz statt der profilierten 20 | â
08-17: Inline-channel.* auf wifi1/wifi2 geleert â 2412/2462 @ 20 MHz |
Inline-Overrides gewinnen gegen das verlinkte Profil â die SoT war die ganze Zeit richtig, das Gerät hat sie nicht befolgt |
| B ap2 sendete 5 GHz mit 9 statt 18 dBm | â
08-17: 5220/ax/Ce/I, 18 dBm |
Der Fix ist gemessen, der Mechanismus nicht â beide ersten Erklärungen (ETSI-Band C, â80 MHz kostet generell") sind widerlegt. Resthypothese + diskriminierender Test (ap2 auf 5180/Ceee) stehen im Archiv und gehĂśren vor einen Hardwarekauf |
| C 80 MHz kostete Randabdeckung | â
08-17: ch-5g auf 20/40mhz; ap1 5180/Ce, ap2 5220/Ce, Ăźberlappungsfrei |
Unter ETSI gibt es im Indoor-Band nur einen 80-MHz-Block â zwei APs kĂśnnen dort nicht beide 80 MHz fahren. Genau deshalb war ap2 je auf 5745 gelandet |
D w2-iot trug einen Channel-Override auf einem Slave-VAP |
â
08-17: Overrides auf beiden APs entfernt, w2-iot seither BR |
band ist eine Eigenschaft des Radios, nicht eines Slave-VAPs. War der Mechanismus hinter âalle SSIDs da, -iot beharrlich nicht" |
| Drift-LĂźcke â genau diese Overrides lagen auĂerhalb jeder ComplianceRule | â
08-18 mit dem TP28-GC-Umbau: wifi-*-Features hängen am Core, drei neue Rules; ein CAP hat keine Inline-Overrides mehr |
âCompliant" heiĂt nur: die abgedeckten Sektionen sind sauber. Fund A und D blieben seit 08-08 unentdeckt, während die Flotte durchgehend compliant meldete |
đ´ Deploy-Gotchas aus derselben Arbeit (kosten sonst zwei Deploys, Volltext im Archiv):
/interface/wifi/set <if> !channel lĂśscht die Inline-Sub-Properties NICHT â es wirft nicht, es tut
nichts; richtig ist einzeln !channel.width !channel.band !channel.skip-dfs-channels. Und bei
Kanalarbeit Breite VOR Frequenz ändern, sonst erzeugt man auf dem Weg eine Co-Channel-Kollision.
â ď¸ steering=/Channel-Ănderungen re-applien alle VAPs und werfen jeden Client kurz raus â nicht
während eines Calls deployen, /system backup je AP vorher.
đŹ Messwerkzeug â vier Regeln, jede aus einem Fehlbefund geboren:
- đ´ FĂźr einen Kanal-/Umfeldscan NICHT
list_wifi_interfacesbenutzen (Fund 2026-08-24): das Tool gibtsecurity.passphrasealler Profile im Klartext aus â ein Read fĂźr die Kanalbreite hat so fĂźnf WLAN-Passphrasen in ein Transkript geschrieben, den IoT-PSK inklusive. FĂźr Kanäle reicht/interface wifi channel print detail; fĂźr diecap-wifiN-Zuordnung⌠print where master=yesmit Feldauswahl. Der Scan selbst (/interface wifi scan) ist unbedenklich. - đ´ Die
cap-wifiN-Nummern sind NICHT stabil. Der Manager vergibt sie in der Reihenfolge, in der sich die CAPs anmelden â nach dem ap1-RĂźckbau sindcap-wifi1/2= ap2 undcap-wifi3/4= ap1, umgekehrt zur frĂźher fest verdrahteten Tabelle. â Die Zuordnung gehĂśrt zum Messlauf, nicht zur Auswertungszeit:tp25-walk-messung.shfriert sie alsap-map.txtein, die Auswertung lässt die Namen sonst roh â unbeschriftet ist ehrlicher als falsch beschriftet. Läufe vor dem 2026-08-22 sind nicht rekonstruierbar; wer ihre AP-Namen zitiert, prĂźft sie an der Physik (der AP im Raum liefert dort das stärkste Signal). - đ´ Ein vom Pin abgewiesener Verbindungsversuch ist in Ping-Daten nicht von einem Funkloch zu
unterscheiden â und der Manager protokolliert ihn auf
info-Ebene gar nicht. Android quittiert die Abweisung mit âVerbindung fehlgeschlagen" und wählt das Netz ab; danach misst der Rest des Rundgangs Stille. Die Klick-Konsole schlägt deshalb Alarm, sobald das gepinnte Gerät nirgends hängt, und schreibt nach 45 sUNERREICHBAR=apXâ denn âder Gegen-AP trägt hier nicht" ist das Messergebnis. - đ Eine Runde, zwei Messpunkte (Christophs Aufbau 2026-08-22): das frei roamende iPhone zeigt, was
ein normaler Client wählt â interessant ist der andere. Das S22 wird per
access-listauf den Gegen-AP gezwungen (tp25-pin-s22.sh). Gute Referenz + schlechte Sonde = die Abdeckung steht, die RĂźckfallebene nicht. Memoryref_gegen_ap_messung. - âśď¸ Start ohne Werkzeugkette:
bash docs/tp25-runde.sh [name]â legt den Lauf unterdocs/messdaten/tp25-runde-<name>/an, friert die AP-Karte ein, startet Konsole (Port 3031) und Messung, sagt die vom Interface gelesene Adresse fĂźrs Telefon an und lĂśst beim Beenden den Pin. Auswertung:tp25-gehweg-auswertung.py --dir âŚ. - âšď¸ Und das alles passiert TROTZ aktivem 802.11k/v und FT (
st-mainmitrrm=yes/wnm=yes,ft-over-ds=yes, live geprĂźft). Die Merkregelref_ft_is_not_roaming(â11k/v fehlen") ist historisch. Bei â48âŚâ55 dBm kostet eine Ăbergabe 0â2,6 s, meist unter einer halben Sekunde â nicht die Ăbergabe ist teuer, sondern die schwache Zone.
User-Randbedingung (2026-08-17, wĂśrtlich): âich weigere mich einen anderen access point zu kaufen solange ich nicht das gefĂźhl habe, wir haben alles aus dem ap rausgeholt." Das ist die Abnahmebedingung dieses TPs â keine Hardware-Empfehlung, bevor die Parameter stimmen. Der Boden ist gelegt (beide APs 18 dBm, Ăźberlappungsfrei, 20 MHz auf 2,4 GHz, ap2 auf 2,5 m); was Ăźbrig bleibt, ist die Redundanzfrage oben.
- Warum eigener TP: Christoph hat am 2026-08-16/17 sechs konkrete Beobachtungen gemeldet und ausdrĂźcklich einen TP dafĂźr verlangt; sie hängen alle an derselben Ursache-Klasse (Funkparameter, die nicht nach Manual gesetzt sind). TP25 Ăźbernimmt den offenen Rest von TP3.3 (Re-Walk, Dead-Spot-Kartierung â mit der Raumkarte vom 08-22 faktisch geleistet). TP3.2/TP3.3 stehen als Historie.
- Stand bei Sitzungsende 2026-08-22: Pin gelĂśst, Automatik aus,
crs326-coreunverändert und transaktionsfrei â dieaccess-liststeht unter keiner ComplianceRule, es gab nichts zu committen. (Seit 2026-08-23 gibt es die Rulewifi-access-list, s. TP22-Nachtrag â Fund E wäre ab jetzt transaktionsfähig.) - đ Ăbergabe:
handoff-tp25-session-20260821.md¡ Messungen:tp25-wlan-roaming-messung-20260820.md,tp25-runde-20260822-2330-auswertung.md - Abh.: TP22 â
(GC-Deploy-Pipeline). Verwandt TP3.2 (
docs/wifi-p750w-coverage-and-map.md), TP29 (nutzt dieselbe Datenquelle als Sensor). Kein Blocker fĂźr irgendetwas.
TP29 â Anwesenheitserkennung fĂźrs Energiesparen ⸠đĄ IDEE, noch nicht auf dem kritischen Pfad (angelegt 2026-08-21)
User-Formulierung (2026-08-21): âPersonen im Haus orten mit BT (Shellys), WiFi und Radar. So kommen wir dem Ziel der Energieersparnis ohne Komfortverlust groĂ näher."
- Ziel: raumgenaue Anwesenheit als Eingangssignal fĂźr Heizung und Licht â sparen, ohne den typischen Komfortverlust (âerst kalt, dann warm, wenn jemand da ist").
- đ Der Entwurfsgedanke sind die komplementären Schwächen der drei Quellen â keine trägt allein:
Quelle erkennt erkennt nicht BLE Ăźber die Shellys grobe Zonen, billig, Ăźberall vorhanden Menschen ohne getragenes Gerät; Raumgrenzen unscharf WLAN (Registration-Table am Manager: Gerät, AP, Signal) wer mit Telefon da ist, inkl. AP-Zuordnung Menschen ohne Telefon; Raum nur so genau wie die AP-Abdeckung mmWave-Radar auch die stillsitzende Person ohne Gerät braucht einen Sensor je Raum - â
Was schon steht: Shellys vollständig auf VLAN30 (TP17 â
), HA produktiv â und mit
docs/tp6-monitor-core.shexistiert seit TP25 bereits ein Sammler, der die WLAN-Präsenzdaten am Manager mitschreibt (Gerät â AP â Signal, im Sekundentakt). - â Offene Fragen fĂźr die erste Session: Datenpfad ins HA (MQTT oder REST?) ¡ Firewall-Regeln fĂźr
neue Sensorik (TP5 ist deny-by-default, jeder neue Dienst Ăźber eine VLAN-Grenze braucht eine
Regel) ¡ Aufbewahrung und Privatsphäre der Ortsdaten ¡ ob Radar-Sensoren auf
dirtyvader-iotlaufen oder eigene Segmentierung brauchen. - Abgrenzung: TP25 misst den Funk, TP29 nutzt ihn als Sensor â dieselbe Datenquelle, anderes Ziel. Die Raumkarten aus TP25 sind fĂźr TP29 direkt verwertbar: sie sagen, wie genau die WLAN-Quelle einen Raum Ăźberhaupt auflĂśsen kann.
- Abh.: keine harten. Profitiert von TP25 (Abdeckung/AP-Zuordnung) und TP11 (Monitoring), wenn es dahin kommt. Kein Blocker fĂźr irgendetwas.
TP30 â Credentials: neu setzen & rotieren (Sammelbecken) ⸠đ ANGELEGT 2026-08-24, bewusst GEBĂNDELT gegen Projektende
User-Entscheid 2026-08-24: âich wĂźrde gerne daraus einen eigenen punkt machen. ich bin mir sicher, dass es noch Ăśfters passwĂśrter zu rotieren geben wird. das machen wir dann alles gegen projektende." â nachgeschärft am selben Tag: âtp30 wird unser sammelbecken fĂźr credentials, die neu gesetzt werden mĂźssen", und TP17.2 wandert hierher.
đĽ Scope ist damit breiter als âRotation": jedes Credential, das neu gesetzt werden muss â Erstvergabe (bisher gar keins vorhanden, z.B. Shelly
SetAuth) oder Rotation (Wert verbrannt/abgelaufen). Die Trennung ist fĂźr die Priorität wichtig, fĂźr die Arbeit nicht: der Kostentreiber ist in beiden Fällen derselbe â die Konsumenten, nicht das Setzen. Neue Credential-Aufgaben kommen ab jetzt hier hinein, nicht als eigenes TP.Warum ein eigener TP und nicht vier verstreute Follow-up-Zeilen: die Rotationen teilen sich Werkzeug, Fallen und vor allem den teuren Teil â den Konsumenten (HA, Nautobot, MikroMCP,
~/.secrets). Wer sie einzeln macht, zahlt den Re-Auth-Aufwand mehrfach. Gebßndelt ist es ein Durchgang je Gerät. Deshalb steht hier die Liste, nicht der Termin.
- AuslĂśsekriterium (statt Datum): wenn die offenen TPs abgearbeitet sind bzw. Christoph das Projekt schlieĂt. đ´ Harte Ausnahme, die den Termin vorzieht: ein neuer Leak, ein fremdzugängliches Gerät oder ein Personenwechsel â dann sofort und einzeln, nicht gebĂźndelt.
| # | Credential | Umfang | Anlass | Vorarbeit | Preis der Rotation |
|---|---|---|---|---|---|
| 1 | MikroTik admin |
core ¡ branch ¡ ap1 ¡ ap2 (ein geteilter Wert) | đ´ zweimal in ein Transkript geraten (2026-08-22 via sshpass -p; 2026-08-23 durch einen Enumerationsfehler) |
â Etappe 1 durch (s.u.) | nach Etappe 2 nur noch ~/.secrets/credentials.env + ~/.claude.json + MikroMCP-Neustart |
| 2 | IoT-WLAN-PSK (sec-iot) |
dirtyvader-iot, 26 Clients |
steht im Klartext im TP17-Text â auch in der Git-Historie; Redigieren holt ihn dort nicht raus | Hebel multi-passphrase am Core verifiziert vorhanden, Tabelle leer |
23 Shellys per Skript + 3 von Hand (.249 NSPanel Pro, .244 Nuki Bridge, .227 SwitchBot) |
| 3 | Shelly-Gerätepasswort (vormals TP17.2) | 23 Shellys | Härtung (bisher keine Auth auf den Geräten) | â
Werkzeug fertig (migrate.py cmd_auth + Digest-Fallback) |
je Gerät ein HA-Re-Auth-Flow â das ist der Aufwand, nicht SetAuth |
| 4 | CF-Access-Service-Token (CF_API_TOKEN) |
Cloudflare-Zugang, s. TP14.4 | âł läuft am 2027-01-09 ohnehin ab â harter Termin, unabhängig vom Projektende | Runbook liegt (tp14.4-cf-access-token-runbook.md) |
Token neu ausstellen + ~/.secrets nachziehen; account-owned, anderer verify-Endpoint |
âšď¸ #3 war bis 2026-08-24 TP17.2 und ist jetzt vollständig hier (s. Detailabschnitt unten) â es benutzt denselben Geräte-Durchgang wie #2, ein Reboot statt zwei. #4 gehĂśrt sachlich zu TP14.4, das als TP bestehen bleibt (dort steckt das CF-Access-Profil, nicht nur der Token).
Posten #1 im Detail â MikroTik admin: Radius, Etappe 1, Etappe 2
Am 2026-08-24 aus den Follow-ups hierher gezogen â Text unverändert Ăźbernommen.
Vorgeschichte des Entscheids (Stand bis 2026-08-23, User: âmachen wir, aber erst später"):
âď¸ Nachgelagert seit 2026-08-23: erst TP17.1, dann rotieren.
Revidiert noch am selben Tag (User): beides läuft PARALLEL. Der Passphrase-Override je MAC
(s.u.) macht den Flag-Day ĂźberflĂźssig, damit war die Reihenfolge nie technisch nĂśtig â nur
Ükonomisch. Regel fßr die Parallelität: ein Gerät, das ohnehin auf Thread/Zigbee wandert,
bekommt den neuen PSK gar nicht, sondern nur einen Ăbergangs-Eintrag in der access-list.
â ď¸ Der Entscheid betrifft beide PasswĂśrter: der IoT-WLAN-PSK steht im Klartext im
TP17-Text (Archiv) und damit auch in der Git-Historie â bleibt
auf User-Entscheid 2026-08-23 vorerst unverändert, weil Redigieren ihn nicht aus der Historie
holt und Rotieren heute ~22 Shellys kostet. Nach TP17.1 sind es deutlich weniger.
đ´ Hinfällig seit 2026-08-23: TP17.1 ist verworfen â die Geräte bleiben WLAN-Clients, es
werden also nicht weniger. Die Rechnung â~23 Shellys + 3 Fremdgeräte" gilt unverändert. Anlass: das Core-Passwort ist bei einer Debug-Ausgabe im Klartext in
ein Sitzungstranskript geraten. Ursache war sshpass -p, das es in die Kommandozeile
schreibt â sichtbar in ps und in jedem argv-Trace.
đ Radius-Befund 2026-08-23: das Admin-Konto teilen sich FĂNF Konsumenten
Vor dem Rotieren erhoben â das ist deutlich mehr als âvier Geräte + eine Datei":
| Halter | Nachziehen |
|---|---|
~/.secrets/credentials.env |
Datei |
~/.claude.json (MikroMCP-Env, ROUTER_*/CRS326_*) |
JSON + MCP-Neustart |
Nautobot-Stack NAUTOBOT_ROUTEROS_USERNAME/PASSWORD |
Stack-Datei + Portainer-Redeploy auf der DS923 |
HA: VIER mikrotik-Integrationen (.99.1/.2/.11/.12, 40 device_tracker) |
đ´ supports_reconfigure: false â NICHT skriptbar, 4Ă Re-Auth von Hand |
Repo-Skripte (routeros/*.py, nautobot/*.py, docs/tp*.sh) |
ziehen aus ~/.secrets â automatisch |
â User-Entscheid 2026-08-23: Konten trennen statt ein Passwort teilen. Nicht das Rotieren ist
das Problem, sondern dass ein einziges admin von fĂźnf Stellen benutzt wird â jede Rotation kostet
sonst wieder vier Re-Auths und einen Stack-Redeploy.
â Etappe 1 DURCH (2026-08-23): dedizierte Service-Accounts auf allen vier Geräten
Rein additiv, kein laufender Dienst berĂźhrt. Vorher existierte nur admin (Gruppe full).
| Gruppe | Policy | User | Zweck |
|---|---|---|---|
grp-ha |
read,api,rest-api,test |
ha |
HA-Mikrotik-Integration, lesend Ăźber API 8728 |
grp-nautobot |
ssh,read,write,test,sensitive |
nautobot |
Golden Config Ăźber SSH/Netmiko (Backup und Deploy) |
PasswĂśrter: MIKROTIK_HA_PASS / MIKROTIK_NAUTOBOT_PASS in ~/.secrets/credentials.env
(32 Zeichen, je Dienst eigen, geräteßbergreifend gleich).
đ Angelegt Ăźber ein Skript, das die Werte aus der Datei liest â bewusst nicht Ăźber
manage_user, dessen password-Parameter im Sitzungstranskript landen wĂźrde.
Abnahme, auf allen vier Geräten geprßft:
haliest (identity,dhcp-leaseâ am Core 59 Einträge, genau was das Device-Tracking braucht), Schreibversuch wird abgewiesen.nautobotmeldet sich per SSH an und exportiert; kein REST (bewusst keinrest-apiin der Policy).- đŻ Der Export von
nautobotist byte-identisch zu dem vonadmin(391/56/87/87 Zeilen je Gerät) â die GC-Compliance driftet beim Umstellen nicht. Das war das Hauptrisiko dieser Etappe. /userwird von keiner ComplianceRule abgedeckt â die neuen Konten erzeugen selbst keinen Drift.
âď¸ Etappe 2 offen â die Konsumenten umhängen, DANN admin rotieren
- Nautobot auf
nautobotumstellen (Stack-Env + Portainer-Redeploy), GC-Backup-Lauf als Abnahme. - HA: die vier
mikrotik-Einträge auf denha-User bringen. â ď¸ Reconfigure ist nicht skriptbar; Entfernen-und-neu-Anlegen wäre skriptbar, riskiert aber die 40device_tracker-Entity-IDs (sie leiten sich aus der MAC ab, kämen also gleich zurĂźck â aber erst nachdem die alten Registry-Einträge weg sind, sonst hängt HA ein_2an; dieselbe Falle wie beim Shelly-Rename). - Erst danach
adminrotieren â dann berĂźhrt es nur noch~/.secrets+~/.claude.json.
đ´ Eigener Fehler, protokolliert: beim Erheben des Radius hat ein json.dumps-Aufruf Ăźber
~/.claude.json das ap1-Passwort im Klartext ins Transkript geschrieben. Da alle vier Geräte
dasselbe admin-Passwort teilen, ist es derselbe Wert, der am 2026-08-22 bereits verbrannt ist â
keine neue Expositionsklasse, aber ein zweiter Beleg dafßr, dass die Rotation fällig ist.
Merkregel: Secrets-Enumeration gibt nur SchlĂźsselnamen aus, nie Werte â auch nicht abgeschnitten.
â
Vorbedingung erfĂźllt, geprĂźft 2026-08-23: alle vier
Skripte laufen auf sshpass -e (tp6-marker/server.py, tp6-monitor-core.sh,
tp25-walk-messung.sh, tp25-pin-s22.sh) â die frĂźhere Notiz, zwei davon hätten die Schwäche
noch, war veraltet. Ăbrig blieb nur CLAUDE.md, das sshpass -p weiterhin aktiv als Reboot-Weg
empfahl â am 2026-08-23 auf sshpass -e korrigiert. Damit ist die Rotation ohne RĂźckfallgefahr
fahrbar.
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, Profilsec-iotâcfg-iotâ SSIDdirtyvader-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), drei Commits (e76289cErsteintrag 2026-07-11,f0d1ff908-08,7ee64b5Doku-Split 08-23), Remote ausschlieĂlichgitea.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-main1, MEDIA/UNTRUSTED/GUEST je 0). VLAN30 fĂźhrt 41 Leases/Reservierungen (5 aktuellbound, 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.pyhat kein Rotate-Kommando (nurmigrate/deanchor/auth/table) â es bräuchte eine kleine Variante Ăźber denselbenset_sta-Pfad. (b) Ein Flag-Day ist vermeidbar: RouterOS 7 kann in/interface wifi access-listPassphrase-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 âkeineaccess-list" bekäme damit endlich einen Zweck â und seit dem 08-23 gibt es die ComplianceRulewifi-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. -
CF-Access-Service-Token â Rotationsposten #4, am 2026-08-24 aus den Follow-ups hierher gezogen (stand dort als âTP14.4 â CF-Access-Service-Token rotieren"). Sachlich gehĂśrt er zu TP14.4 (CF-Access-Profil fĂźr Claude, Runbook
docs/tp14.4-cf-access-token-runbook.md); hier steht er, damit die Rotationsliste vollständig ist. â ď¸ DerCF_API_TOKENläuft ohnehin 2027-01-09 ab â spätestens dann ist dieser Posten fällig, unabhängig vom Projektende.
Posten #3 im Detail â Shelly-Gerätepasswort (SetAuth), vormals TP17.2
Am 2026-08-24 als eigenes TP aufgelĂśst und hierher gezogen â Text unverändert Ăźbernommen.
User 2026-08-23: âauĂerdem haben wir einen punkt, um die shellys mit einem pwd zu schĂźtzen." Damit ist der ZurĂźckgestellt-Status von 2026-07-13 aufgehoben. BegrĂźndung der Kopplung: die PSK-Rotation fasst ohnehin jeden Shelly an und rebootet ihn â
SetAuthgehĂśrt in denselben Durchgang, ein Reboot statt zwei.â Werkzeugseitig ist nichts zu bauen:
mcp/shelly/migrate.pyhatcmd_auth(setztShelly.SetAuthmit SHA-256-ha1gegen die Geräte-realm, Dry-Run als Default), und_rpchat einen Digest-Auth-Fallback auf 401 mitSHELLY_DEVICE_PW.đ´ Der teure Teil ist nicht
SetAuth, sondern Home Assistant. Mit aktiver Auth verlangt die Shelly-Integration je Gerät einen Re-Auth-Flow â bei 23 Geräten ist das der Aufwand, und genau der Grund fĂźr die frĂźhere Einstufung als âKosmetik". â Erst an EINEM Gerät machen und den HA-Aufwand messen (Vorschlags15 technik_pve, RSSI â36, unkritisch), bevor der Rest folgt. Sonst bĂźndelt man ein ungemessenes Risiko in eine 23-Geräte-Aktion.
UrsprĂźnglicher Text (historisch)
- Was: je Gerät
Shelly.SetAuth(Useradmin, realm-individuellerha1= sha256("admin::"), einheitliches Klartext-PW) viamcp/shelly/migrate.py auth --go.SHELLY_DEVICE_PWliegt inmcp/shelly/.env(gesetzt, len 13). Runner + Digest-Auth-Fallback in_rpcfertig. - Warum zurĂźckgestellt: rein kosmetisch/Härtung; bricht die HA-Shelly-Integration, bis pro Config-Entry (22Ă) das Credential neu eingetragen ist â disruptiv, kein Mehrwert im abgeschotteten IOT-VLAN. Erst nach dem Netz-Teardown (TP19) neu bewerten.
đ´ Neues Leak-Ereignis 2026-08-24 â der IoT-PSK ist erneut exponiert
Beim 5-GHz-Umfeldscan fĂźr TP25 wurde mcp__mikromcp__list_wifi_interfaces gegen den Manager gefahren,
um die cap-wifiN-Zuordnung zu bestimmen. Das Tool gibt security.passphrase aller Profile im
Klartext zurĂźck â damit stehen alle fĂźnf WLAN-Passphrasen (main, iot, media, untrusted,
guest) in einem Sitzungstranskript. Kein Werkzeug hat versagt; es war das falsche Werkzeug fĂźr eine
Kanalabfrage. Betrifft Posten #2 (IoT-PSK) und zusätzlich vier bisher unverbrannte Passphrasen.
âď¸ Nach der âharten Ausnahme" oben ist das ein Vorziehgrund â Entscheidung gehĂśrt Christoph.
Gegenargument, das dieselbe Rechnung wie am 08-23 ergibt: der IoT-PSK lag ohnehin schon im Klartext
in der Git-Historie, neu exponiert sind vor allem main/media/untrusted/guest â und die kosten
beim Rotieren wenige Clients, nicht 26. â main und guest wären billig und einzeln machbar,
unabhängig vom gebßndelten Durchgang.
Fallen, die fĂźr jedes Setzen/Rotieren gelten (nicht neu erheben)
- đ´ Kein Read auf
/interface/wifi, wenn nur Kanäle/Interfaces gebraucht werden âlist_wifi_interfacesliefert alle Passphrasen im Klartext mit (Leak vom 2026-08-24, s.o.). Feldauswahl benutzen oder/interface wifi channel print detail. - đ´ Niemals
sshpass -pâ schreibt das Passwort in die Kommandozeile, sichtbar inpsund in jedem argv-Trace. Genau so entstand Leak #1.-ehält es in der Umgebung des Kindprozesses. Der Repo-Stand ist bereits durchgängig-e. - đ´ PasswĂśrter nie per MCP-
password-Parameter setzen, sondern per Skript aus~/.secrets(manage_user set-password;/user set*ist per Deny-Policy blockiert). - đ´ Keine Secrets-Enumeration im Transkript â das war Leak #2, ohne dass irgendein Werkzeug fehlerhaft war.
- đ
wifi-securityist als ComplianceRule grĂźn, aber NICHT deploybar (Passphrasen stehen als<<REDACTED>>im Template). Ist-Stand fĂźr #2 immer per REST vom Gerät lesen (GET http://10.40.99.1/rest/interface/wifi/security), nie auswlan-psks.env. - â ď¸ CAPsMAN, fĂźr #2: eine Profiländerung wirkt erst nach
remote-cap provisionfĂźr beide APs â und die Abnahme ist eine frische DHCP-Lease je SSID, nicht die Registration-Table. - â ď¸ FĂźr #2 zuerst
multi-passphrasegegen WPA3/SAE testen â auf einer Wegwerf-SSID, nie andirtyvader-iot.sec-iotfährtwpa2-psk,wpa3-psk; trägt multi-passphrase SAE nicht, sperrt man 26 IoT-Geräte auf einmal aus, inklusive Nuki und NSPanel. - â ď¸
s1/s2/s3sind ausgesteckt und kommen im Dezember mit dem alten PSK zurĂźck â der Ăbergangs-Eintrag muss sie Ăźberleben oder sie werden bei RĂźckkehr von Hand nachgezogen. - đ´ HA- und Repo-Nummerierung der Shellys weichen ab (
s10,s17) â immer Ăźber MAC/IP zuordnen, nie Ăźber die s-Nummer. - Abh.: keine harten; #2 und #3 laufen sinnvollerweise in einem Geräte-Durchgang. Blockiert nichts. Die frĂźhere Kopplung âerst TP17.1, dann rotieren" ist gegenstandslos â TP17.1 ist am 2026-08-23 verworfen, die Geräte bleiben WLAN-Clients.
TP31 â Reverse Proxy fĂźr innen und auĂen; cloudflared von sechs Knoten auf einen ⸠đ GEPLANT 2026-08-25
AuslĂśser (User 2026-08-24): âich weigere mich, fĂźr public applications 2 cloudflare container zu installieren. ⌠ich habe [den Core] unter der prämisse gekauft, dass Ăźber diesen dann auch die public apps laufen kĂśnnen. wir wollten doch den core als single point of failure platzieren."
Der Vorwurf, fair geprĂźft
Eine schriftliche Zusage, dass die Public-Apps auf den Core wandern, existiert nicht â TP16.1 ist durchgehend auf den privaten Zugang zugeschnitten und hält mehrfach fest, dass âder cloudflared-Public-Teil unberĂźhrt blieb". Aber der Vorwurf trifft trotzdem etwas Richtiges: dasselbe Dokument begrĂźndet die gesamte Auswahl mit Christophs Prinzip â âRouter = einziger SPOF, keine Abhängigkeit zu anderen Rechnern" â und niemand hat je geprĂźft, ob der Ăśffentliche Strang ohne sechs Container auskommt. Keine Täuschung, aber eine ungeprĂźfte Annahme.
Die LĂśsung ist nicht âraus aus Cloudflare", sondern âein Knoten statt sechs"
Caddy als Reverse Proxy fĂźr innen und auĂen, emsenhuber.net in beiden Richtungen, plus ein
cloudflared als Tunnel-Endpunkt.
- âď¸ Erst geprĂźft, dann verworfen: der Weg Ăźber
dst-nat. Der Core hält90.146.33.177direkt ohne CGNAT, Liwest lässt eingehend alles durch (User: âhatte frĂźher schon nginx hier laufen"), und Origin Rules (Ziel-Port, Free = 10 Regeln), die CF-HTTPS-Ports (443, 2053, 2083, 2087, 2096, 8443) sowie Authenticated Origin Pulls sind alle im Free-Tarif enthalten. Es ginge also ohne jeden Container. - đŻ Christophs Einwand ist der bessere Weg: âcaddy muss so oder so. nachdem dieser vorhanden ist, fahren wir natĂźrlich Ăźber zero trust apps. noch etwas sicherer, aber kein zusätzlicher knotenpunkt, der ausfallen kann." Der Tunnel spart drei Risiken auf einmal: keine angreifbare Origin-IP, keine CF-IP-Allowlist, kein DDNS als Voraussetzung (der TP10-Updater bliebe sonst zwingend).
Zielbild
Internet ââş Cloudflare (Access, WAF) ââş Tunnel Âťbf-publicÂŤ ââş cloudflared auf ap1/ap2
WARP ââş cf-mesh (nativ am Core, kein Container) ââ
LAN ââş Split-Horizon-DNS ââââââââââââââââââââââââ´ââş Caddy (LXC 130, 10.40.20.40)
âââş alle Dienste per Host-Header
Ăffentlich bleiben vier: vw (Bitwarden-Clients), hass (Companion-App), n8n (Webhooks Dritter),
gitea (Access nur fĂźr die Web-UI, Git-/API-Pfade daran vorbei â Push ohne WARP bleibt).
Alles andere ist intern; 19 Ingress-Zeilen Ăźber drei Tunnel werden EINE Catch-all-Regel auf Caddy.
Wo cloudflared läuft â und warum die APs (live gemessen 2026-08-24/25)
| Gerät | Arch | Flash frei | RAM frei | Container? |
|---|---|---|---|---|
| ap1 / ap2 (hAP ax²) | arm64 | 95 MB / 128 MB | 690 MB / 1 GB | â ja |
| crs326-core | arm 32-bit | 2,9 MB / 16 MB | 512 MB | â nie |
- â Christophs Argument, das den Ausschlag gibt: âcf auf den aps hat den vorteil, dass wir gegenĂźber unseren hosts/container nicht blind sind." â Der AP ist eine eigene Maschine, kein Docker-Host; die macvlan/ipvlan-Blindheit kann dort prinzipiell nicht auftreten. Kein anderer Ort hat das. đĄ Daraus folgt eine Reserve: fällt Caddy aus, kann derselbe Connector Ăźber eine zweite Ingress-Regel direkt auf ein, zwei kritische Backends zeigen.
- đ´ Ehrliche Einschränkung: cloudflareds einziges Origin ist Caddy. Solange Caddy auf pve liegt,
kauft ein Connector auf dem AP Hardware-Diversität, aber keine VerfĂźgbarkeit â fällt pve aus, ist
alles weg. Der echte Gewinn kommt erst mit
caddy-bf2(LXC 131). - Caddy oder AGH zusätzlich auf die APs? Nein. 95 MB minus RouterOS-Reserve fßrs eigene
.npk(~20 MB) = ein Container pro AP. Kriterium, das auch kĂźnftig trägt: auf die Infrastruktur darf, was sich selten ändert und wenig schreibt â cloudflared ja (Config liegt in Cloudflare, schreibt nichts); Caddy nein (Caddyfile ändert sich bei jedem neuen Dienst); AGH nein (Query-Log schreibt dauernd â NAND-VerschleiĂ). - â ď¸ Preis:
containerverlangt einedevice-mode-Ănderung mit physischer Bestätigung am Gerät (ap1 Technik UG, ap2 Technik OG). Und der AP bekommt eine zweite Rolle neben dem WLAN.
Umsetzung
- â
ERLEDIGT 2026-08-25 â Leichen gelĂśscht:
120 adguard-bf1,121 adguard-bf2,128 nginx-proxy-manager,129 caddy,130 pihole1,131 pihole2â alle warenstopped,onboot: 0und hingen konfigurativ noch am toten VLAN1 (10.40.41.116/.117, GW.41.254).pct destroy --purgehat120und128zugleich aus dem Backup-Job entfernt. Alle 72 PBS-Snapshots radiert â sieben davon waren in PBS alsprotectedmarkiert und mussten erst Ăźberpvesh set âŚ/content/<volid> --protected 0entschĂźtzt werden (User-Freigabe 2026-08-25). Gegenprobe: 0 Snapshots zu allen sechs IDs. â ď¸ Merkregel:pvesm freescheitert an geschĂźtzten Snapshots mit âcannot remove protected snapshot" â und zwar stillschweigend, wenn man den Fehler nicht ausliest. Wer nur die Erfolgszähler betrachtet, hält ein halb erledigtes Aufräumen fĂźr fertig. - â
ERLEDIGT 2026-08-25 â LXC 130
caddy-bf1steht: Debian 13, VLAN20tag=20,10.40.20.40/24, GW/DNS10.40.20.1,onboot: 1,startup order=10(Core-Stufe nach TP32), 4 GB / 512 MB, 2 Cores. In den Backup-Jobbackup-6dcf5c10-610faufgenommen. Caddy v2.11.4 installiert, Moduldns.providers.cloudflareverifiziert vorhanden. Egress geprĂźft (DNS, HTTPS, CF-API) â TP5 lässt VLAN20 nach drauĂen. - âł Konfiguration liegt, Dienst läuft noch nicht â es fehlt genau ein Credential.
caddy/Caddyfileim Repo (17 Sites: 4 Ăśffentlichvw/hass/n8n/gitea, 13 intern inkl. der vier MCP-Endpunkte und drei HTTPS-Backends mittls_insecure_skip_verify), SyntaxprĂźfung läuft durch. Zertifikate ausschlieĂlich per DNS-01, damit auch rein interne Namen gĂźltige Zertifikate bekommen. đ Offen: das eng geschnittene Token âZone:DNS:Edit, Zone-Resource aufemsenhuber.netbegrenzt, nicht das account-weiteCF_API_TOKENâ Posten fĂźr TP30. Ablage alsCF_DNS_API_TOKENin~/.secrets/credentials.env, Ausrollen percaddy/deploy.shâ das liest den Wert von dort und schreibt ihn in die Container-Env, ohne ihn je auf stdout oder in eine Kommandozeile zu bringen (dieselbe Regel wiesshpass -e). - Split-Horizon â â
ENTSCHIEDEN 2026-08-25: in AdGuard, zusammen mit TP23 Stufe 2.
Begruendung des Users: nichts zweimal bauen. Konsequenz, die man kennen muss: AdGuard wird
damit vom Nebendarsteller zum Resolver des Standorts â heute liefert der DHCP in allen
sieben VLANs
dns-server = <VLAN>.1, also den Core; AGH auf10.40.20.16bekommt niemand. â Der Schritt ist groesser als âein paar Eintraege": er verschiebt die DNS-Aufloesung des ganzen Hauses vom grundsoliden Core in einen Container. đ Deshalb als Paar bauen â TP32 reserviert110/111fuer DNS, und die geloeschten Altlasten hiessen nicht zufaelligadguard-bf1/adguard-bf2: die Redundanz war urspruenglich schon einmal geplant. Ein einzelner AGH waere ein DNS-SPOF auf pve. - Tunnel
bf-public+ Connectoren auf ap1/ap2, CNAMEs umhängen (n8nâgiteaâhassâvw). - Abbau:
bf-nas/bf-pve/bf-mmlÜschen, sechs Container weg, SSH-Browser-Rendering entfällt, MCP-Clients auf FQDN umstellen (~/.claude.jsonspricht heute10.40.20.105:9583und10.40.20.173:3000roh;n8n-mcp/gitea-mcpkommen dabei wieder in Betrieb).
â Stand 2026-08-25 nach dem Bau â Caddy laeuft, zwei Backends fielen dabei auf
17 von 17 Zertifikaten per DNS-01 von Let's Encrypt geholt, Dienst active+enabled,
Proxy-Funktion gegen den Host-Header verifiziert: nautobot 302 ¡ gitea 200 ¡ pve 200 ¡
portainer 200. caddy/deploy.sh laeuft End-to-End (Token wird aus ~/.secrets gelesen, per
Fingerprint gegengeprueft: eigenes Token, nicht das account-weite).
đ´ Fund: grafana war seit Langem tot â und Cloudflare Access hat es maskiert.
LXC 104 alpine-grafana stand auf stopped und konfigurativ noch auf VLAN1
(10.40.41.109); die CF-Ingress-Zeile zeigte auf 10.40.20.109:3000 â eine Adresse, die es fuer
Grafana nie gab. Im FQDN-Smoke-Test lieferte grafana.emsenhuber.net trotzdem ein sauberes
302 â das war der Access-Login, nicht der Dienst.
â ď¸ Das ist exakt die Falle aus TP16.3 §8, diesmal in freier Wildbahn: ein Statuscode vom
oeffentlichen FQDN sagt nichts ueber das Origin, solange Access davor steht. Ein toter Dienst
sieht monatelang gesund aus. â Caddy-Zeile entfernt (16 Sites), LXC 104 zerstoert und aus dem
Backup-Job genommen â die 14 PBS-Snapshots bleiben bewusst stehen, sie sind die einzige Kopie
etwaiger Dashboards. Wiederaufbau spaeter als eigener Punkt, dann nach TP32-Systematik.
đĄ hass liefert 400 â der bekannte offene Punkt aus TP16: Home Assistant braucht
10.40.20.40 in http.trusted_proxies plus use_x_forwarded_for: true, sonst weist es den neuen
Proxy ab. Gehoert vor die CNAME-Umstellung von hass.
đŻ Kernabnahme: WAN trennen, dann alle Dienste per FQDN. Das ist die Autarkie, um die es geht. â ď¸ Preis, offen benannt: mit Split-Horizon greift Access innerhalb des Netzes nicht mehr; dort tragen TP5-Segmentierung und die App-eigene Auth.
HA-Ausblick (nicht Teil der Umsetzung)
Es bleibt bei Caddy â zustandslos bis auf den Zertifikatsspeicher, identisches Caddyfile je Instanz,
versionierbar; NPM hätte eine Datenbank, die man mitreplizieren mßsste.
đ´ Prinzip fĂźr vw: der Eingang darf nicht klĂźger sein als die Datenbank. TP20.1 sieht
manuelles Promote vor. Zwei Connectoren auf verschiedene Caddys an verschiedenen Standorten
wĂźrden die Hälfte der Schreibzugriffe auf einen read-only Standby schicken â das #1033-Muster,
diesmal mit Datenverlust statt 530ern. Automatisches Ingress-Failover erst, wenn der DB-Teil es trägt
(User: vertagt bis TP20.1 Phase 1+2 laufen).
- Abh.: TP32 (Nummern/IPs â vergibt
130/.40), TP16.1 â (Mesh), TP23 Stufe 2 (Split-Horizon-Ort). LĂśst ab: TP16 (reziprokes HA) und TP16.2 (dervw-bypass-Strang bekommt mit Caddy + CF davor einen anderen Schutz). TP16.3 ist der Pilot dieses TP. - đ Vollständiger Plan mit allen Abwägungen:
~/.claude/plans/expressive-pondering-clarke.md
TP32 â Nummern- und Adress-Systematik ⸠đ˘ KONZEPT STEHT (2026-08-25), Startreihenfolge bereits repariert
User-Auftrag 2026-08-24: âdu/ich sollst in der lage sein, selbstständig nach einem vorgegebenen system freie ips vergeben zu kĂśnnen ⌠und diese systematik findet sich in anderen netzen kĂźnftig auch wieder" ¡ âich meine 100 sollte kĂźnftig fĂźr die core services stehen."
Eigener TP, weil es eine Konvention ist, kein Bauteil â TP31 ist ihr erster Kunde. Regel: Bestand bleibt, wo er ist; jeder NEUE Gast folgt der Systematik.
đ Ein gemeinsamer VMID-Raum fĂźr VMs und LXCs. 100 haos und 330 RaspberryMatic sind VMs â
die Klasse bestimmt die Nummer, nicht die Virtualisierungsart.
| Kreis | Klasse | heute dort (VM kursiv) |
|---|---|---|
| 100â199 | Core / Infrastruktur | 108 mcast-relay |
| 200â299 | Daten / DBs (Precious-Tier) | (105, 106, 107, 302 â später hierher) |
| 300â399 | Security / Identity | â |
| 400â499 | Platform / Runtime | â
400 docker passt bereits |
| 500â599 | App-Services / Smart Home | 101, 102, 112, 150, 100, 330 â später hierher |
| 600â699 | Business / ERP | 201 openproject |
| 700â799 | KI / ML | â |
| 800â899 | Dev / R&D / Test | â |
| 900â999 | Ephemeral / Scratch | wird ungefragt gelĂśscht |
Zehnerschritte innerhalb eines Kreises (âRespektabstand", User), damit Instanzen und Nachbarn Platz
haben: 100â109 netznah ¡ 110â119 DNS ¡ 130â139 Reverse Proxy ¡ 150â159 Monitoring ¡
170â179 PKI/Zeit. â AGH 110, Caddy 130.
Letztes Oktett je /24 â gilt in jedem VLAN, an jedem Standort:
| Oktett | Rolle | Anker heute |
|---|---|---|
.1â.9 |
Gateways / L3 | .1 je VLAN â
¡ 99.1 core, 99.2 branch â
|
.10â.29 |
physische Hosts (Storage, Hypervisor, APs) | NAS 20.10 â
¡ APs 99.11/.12 â
|
.30â.99 |
virtuelle Core-Services, Zehnergruppen wie oben | DNS .3x ¡ Ingress .4x ¡ DBs .5x ¡ Security .6x ¡ Monitoring .7x |
.100â.199 |
App-Services | |
.200â.249 |
DHCP-Pool | |
.250â.254 |
VIPs / Relays |
đ Der Merk-Trick: die Zehnergruppe im Oktett spiegelt die der VMID. 110 agh â .3x,
130 caddy â .4x. Wer eine Zahl kennt, kennt die Klasse der anderen.
Warum der Bestand anders aussieht â er war nicht falsch, nur auf einer anderen Achse
User 2026-08-25: âzuerst war haos, welches mit 100 den nummernkreis fĂźr iot erĂśffnet hat. und die
anderen ⌠gehÜrten zu ha, daher 1xx. erst später habe ich erfahren, dass die nummer die
startreihenfolge definiert."
â Der Bestand gruppiert nach ZugehĂśrigkeit, die neue Systematik nach Klasse. Beide Achsen sind
legitim; die zweite ist die, die das System auswertet. Der alte 1xx-Block ist der Smart-Home-Block
und wandert später als Gruppe nach 5xx.
â ERLEDIGT 2026-08-25: die Startreihenfolge war nachweislich falsch
đ´ Und der Hebel ist NICHT die VMID. Drei Gäste hatten ein explizites startup: order=
(101 iob-master 110, 102 mqtt5 120, 100 haos 125), alle Ăźbrigen keines. Proxmox startet erst
alle Gäste mit order=, dann den Rest nach VMID â real lief also iob-master â mqtt5 â haos und
erst danach platform-pg, mariadb, z2m25, docker.
â Home Assistant startete vor seiner eigenen Datenbank.
Repariert (wirkt beim nächsten pve-Neustart):
order= |
Stufe | Gäste |
|---|---|---|
| 10 | Core | 108 mcast-relay |
| 20 | Daten | 105 platform-pg (up=15), 302 mariadb (up=15), 106 influxdb2, 107 redis |
| 30 | Platform | 400 docker (up=20) |
| 40 | Broker / Funk | 102 mqtt5 (up=10), 112 z2m25, 330 RaspberryMatic |
| 50 / 51 | Anwendungen | 101 iob-master, 100 haos, 150 iob-exposed |
đŻ Die wichtigste Erkenntnis des TP: VMID = Klassifikation, startup: order= = Abhängigkeitsreihenfolge.
Die Umnummerierung muss die Startreihenfolge gar nicht reparieren â das ist bereits erledigt, ohne eine
einzige ID zu ändern. Die Nummernkreise sind damit reine Ordnung und Lesbarkeit, und der Bestand
kann in Ruhe nachziehen.
- Offen: Migration des Bestands (Tabelle oben) â am Ende der Reise, nicht jetzt. Und die
Kollision AGH will
.30, dort sitzt Nautobot (.31= nautobot-worker) â Vorschlag.36als Interim,.30erst nach dem Nautobot-Umzug in den App-Bereich. Fällt vor dem AGH-Neubau an. - Abh.: keine. Blockiert nichts, aber TP31 vergibt bereits danach.
TP33 â Sonos aus der Ferne bedienen (VPN/WARP) ⸠đĄ IDEE, bewusst zurĂźckgestellt (angelegt 2026-08-25, User-Entscheid âspäter entscheiden")
- AuslĂśser: beim Sonos-Fall vom 08-25 kam die Frage auf, ob die Player auch von unterwegs auffindbar sein sollen. Antwort fĂźr jetzt: nein, später entscheiden â hier nur festgehalten, damit die BegrĂźndung nicht verloren geht.
- đ Der Kernsatz: SSDP und mDNS queren einen Tunnel nicht von selbst. Beides ist link-lokal
(TTL 1 bzw. Multicast auf
224.0.0.251), ein WireGuard-/WARP-Tunnel ist ein Punkt-zu-Punkt-Interface ohne Broadcast-Domäne. Es bräuchte also dieselbe Relay-Bauart wie TP7.1, nur ein zweites Mal â ein Bein im Tunnel, eines in VLAN40 â plus die passendeforward-Regel (TP5 ist deny-by-default). - âď¸ Warum zurĂźckgestellt: echter Zusatzaufwand fĂźr einen Randfall. Steuern aus der Ferne geht
heute schon Ăźber die Sonos-Cloud-App und Ăźber HA (
cf-mesh/CF-Tunnel), beides ohne Discovery. Fehlt nur die Desktop-App von auĂen â dafĂźr lohnt der zweite Relay-Strang derzeit nicht. - â ď¸ Nicht mit dem Gegenteil verwechseln: mit aktivem WARP findet die App die Player auch lokal
nicht â erwartbares Verhalten, kein Fehler (
ref_warp_local_icmp_trap, Gotcha inCLAUDE.md). Wer den Fernzugriff baut, muss genau diesen Fall mit auflĂśsen. - Abh.: TP7.1 (Relay-Muster) â
, TP16.1 (
cf-mesh) â . Blockiert nichts.
Abgeschlossene Teilprojekte ⸠teilprojekte-archiv.md
34 abgeschlossene TPs liegen dort im Volltext, unverändert und mit eigenem Inhaltsverzeichnis. đ FĂźr einen Statusbaum reicht diese Datei: die Tabelle unten nennt jedes archivierte TP, und die Zeile ââ Durch (Fundament)" weiter unten fĂźhrt sie noch einmal mit Abschlussdatum. Das Archiv muss dafĂźr nicht geĂśffnet werden â es trägt die BegrĂźndungen, nicht den Status.
Kurzorientierung, wo was zu finden ist:
| Thema | TPs im Archiv |
|---|---|
| Fundament / Fabric | TP1 ALLNET-Core (Gerät ausgebaut) ¡ TP2/TP2.1 Omada (ausgebaut) ¡ TP15 HW-Refresh CRS326 ¡ TP21.1 Core-Cutover-Recovery ¡ TP4 Router-Cutover (Rolle seit 08-08 auf dem Core) |
| WLAN | TP3 (historisch) ¡ TP3.1 ¡ TP3.2 ¡ TP3.3 (in TP25 aufgegangen) ¡ TP28 CAPsMAN auf dem Core ¡ TP25-Langfassung |
| Firewall / QoS | TP5 deny-by-default ¡ TP26 ip-firewall-filter unter Drift-Kontrolle ¡ TP6 CAKE (geschlossen statt gebaut) ¡ TP6.1 Upload-Priorisierung |
| Discovery / Media | TP7 mDNS ¡ TP7.1 SSDP-Relay ¡ TP7.2 HAâSonos |
| Hosts / Migration | TP14 (+.1/.2/.2a/.3/.5) VLAN20-Cutover ¡ TP17 ShellyâVLAN30 ¡ TP19 VLAN1-Retirement |
| Control-Plane | TP20 Platform-Postgres ¡ TP21 Nautobot GC ¡ TP22 Adoption + Compliance-Push ¡ TP27 RouterBOOT 7.24 ¡ TP-R Capabilities-Sweep |
| Zugang | TP10 Multi-Site-VPN (offen nur der DDNS-Updater, s. Follow-ups) ¡ TP16.1 natives CF-Mesh |
| Verworfen | TP9 Gateway-HA (User-Entscheid 2026-08-08) |
Reihenfolge / Abhängigkeiten
đŻ Kritischer Pfad (Stand 2026-08-23) â LEER
TP5 E1 â
ââş E2 â
ââş E2-Nachtrag â
ââş E3 Drop â
ââş E4 input+MGMT â
ââş E5 MAINâIOT â
ââş TP6 â
GESCHLOSSEN
đŻ DER KRITISCHE PFAD IST LEER (2026-08-23).
Das Projekt ist in seinem Kern fertig: deny-by-default steht, Golden Config
steht, WLAN steht, VLAN1 ist weg, und TP6 ist beantwortet statt offengelassen.
Was jetzt kommt, entscheidet Christoph â nichts blockiert mehr etwas.
âĄď¸ Update 2026-08-22 (Sitzungsende): TP25 hat den Pfad seit dem 08-20 blockiert und ist im Kern erledigt â die Terrasse ist repariert, der Dead Spot weg, Fund E abgestuft. Damit ist TP6 wieder der einzige Punkt auf dem kritischen Pfad, und seine Prämisse ist inzwischen gemessen (
tp6-praemisse-messrunbook.md§5): formal Fall B (+28âŚ47 ms in der Senderichtung), aber durch sechs Lastphasen mit laufendem Videocall kein einziger Problem-Klick. Die nächste Sitzung entscheidet daher bauen oder begrĂźndet schlieĂen â sie misst nicht neu. Ăbergabe mit den Sitzungszuschnitten:handoff-20260822-naechste-schritte.md.
đ˘ Update 2026-08-23 (Endstand): TP6 ist beantwortet â und der kritische Pfad damit leer. Gebaut wurde, wie entschieden. Der erste Anlauf (
/queue tree parent=vlan100) war wirkungslos, aber nicht aus dem zuerst notierten Grund: nicht der Switch-Chip, sondern die MikroTik-dokumentierte Regel, dass Interface-HTB bei hw-offloadetem out-interface nicht greift. Ueberparent=global+ Mangle-Mark funktioniert CAKE einwandfrei (zaehlt 6 MB, drosselt 9,3 â 7,78 Mbit). Und genau deshalb ist das Ergebnis belastbar: die Latenz unter Last bessert sich trotzdem nicht â bei keiner Bandbreite, auch nicht bei 52 % der Linerate (42,4 / 43,3 / 44,0 / 44,6 ms). Der Puffer sitzt im DOCSIS-Uplink, nicht im Router. â TP6 schliessen: nicht mangels Nutzen, sondern weil das Werkzeug nicht an die Ursache reicht. Details im TP6-Abschnitt oben, Merkregeln inref_queue_htb_platzierung_docsis.
đ´ Korrektur wenige Stunden spaeter (2026-08-23, TP6.1): die DOCSIS-Erklaerung oben ist FALSCH. Der Puffer sitzt nicht unabaenderlich im Uplink â er loest sich auf, sobald der Verkehr in getrennte Klassen faellt: NAS-Bulk
priority=8gegen interaktivpriority=1bringt dieselbe Strecke unter derselben Saettigung von 40,8 auf 11,0 ms (â73 %). Der Fehler steckte in der Messmethode â Last und Messung liefen vom selben Host, ein Shaper kann eine Queue nicht priorisieren, in der nur eine Klasse liegt. â TP6 bleibt geschlossen (CAKE war das falsche Werkzeug), aber nicht aus dem dort notierten Grund. Der Rest steht in TP6.1 (Archiv) und inref_queue_htb_platzierung_docsis.
đ Die folgende Fassung stammt vom 2026-08-18 und ist erledigt â die Praemisse ist am 08-20/21 gemessen, TP6 am 08-23 geschlossen. Bewusst erhalten, weil sie zeigt, warum nicht gebaut, sondern zuerst gemessen wurde:
TP5 ist am 2026-08-18 abgeschlossen. Damit steht rechnerisch nur noch TP6 auf dem kritischen Pfad â
đ aber dessen Prämisse ist offen: eine Messung von 2026-06-16 (docs/call-quality-diagnosis.md)
bescheinigt dem Netz bereits A/A+ und hält CAKE fĂźr âmarginal". Der nächste Schritt ist deshalb ein
Bufferbloat-Test gegen den heutigen Edge, nicht der Bau einer Queue. Fällt er gut aus, ist der
kritische Pfad leer und das Projekt in seinem Kern fertig â dann entscheidet Christoph, was das neue
Ziel ist. Alles andere läuft nebenher und blockiert nichts.
- â
TP5 Etappe 1â4 â komplett durch (2026-08-16 bis 2026-08-18). Details im TP5-Abschnitt oben.
Die Wartezeit-Position, die hier bis 2026-08-17 als eigener Schritt stand, ist eingeloest: statt
eines mehrtaegigen Fensters wurde der Nachtrag aus einem dreieinhalbstuendigen Fenster
abgeleitet und der Drop mit Auto-Revert plus weiterlaufender Log-Regel abgesichert.
Die Vorbedingung D2 (iPhone
.30.201) ist gegenstandslos: das Geraet hing dort bewusst zum Anlernen eines IoT-Geraets (User 2026-08-17). Wer im IOT-SSID sitzt, ist im selben VLAN wie das Geraet und beruehrt dieforward-Kette gar nicht; fuer Ad-hoc-Zugriffe aus MAIN gibt es jetzt die selbstverfallende Gruppejit-admin. - â
TP6 â QoS/CAKE ⸠GESCHLOSSEN 2026-08-23. Gebaut, gemessen, wieder ausgebaut. CAKE ist
auf diesem Geraet baubar (Global-HTB + Mangle) und wirkt technisch â verbessert die Latenz
unter Last aber bei keiner Bandbreite, auch nicht bei 52 % der Linerate. Der Puffer sitzt
im DOCSIS-Uplink, nicht im Router (â ď¸ widerlegt von TP6.1 am selben Tag â s. Korrektur oben).
Queue und Template-Block sind entfernt, die ComplianceRule
queuebleibt und bewacht den Abschnitt als leer. Damit ist der kritische Pfad leer. đĄ Aus dem Abschluss ist TP6.1 entstanden (Saettigung vermeiden statt Bufferbloat bekaempfen) â Christophs Gedanke, den NAS-Sync zurueckzuhalten.Steht als Vorschlag, nicht auf dem Pfad.â Am selben Tag gebaut und gemessen: 40,8 â 11,0 ms.Das eigentliche Projektziel; keine offenen Blocker mehr.Korrigiert 2026-08-19: kein Blocker, aber eine offene Prämisse â der Satz oben und dieser Punkt widersprachen sich seit dem 18. Richtig ist: der nächste Schritt ist eine Messung, kein Bau. Runbook liegt bereit:docs/tp6-praemisse-messrunbook.md. Fällt sie A/A+ aus, wird TP6 geschlossen statt gebaut â dann ist der kritische Pfad leer und das Projekt in seinem Kern fertig.
Eine harte Reihenfolge-Regel dazwischen: TP5 darf die DNS-Bypass-Sperre erst schlieĂen, wenn TP23s
Ausnahme-Oberfläche steht â der bisherige Workaround âClient von Hand auf 1.1.1.1" ist genau dieser
Bypass. Alles andere aus TP5 ist davon unabhängig und kann vorher laufen.
â ď¸ Und eine zweite, aus TP16.1/TP16.3: der Drop braucht cf-mesh explizit â steht seit Etappe 2 als
TP5-E2: mesh->LAN / LAN->mesh drin. Ohne diese zwei Zeilen sperrt Etappe 3 den Fernzugang aus, also genau
den Weg, Ăźber den man den Fehler zurĂźcknehmen wollte.
Follow-ups nebenher (blockieren nichts)
- TP25 â WLAN-Stabilisierung (NEU 2026-08-17): Audit durch, 6 Funde (2,4 GHz fährt 40 MHz statt der
profilierten 20; ap2 sendet auf 5 GHz mit 9 statt 18 dBm, weil ch149 unter ETSI leistungsbegrenzt ist;
80 MHz kostet Randabdeckung; unzulässiger Channel-Override auf
w2-iot; keineaccess-list; 5-Minuten-Takt bei IoT-Trennungen offen). Umsetzung in 6 Schritten, alles via GC. Ăbernimmt den offenen Rest von TP3.3. - TP16.3 â cloudflared-Reduktion (NEU 2026-08-17): Recherche durch. Der Mesh ist schon der private
Datenpfad (im TP5-Log mit 137 Zeilen belegt); Container braucht nur noch der Ăśffentliche Ingress.
Vorschlag:
nautobotals Probe aus dem CF-Ingress nehmen. DoH-Cloudflare aufâ erledigt 2026-08-18 (TP23 Stufe 1 = TP21.1 TODO 1).crs326-coreTP6.1 â Saettigung vermeidenâ LIVE 2026-08-23: 40,8 â 11,0 ms unter Last (â73 %). NAS-Sync weicht bei Last zurueck, ComplianceRuleip-firewall-mangleangelegt, 104/104.- TP24 â DC-USV (seit 2026-08-16 eigener TP, aus TP15 herausgelĂśst).
TP19 â VLAN1-Client-Retirement / cudy-Teardownâ geschlossen 2026-08-18 (VLAN1-ARP = 0). Die zwei Reste sind dorthin verschoben, wo sie hingehĂśren: tote CF-Tunnel â TP16, HA-Portainersetup_retryâ TP11.TP3.3 â WLAN-Coverage-Kurâ in TP25 aufgegangen (2026-08-17). 802.11k/v ist repariert (08-13); Re-Walk + Dead-Spot-Kartierung laufen als Schritt 5 von TP25 â und zwar erst nach den Funkparameter-Fixes, weil vorher gemessene Werte wertlos sind.- TP10 â DDNS-Auto-Updater fĂźr
bf4.emsenhuber.net(auf dem Core mĂśglich,device-modeerlaubt scheduler). - đ Alle Passwort-/Token-Rotationen laufen seit 2026-08-24 unter TP30 â Sammel-TP,
gebĂźndelt gegen Projektende (User-Entscheid). Dort steht die Rotationsliste (MikroTik
admin, IoT-PSK, Shelly-Gerätepasswort, CF-Access-Token), der Radius der fĂźnf Konsumenten, der Etappe-1-Abschluss und die Fallenliste. Etappe 1 ist durch, Etappe 2 wartet bewusst. Doku-Aufräumen (â 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 indocs/doku-cleanup-session.md)teilprojekte-archiv.md, TP25 ist von 394 auf ~100 Zeilen kondensiert, diese Datei ist von 2217 auf ~760 Zeilen. Die Regel dahinter bleibt gĂźltig: â ď¸ während einer Doku-Sessionteilprojekte.mdnicht parallel bearbeiten (in der Nacht auf den 18. viermal committet, das kollidiert sonst) â und ein TP wandert erst dann ins Archiv, wenn nichts mehr daran zu tun ist.
Nachgelagert / research-getrieben
TP8 (Identity/802.1X) ¡ TP11 (Monitoring) ¡ TP12 (IPv6) ¡ TP13 (Botschafts-WLANs) ¡
TP16.2 (Härtung bypass-Dienste) ¡ TP18 (Garage-Objektspeicher) ¡ TP20.1 (Vaultwarden â Platform-PG) ¡
TP23 (DNS-Policy, s. Regel oben) ¡ TP30 (Credential-Rotation â nicht research-, sondern
termin-gated: gebĂźndelt gegen Projektende, User-Entscheid 2026-08-24).
(TP17.1 â Shelly Gen4 â Thread, aktiviert 2026-08-23 â läuft nicht hier, sondern im
HA-Projekt ~/dev/ha-xstate; netzseitig ist nichts zu bauen. Es blockt bewusst die PSK-Rotation.)
(TP16.1 stand hier bis 2026-08-17 fälschlich als offen â es ist seit demselben Tag â
abgeschlossen und
steht unten unter âDurch" (Volltext im Archiv). Nachfolger ist
TP16.3, das oben unter Follow-ups läuft.)
â Durch (Fundament â nicht mehr planen, nur nachschlagen)
đ Alle folgenden TPs stehen seit 2026-08-23 im Archiv â im Volltext, mit Inhaltsverzeichnis. Diese Zeile bleibt als Landkarte: sie sagt, was fertig ist; das Archiv sagt, wie es dazu kam.
TP1 ¡ TP2 ¡ TP2.1 ¡ TP3 (Rebuild 2026-08-08) ¡ TP3.1 ¡ TP4 (Rolle seit 08-08 auf dem Core) ¡ TP7 ¡ TP7.2 ¡ TP10 (Kern) ¡ TP14 (+14.1/14.2/14.2a/14.3/14.5) ¡ TP15 ¡ TP16 (Kern) ¡ TP17 ¡ TP19.1 ¡ TP20 ¡ TP21 ¡ TP21.1 ¡ TP22 ¡ TP-R ¡ TP3.2 (08-17) ¡ TP5 (08-18) ¡ TP7.1 (08-18) ¡ TP19 (08-18) ¡ TP23 Stufe 1 (08-18) ¡ TP6 (08-23, geschlossen statt gebaut) ¡ TP6.1 (08-23, Upload-Prio live) ¡ TP26 (08-17) ¡ TP27 (08-17/18) ¡ TP28 (08-17, GC-Modell 08-18). Verworfen: TP9 (Gateway-HA, User-Entscheid 2026-08-08). Obsolet: Omada-PVID-Fix (User-Entscheid 2026-07-22 â ânie wieder aufgreifen").
đ Historische Fassung dieses Abschnitts (bis 2026-08-14 fortgeschrieben, hier bewusst erhalten)
đŻ AKTUELLER KRITISCHER PFAD (Stand 2026-07-16, Ăźberschreibt die Reihenfolge unten): TP20 (Platform-Postgres) â TP21 (Nautobot) â Ziel: fertig vor CRS326-Produktivsetzung, spätestens Montag 2026-07-20. TP18 (Garage-S3) und die Komodo-Abhängigkeit wurden am selben Tag als Blocker entfernt/entkoppelt (s. TP20), um diese Deadline zu halten â beide werden später nachgezogen, nicht mehr vorher abgewartet. âĄď¸ Stand-Update 2026-08-08: TP20/TP21-Plattform steht, Core-Cutover (TP21.1) + WLAN-Rebuild (TP3) + VLAN20-Migration (TP14) sind durch. Neuer Rest-Pfad: TP22 (Device-Adoption + Compliance-Push) â TP5 (Deny-by-default) â TP6 (CAKE, das Ziel). Kleine Follow-ups davor: DoH-Cloudflare auf core, USV (TP24). âĄď¸ Stand-Update 2026-08-13 (Abschluss): TP22 ist DURCH (alle 5 Schritte; Fleet adoptiert, Deploy-Pipeline scharf, Datenmodell as-built, Secret-Handling entschieden) â kritischer Pfad jetzt: TP5 (Deny-by-default) â TP6 (CAKE). Kleine Follow-ups davor: DoH-Cloudflare auf core, DC-USV (TP24), Doku-Aufräumen (
docs/doku-cleanup-session.md, vorbereitet 2026-08-14 â dieses Dokument beschreibt an mehreren Stellen noch die Topologie vor dem Core-Cutover). âĄď¸ Neu 2026-08-14: TP23 (DNS-Policy & Self-Service) hängt an TP5 â und zwar in beide Richtungen: TP23 braucht TP5s Firewall, TP5 darf aber die DNS-Bypass-Sperre erst schlieĂen, wenn TP23s Ausnahme-Oberfläche steht (der bisherige Workaround âClient auf 1.1.1.1" ist dieser Bypass). Ebenfalls in TP5 gezogen: TP7.1 (SSDP-Reflector fĂźr die macOS-Sonos-App).Kabelentfällt (2026-08-14): gelĂśst wurde am Port, nicht am Kabel (User-Vorgabe âPatchfeld-Nummerierung wird nicht wegen einer Config geändert") âcore ether4âether2(Sideboard/TV)ether4steht seit 08-13 auf untagged VLAN40, End-to-End-Beweis am 08-14 erbracht, s. TP21.1 Punkt 4. Historisch: TP22 war das nächste Arbeitspaket â TP17 (Shelly-Migration) ist parallel dazu vollständig abgeschlossen (alle Shellys auf VLAN30, User-bestätigt). Grund fĂźr den Nautobot-First-Ansatz: Governance-Entscheid âConfig exklusiv Ăźber Nautobot" (s. oben) macht Nautobot zur Voraussetzung fĂźr praktisch jede weitere Router-/Switch-Ănderung. Die Punkte 3-4 unten (Omada-PVID-Fix etc.) sind obsolet (User-Entscheid 2026-07-22 â Omada spielt seit TP15-Korrektur keine Rolle mehr, nie wieder aufgreifen) â ganze Liste braucht mal eine Aufräum-Session, hier nur der aktuelle Fokus vorangestellt. â TP16 (CF-Tunnel Round-Robin/macvlan-Host-Isolation â reziprokes 3-Tunnel-HA) KERN UMGESETZT 2026-07-10 (#1033 strukturell weg). Offen nur Access-Strang (WARP/vw) = user-gated. As-Builtdocs/cf-tunnel-mapping.md §10.
TP1 (GE8) â TP2 (Omada Controller).â erledigt 2026-06-15.TP4 (Router-Cutover L3-Infra + WAN-Edge).â erledigt 2026-06-15 (L3) + 2026-07-01 (Edge-Cutover, FB physisch weg).- Jetzt: Omada-PVID-Fix â Omada Access-Profile korrigieren (PVID 10/20, untagNetworkIds bereinigen, sicher P3/P5/P6 zuerst), dann IP-Migration NAS/macmini/pve auf VLAN-Subnetze + DNS-Einträge updaten. IP-Migration NAS/pve = TP14 (NAS â 2026-07-10, pve đ Session B).
- Dann: TP5 (Deny-by-default fertigziehen â Sonos-/HA-/mDNS-Holes + WAN-Input-Seal stehen bereits; TP5.1 = DNS-Redirect + Live-Torch fĂźr Low-Trust-Geräte/Airfryer hängt dran) â TP6 (QoS/CAKE).
TP7 (mDNS)â 2026-07-02 (inkl. HA/vlan20),TP3 (WLAN/CAPsMAN)â 2026-06-18,TP3.1 (ap2-VLAN-Trunk)â 2026-07-01,TP3.2 (P750W/Discovery)â 2026-07-02,Sonos-Migrationâ 2026-07-02 (alle 10 auf VLAN 40). âł TP3.3 (WLAN-Coverage-Kur) offen â Fortsetzung neue Session (docs/wifi-p750w-coverage-and-map.md). TP10 (VPN)â Kern durch (2026-06-27) + Edge-Cutover (2026-07-01) â DURCH. Offen nur: DDNS-Auto-Updater.- Nachgelagert/Research-getrieben: TP8 (Access), TP9 (HA), TP11 (Monitoring + CF-Tunnel-Track-B/C), TP12 (IPv6), TP13 (SpaĂ).
- Foundation (2026-07-14): TP15 (MikroTik-Switching / Omada-WLAN, 2Ă CRS326 bestellt) ⼠TP20 (Platform-Postgres, single-site replication-ready) â TP21 (Nautobot Golden Config) ⼠TP20.1 (VaultwardenâPG + 2-Site-HA). TP20 hängt an TP18 â (Garage-Bucket fĂźr pgBackRest).