- TP3.1: Interim-Härtung ap2 wifi1/wifi2 frame-types=admit-only-vlan-tagged (Dual-DHCP-Race 2026-07-06, Provisorium bis VLAN1-Abbau) - Ist-Stand: Migrationsziel „from scratch" + cudy1-VLAN1-Leak als Aufräum-Liste Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
29 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.
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 ap1) |
IP-Blöcke: .1–10 Router/APs (ap1=.1, ap2=.2) · .11–20 Switches (ALLNET=.11, Omada=.12). GW je VLAN = .1. |
Ist-Stand (Kurz)
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: Omada-PVID-Fix (MAIN→PVID10, INFRA→PVID20, untagNetworkIds bereinigen) + IP-Migration Geräte + TP5 Deny-by-default fertigziehen (Sonos-/HA-/mDNS-Holes und WAN-Input-Seal stehen bereits).
🎯 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)st-main rrm/wnm= reines Roaming-Provisorium, prüfen ob nach Migration noch nötig; (c) cudy1 = verbleibender aktiver VLAN1-Leak (Dual-DHCP-Race, Doku Memoryproject_vlan1_dhcp_incident). Bis dahin sind diese Griffe Krücken, kein Zielzustand. ⚠️ 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.
Teilprojekte
TP1 — ALLNET Core-Switch finalisieren ▸ ✅ FERTIG (2026-06-15)
- ✅ GE8 Trunk (native vlan1, tagged 10/20/30/40/50/90/99/100) — war bereits aktiv.
- ✅ VLAN 40 umbenannt: UNTRUSTED → MEDIA (
switch/cli/04-vlan50-media-untrusted.cli). - ✅ VLAN 50 angelegt + benannt: UNTRUSTED.
- ✅ GE1/GE2 (AP-Trunks) um VLAN 50 ergänzt; GE8 auto-includiert (Trunk).
- Ergebnis: Core trägt alle VLANs (10/20/30/40/50/90/99/100) an P1/P2/P8.
TP2 — Omada Access-Switch + Controller ▸ ✅ FERTIG (2026-06-15)
- ✅ Omada Controller 6.2.10.17 auf DS923 (macvlan
.175):omada/docker-compose.yml, Stack via Portainer endpointId=14. Wizard abgeschlossen (configured=true), Creds inmcp/omada/.env. - ✅ pve-mcp (samik081) in Claude Code eingetragen (
~/.claude/settings.json, SSE.173:3000). - ✅ omada-mcp live auf pve-LXC (
.126, endpointId=2), ipvlan-IP.176, Stack Id=200, URL in~/.claude/settings.json.- Transport: StreamableHTTP
http://10.40.41.176:3000/mcp(Health/health→ 200). Settings-Bug (doppelter Eintrag) behoben 2026-06-15. - Auth: Omada Open API Client-Credentials. Creds in
mcp/omada/.env. Token-Format:Authorization: AccessToken=<token>(nicht Bearer). OMADA_TOOL_CATEGORIES=all (alle 84 read-Tools aktiv; write für VLANs/Ports nicht im MCP implementiert → direkte Open API oder Controller-UI). - omadac_id=
adbef8fa…, site_id=6a2fe68e….
- Transport: StreamableHTTP
- ✅ VLANs im Controller: 1/10/20/30/40/50/90/99/100 — alle angelegt, Switch adopted (switchConsistent=true).
- ✅ Port-Plan (ES208G, alle 8 Ports konfiguriert):
Port Name Profil Gerät Status 1 uplink Trunk-ALL → ALLNET GE8 ✅ korrekt 2 ap2 Trunk-ALL hAP ax² #2 ✅ korrekt 3 Port3 Access-MAIN — (frei) ⚠️ PVID=1 4 dock/monitor Access-MAIN Docking-Station ⚠️ PVID=1 · Lifeline-Port, nicht anfassen 5 drucker Access-MAIN Drucker ⚠️ PVID=1 6 Port6 Access-MAIN — (frei) ⚠️ PVID=1 7 macmini Access-INFRA Mac mini ⚠️ PVID=1 · fixe IP 10.40.41.x, nicht anfassen 8 ds923+ Access-MAIN NAS (2. Port) ⚠️ PVID=1 · nicht anfassen - ⚠️ Profile-PVID-Constraint (bis TP4 offen): NAS, Mac mini und andere Geräte haben fixe IPs im
Bereich
10.40.41.x(VLAN-1-Subnetz der FritzBox). Solange diese nicht auf VLAN-10/20-Subnetze migriert sind, mussnativeNetworkId=Default(VLAN 1)in allen Access-Profilen bleiben — sonst kein DHCP, kein Internet für diese Geräte. Fix nach TP4. - ⚠️ Bekannter Fehler
untagNetworkIds(Analyse 2026-06-15 via Controller-API v2): Access-MAIN hatuntagNetworkIds=[VLAN1, VLAN20, VLAN10](3 untagged!) statt[VLAN10]. Access-INFRA hatuntagNetworkIds=[VLAN20, VLAN1]statt[VLAN20]. Geräte erhalten Frames aus mehreren VLANs ungetaggt → Inter-VLAN-Tests verfälscht. Fix erst sinnvoll nach TP4 zusammen mit PVID-Korrektur. - Sichere Testports (kein kritisches Gerät): P3, P5, P6.
- ✅ Portainer-Ablösung: Komodo empfohlen (einzige Option mit nativem MCP
mcp-server-komodo). Eigener Task. - Abh. erfüllt: TP1 (GE8 Trunk ✅).
- → TP4 wird vorgezogen: Alle VLANs im Controller definiert (status=false = kein Management-IP, normal). Traffic läuft noch auf VLAN 1 bis TP4 die L3-Interfaces + DHCP-Server je VLAN aktiviert.
TP3 — WLAN / CAPsMAN ▸ ✅ KERN FERTIG (2026-06-18) — routeros/tp3-capsman.rsc
- ✅ 5 sichtbare SSIDs live, beide APs, beide Bänder, je SSID→VLAN (wifi datapath vlan-id):
dirtyvader-main(10, WPA3-only, FT),-iot(30, nur 2,4 GHz, WPA2+3),-media(40, WPA2+3, FT=no wg. Sonos),-untrusted(50, WPA2+3),-guest(90, WPA2+3). Alt-SSIDsinstall*/BF-Main/wv*entfernt. Temp-PSK (User setzt echte). - ✅ CAPsMAN-Architektur: ap1=Manager+AP (lokale Radios), ap2=CAP (dynamisch via Provisioning,
remote-cap=Ok). Kernlektion: Der Manager kann seine eigenen Radios NICHT über CAPsMAN provisionieren → ap1 lokal zuweisen (Master viaset+ statische Slave-VAPs), ap2 zieht Master+Slaves dynamisch. Ein CAP hält keine Eigen-Config. - ✅ Kanal-Plan (non-DFS, überlappungsfrei): ap1 ch36/5180 + ch1/2412 · ap2 ch149/5745 + ch11/2462.
(Auto-Channel hatte beide APs auf 5500-DFS/2437 gelegt = Co-Channel → fix gepinnt. ap2-Kanaländerung braucht
remote-cap provision-Push.)bound-Problem damit obsolet/sauber gelöst. - ✅ Sonos-Migration abgeschlossen (2026-07-02): alle 10 Sonos auf
dirtyvader-media/VLAN 40 mit MAC-fest reservierten DHCP-Leases indhcp-v40. Household geschlossen, iOS-App findet alle Geräte (mDNS via Repeater). Inventar/IPs = SSoTdocs/sonos-inventar.md(IPs haben sich verschoben — Arc jetzt.199, Arbeitszimmer-Paar auf.191/.192). - Vertagt: hidden
dirtyvader-infra(20)+-mgmt(99) (Mgmt verkabelt). TP8: eine 802.1X-SSID (dirtyvader-secure) mit FreeRADIUS-Dynamic-VLAN → dann PSK-main/infraeinstampfen (Konsolidierung). - SSID-Strategie-Entscheid (Begründung): unterschiedl. WPA-Typ/Band erzwingen separate SSIDs; „alles in 1 SSID per Auth" nur via 802.1X (Geräte ohne EAP wie Sonos/TV/IoT brauchen ohnehin PSK) → Hybrid in TP8.
- Mesh = NEIN (beide APs wired-trunk → Loop-Risiko). DoH-Upstream = Cloudflare Gateway (seit TP4 aktiv).
- Abh. erfüllt: TP4 ✅ (L3/VLAN-Interfaces). Folge: TP8 (802.1X), Sonos-Migration.
TP3.1 — ap2 VLAN-Trunk-Fix ▸ ✅ Config live (2026-07-01) — routeros/tp3.1-ap2-vlan.rsc
- Root Cause: ap2 (CAP, local forwarding) hatte
bridge vlan-filtering=no→datapath.vlan-idwurde nie auf die Leitung geschrieben → ALLE WLAN-Clients auf ap2 (main/media/iot/…) egressten ungetaggt in VLAN1 (defconf/10.40.41.x) statt ins Ziel-VLAN. Symptom: iPhone (VLAN10) im OG „verbunden, aber sporadisch kein WLAN-Symbol" — beim Roaming ap1↔ap2 sprang es VLAN10↔VLAN1 (Subnetz-Flip → Abbruch). Sonos-Terrasse landete auf ap2 fälschlich auf10.40.41.183. TP3 „ein CAP hält keine Config" gilt nur für Manager-Forwarding — hier local forwarding, daher braucht ap2 doch VLAN-Config. - ✅ Fix (wie ap1): ap2-Bridge
vlan-filtering=yes; VLAN1 untagged=bridge,ether2 (Mgmt), VLANs 10/30/40/50/90 tagged auf ether2. Da nur die Master-Radios wifi1(5G)/wifi2(2.4G) Bridge-Ports sind (Slave-VAPs forwarden über den Master), zusätzlich wifi1/wifi2 als tagged-Member je Client-VLAN (wifi1: 10/40/50/90, wifi2: 10/30/40/50/90). CAPsMAN legt diese auf dem CAP nicht automatisch an → manuell gesetzt. Danachremote-cap provision. - Lockout-Risiko gehandhabt: ap2-Mgmt (10.40.41.2) untagged VLAN1 blieb erhalten; kein Scheduler (device-mode=home) → Recovery = Power-Cycle OG. Ausgeführt im leeren-registration-table-Fenster.
- ⏳ Offen — funktionaler OG-Test durch User: Handy auf
dirtyvader-mainim OG → Lease mussdhcp-v10/10.40.10.xsein (nichtdefconf/10.40.41.x). Falls kein DHCP: Omada-Port-2-Trunk (tagged 10/30/40/50/90) prüfen. - Abh.: TP3 ✅, TP4 ✅ (Bridge-VLAN-Muster gespiegelt). Config ap2-lokal (nicht CAPsMAN-verwaltet).
- 🔁 Interim-Härtung 2026-07-06 (Migrations-Provisorium, fliegt mit VLAN1 raus): Symptom „kein DHCP auf
dirtyvader-main, Altnetz ebenso, nichts geändert". Diagnose via MikroMCP (ap1+ap2): Dual-DHCP-Race — dieselben Main-MACs (56:71:6C:22:E6:A9,F2:62:4C:E1:AF:09,C0:C7:DB:DE:71:BE) hielten gleichzeitig eine korrekte VLAN10-Lease (dhcp-v10/10.40.10.x) und eine VLAN1-Lease (defconf/10.40.41.18x);defconfunddhcp-v10boten parallel →offering ... without success+ Minutentakt-Flapping.bridge-ARP auf ap1 = 333 Einträge (flache VLAN1 lebt voll weiter; IoT/Shelly untagged auf10.40.41.2xx). Griff: auf ap2 die Master-Radio-Bridge-Portswifi1/wifi2vonframe-types=admit-allaufadmit-only-vlan-tagged— untagged Main/Slave-Frames werden verworfen statt in VLAN1 gedumpt (im Zielbild ohnehin korrekt, daher kein Rückbau nötig, verschwindet mit VLAN1).ether2bleibtadmit-all(VLAN1-Mgmt/Trunk, kein Lockout). Rollback:frame-types=admit-allauf beiden Ports. ⚠️ Rest-Leak bleibt: cudy1 (altes WLAN) bridged Clients weiter untagged in VLAN1 — nur per Switch-Port-Tag bzw. Alt-WLAN-Abbau (Migration) zu schließen, NICHT auf der MikroTik-Seite. Zusätzlichst-main rrm=yes wnm=yes(802.11k/v, behandelt nur das Roaming-Symptom). SSoT-Detail: Memoryproject_vlan1_dhcp_incident.
TP3.2 — WLAN Coverage / P750W-Discovery ▸ ⏳ teil-erledigt (2026-07-02) — docs/wifi-p750w-coverage-and-map.md
- ✅ Brother P750W (VLAN30) gelöst: DHCP-
client-id-Fix (matcht über MAC → feste10.40.30.5); an ap1 gepinnt (geordnete wifi-access-listaccept w2-iot→ blanketreject, überlebt ap2-Re-Provision) — dozende Legacy-Clients nur am co-located-GW ap1 per ARP erreichbar, CAP ap2 nicht; mDNSvlan30inmdns-repeat-ifaces+5353 → in MAIN auffindbar. Druck+Selbsttest OK. Web-UIhttp://10.40.30.5/general/information.html. - ✅ Nebenbei:
multicast-enhance=enabled(iot+media), Guestft=yes, INFRA-SSID(20) angelegt (nur ap2), Steering-Profilst-main/neighbor-group=bf-mainauf beide Main-Configs. - Nomenklatur: dynamische ap2-CAP-Slaves (
wifi13–22) nicht praktikabel umbenennbar (name-formatunzuverlässig) → Map dokumentiert statt umbenannt. Backupsbf-ap{1,2}-pre-nomen-20260702.backup/.rscauf den Geräten. - ⏳ Offene Coverage-Arbeit → ausgelagert nach TP3.3 (Fortsetzung in neuer Session).
TP3.3 — WLAN Coverage-Kur ▸ 🔜 TODO (Fortsetzung, neue Session) — docs/wifi-p750w-coverage-and-map.md
Problem: Kanten/Terrasse grenzwertig — Clients (iPhone/iPad) landen bei −76..−89 dBm und springen zwischen allen 4 Main-Radios (ap1-5G/2,4G ↔ ap2-5G/2,4G) → „0–1 Striche + häufiger Abriss"; Terrasse auch mittags schlecht. FT kaschierte das bisher als „Roaming" statt „schwache Abdeckung".
Bereits geklärt/erledigt (nicht nochmal aufrollen):
- NICHT config-verursacht (ap1 kein Reboot, RF-Konfig unverändert). TX schon am AT-Max (18/15 dBm, EIRP-Deckel — kein Hebel).
- Kanalplan intern überlappungsfrei (ap1 ch1/ch36, ap2 ch11/ch149). Steering
st-main/neighbor-group=bf-mainauf beiden Main-Configs gesetzt (hilft Client-Entscheidung, macht Signal aber nicht stärker). - ap1-only ist vom Tisch (echte Funklöcher) → beide APs nötig, aber besser platziert.
Offene Arbeit:
- Dead-Spot-Kartierung (Tageslicht): User stellt sich in jeden Problempunkt (Terrasse zuerst, entfernte Räume,
dicke Wand) → je Punkt
registration-table+monitor(Signal je Radio/Band/AP). Zusätzlich Nachbar-WLAN-Scan/interface/wifi/scanje AP (störend — wirft Clients kurz ab) gegen Abend-Congestion. Output → SSoT-Doku. - Remediation nach Befund: Platzierung (ap2 Richtung Schwachseite umstellen / 3. AP / Outdoor-Unit / Kabelweg);
Roaming-Feintuning (802.11v
transition-Schwellen ab 7.21, Band-Overlap reduzieren); Kanalplan aus Scan nachziehen. - INFRA(20) auf ap1 ergänzen (fehlt — sendet nur auf ap2): lokaler
w2-/w5-infra-Slave analog w2-/w5-media. - Danach Re-Walk-Test (wie 2026-07-02, aber mit Kartierung als Baseline).
Sicherheitsnetz: Backups bf-ap{1,2}-pre-nomen-20260702.backup/.rsc auf den Geräten. Kontext-Memory project_wifi_coverage
ref_wifi_powersave_multicast. Abh.: TP3 ✅, TP3.1 ✅, TP3.2 ✅.
TP4 — Router-Cutover (hAP#1 = Router + WAN-Edge) ▸ ✅ FERTIG (2026-07-01)
- ✅ Bridge VLAN-Filtering aktiviert (
vlan-filtering=yes); VLAN-Tabelle: VLAN1 untagged bridge+ether2, VLANs 10/20/30/40/50/90/99/100 tagged bridge+ether2. - ✅ VLAN-Subinterfaces: vlan10/20/30/40/50/90/99 auf bridge; je GW
.1(10.40.10.1 … 10.40.99.1). - ✅ DHCP: dhcp-v10…dhcp-v99 je auf eigenem VLAN-Interface, pools .100-.200, GW+DNS = VLAN-GW.
- ✅ DNS: RouterOS-nativ, allow-remote-requests=yes. Upstream seit 2026-06-16: DoH Cloudflare Gateway (
use-doh-server=https://px35ynlol3.cloudflare-gateway.com/dns-query, verify-doh-cert,servers=1.1.1.1als Bootstrap; FB-Upstream abgelöst). Statische Einträge für alle Infra-Hosts unterbf.lan(13 Einträge, Transition-IPs bis PVID-Fix).- ⚠️ Auto-Suffix
.lan(RouterOS-Einschränkung, kann nicht auf leer gesetzt werden) — TP5-Cleanup.
- ⚠️ Auto-Suffix
- ✅ NAT: srcnat masquerade out-interface=vlan100 (ap1 = Public-Edge; kein Double-NAT mehr). Fallback-Konfig für ether1 bleibt reversibel dokumentiert (
routeros/wan-cutover-runbook.md). - ✅ Routing-Tabelle: 0.0.0.0/0 via Liwest-Gateway auf vlan100; alle 7 VLAN-Subnetze als Connected-Routes aktiv.
- ✅ Edge-Cutover vollzogen (2026-07-01): FritzBox 6660 physisch weg (Liwest hat gegen ein Arris-Kabelmodem im Bridge-Mode getauscht — kein Zurück). WAN =
Arris → sw1 gi16 Access VLAN100 → gi15 Trunk → ap1 ether2 → vlan100 auf bridge(NICHT ether1). ap1 hält Public-IP direkt (Liwest, kein CGNAT). WAN-Input-Seal live (TP10-seal-Regeln: est/inv/dhcp/icmp/lan/wandrop iminput-Chain,list_firewall_rules2026-07-02 verifiziert). Telefonie war auf der FB und wird nicht weitergeführt (User-Bestätigung 2026-07-02). - DNS-Entscheidung (Technitium und externer BIND verworfen): RouterOS-DNS als Resolver, keine DHCP→DNS-Auto-Registrierung (soweit möglich). Infra-Hosts als statische
/ip dns static-Einträge unterbf.lan; dynamische Clients bewusst ohne Namen. Filtering/DNSSEC via DoH-Upstream (TP3). HA: 2. Resolver auf ap2, statische Einträge beidseitig pflegen. - Abh.: TP1 ✅. TP3-Abhängigkeit entfällt (WLAN läuft weiterhin über FB bis TP3).
- Ermöglicht jetzt: PVID-Fix in Omada-Profilen (MAIN→PVID10, INFRA→PVID20), untagNetworkIds-Bereinigung, DHCP-Reservierungen für NAS/macmini/pve auf neue VLAN-Subnetze migrieren.
TP5 — Firewall & Inter-VLAN-Policy ▸ ⏳ TEIL-LIVE (Sonos/HA-Holes + WAN-Seal gebaut, Deny-by-default steht aus)
- Deny-by-default + least-privilege (Ziel). MAIN→INFRA nur Whitelist-Dienste; MAIN↔MEDIA allow (+mDNS); UNTRUSTED/GUEST nur Internet; MGMT isoliert; Router-input gehärtet.
- ✅ Bereits live (verifiziert
list_firewall_rules2026-07-02):forward accept vlan10↔vlan40— TP5: MAIN↔MEDIA (AirPlay/Sonos)forward accept vlan20↔vlan40— TP5: INFRA↔MEDIA (HA↔Sonos)input accept udp/5353 vlan10/vlan20/vlan30/vlan40— mDNS-Repeater (TP7-Anschluss)forward accept vlan90↔vlan40+input accept udp/5353 vlan90— GUEST→MEDIA (Sonos/Cast), permanent (TP7.2, 2026-07-03)- WAN-Input-Seal komplett (TP10-seal-est/inv/dhcp/icmp/lan/wandrop + WG-Hub UDP/51821 accept)
- ⏳ Offen: Deny-by-default am Ende von
forward(aktuell noch permissiv nach fasttrack); UNTRUSTED/GUEST auf Internet-only pinnen; MGMT isolieren; IoT→INFRA-Whitelist bauen. - IoT→INFRA-Rückmeldung (deine Frage): IoT darf aktiv zu INFRA-Diensten initiieren — Firewall-Allow IoT→INFRA NUR auf MQTT (1883/8883), HA-API, InfluxDB (8086) o.ä.; Antworten via established/related; IoT→MAIN bleibt deny. So pusht ein Sensor Daten an HA/MQTT/Influx, ohne dass IoT „frei" ist.
- Abh.: TP4 ✅.
TP6 — QoS/CAKE + Call-Quality-A/B-Test ▸ DAS Ziel
- CAKE am WAN-Upload (~85–95 % Linerate) → Bufferbloat weg. Verifikation waveform.com → A/A+.
- ⚠️ Vor „Erfolg": A/B-Test, denn Kollegen-Befund sagt DE-Calls = internat. Pfad AT↔DE, nicht Heimnetz → ggf. WARP statt/zusätzlich CAKE. Nicht am einen Telefonat festmachen.
- Abh.: TP4.
TP7 — Media-Discovery (mDNS) für VLAN 40 ▸ ✅ FERTIG (2026-07-02) — docs/tp7-mdns.md
- ✅ Built-in mDNS-Repeater aktiv:
/ip/dns set mdns-repeat-ifaces=vlan10,vlan20,vlan40,vlan30,vlan90,bridge(RouterOS 7.23.1;vlan90+bridge=VLAN-1 seit TP7.2 2026-07-03). MAIN/INFRA/IOT/GUEST/VLAN1 ↔ MEDIA. Reversibel (Feld leeren). Realbestand: MAIN=iOS-Client + MacBook, INFRA=Home Assistant, MEDIA=10× Sonos (siehedocs/sonos-inventar.md). - ✅ Funktional durchgetestet (2026-07-02): iOS-Sonos-App (vlan10) und Home Assistant (vlan20) finden die
9 online-Sonos per
_sonos._tcp.local.(Bonjour) automatisch. Household nicht mehr gesplittet. - ✅ TP5-Anschluss live:
forward accept vlan10↔vlan40+forward accept vlan20↔vlan40+input accept udp/5353auf vlan10/20/30/40 sind gebaut (mit „TP5:"-Kommentar), damit Discovery + Steuerung + Streaming ohne Umwege gehen. - ⚠️ SSDP/Cast (UDP 1900) bewusst NICHT gebaut (bräuchte Reflector-Container auf NAS/pve; hAP hat kein USB/Flash). Konsequenz: macOS-Desktop-Sonos-App nutzt SSDP → quert die VLAN-Grenze NICHT und findet die Sonos nicht. iOS-App (mDNS) und HA-Integration decken den Nutzungsbedarf ab; Spotify Connect läuft über Cloud.
- Abh.: TP4 ✅, TP5 (Sonos-Holes) ✅ live.
TP7.1 — SSDP-Reflector (macOS-Sonos-App über VLAN-Grenze) ▸ vorgemerkt
- Bedarf: macOS-Desktop-Sonos-App auf VLAN 10 findet die Sonos in VLAN 40 nicht (Discovery per SSDP UDP 1900, RouterOS reflektiert kein SSDP). iOS-App + HA decken den Alltag ab, aber User will die Desktop-App nutzen.
- Lösung: kleiner SSDP-Reflector-Container mit Bein je Ziel-VLAN. Auf NAS oder pve (nicht am hAP, 128 MB
Flash + kein USB). Kandidaten:
bkupreck/ssdp-repeater,scyto/multicast-relay, oder eigenes Python-Skript. - Scope: vlan10 ↔ vlan40 (MacBook → Sonos). Optional vlan20 ↔ vlan40 falls HA je SSDP-Discovery brauchen sollte (aktuell nicht — HA nutzt zeroconf/mDNS).
- Anschluss TP5:
input accept udp/1900auf den bedienten VLANs (falls Router-lokal reflektiert wird) bzw. Container-Port-Freigaben je Bein. - Alternative (verworfen): macOS-Client temporär in VLAN 40 hängen (unpraktikabel für Alltagsnutzung).
- Abh.: TP7 ✅. Kein Blocker für TP5-Deny-by-default.
TP7.2 — HA↔Sonos static-host binding + VLAN1/GUEST-Discovery ▸ ✅ FERTIG (2026-07-03) — docs/sonos-inventar.md
- Root Cause (widerlegt frühere Doku): HA-
media_player.*-Sonos alleunavailable. HA sitzt nicht auf VLAN 20, sondern noch auf10.40.41.105(VLAN-1-Transfernetz, IP-Migration steht aus). Der mDNS-Repeater deckte VLAN 1 nicht ab, und die HA-Sonos-Integration ist SSDP-abhängig (manifest dependencies:[ssdp], soco 0.31.1) → quert die VLAN-Grenze nicht. Die alten „HA nutzt mDNS/zeroconf, fixed 2026-07-02"-Notizen waren falsch. - ✅ HA-Fix (discovery-unabhängig):
sonos: media_player: hosts:mit allen 11 Sonos-IPs +advertise_addr: 10.40.41.105inconfiguration.yaml(Backup.bak-sonos-20260703).advertise_addrfixt die UPnP-Event-Callbacks trotz HA-Multi-Homing (.105/172.16.0.18/docker). Core-Restart → alle 6 Online-Zonenidle/playing(Wohnzimmer-Push verifiziert = Callbacks OK). Terrasse.198offline = kein Entity (kommt beim Einschalten). Kurzes Flapping direkt nach Restart = Settling, danach stabil. - ✅ Nebeneffekt: mit
bridgeim Repeater (s.u.) meldet HA jetzt „Automatic discovery is working, hosts not needed" — die statischen Hosts sind also Redundanz (Gürtel+Hosenträger), bleiben aber als Absicherung. - ✅ VLAN 1 (temp) + GUEST (perm) Discovery/Reach (User-Wunsch 2026-07-03):
- mDNS-Repeater erweitert →
mdns-repeat-ifaces=vlan10,vlan20,vlan40,vlan30,vlan90,bridge(VLAN-1-untagged=bridge). - Firewall:
input accept udp/5353 vlan90+forward accept vlan90↔vlan40(ganzes MEDIA, beide Richtungen; User-Wahl). VLAN 1/bridgebrauchte nichts (schon viaTP10-seal-lan+ permissiver Forward). - Bewusst in Kauf: flacher Repeater → Guests sehen auch MAIN/INFRA/IOT-mDNS-Announcements (Discovery-Leak; echte Verbindungen regelt TP5-Deny-by-default).
- mDNS-Repeater erweitert →
- Offen/später: HA→VLAN 20 (IP-Migration nach Omada-PVID-Fix) → dann nur
advertise_addrauf neue IP; macOS-Desktop-App weiter via SSDP-Reflector TP7.1. Abh.: TP7 ✅, TP5-Holes ✅.
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.)
TP9 — Gateway-/Router-HA ▸ research-gated
- „Was, wenn ap1 ausfällt?" → VRRP löst Gateway-Failover je VLAN ~gratis (kreuzweise Master/Backup). ⚠️ Haken (nicht Last): DHCP/Firewall/NAT/DNS müssen auf BEIDEN APs identisch gepflegt sein, sonst „Gateway up, Internet tot". Empfehlung: VRRP nur für MAIN/INFRA, sonst ap2 als Kalt-Ersatz + Backup. DHCP/DNS schon redundant (Split + 2 Resolver).
- Abh.: TP4. (Research erledigt, s. TP-R + Config-Skizze im Report.)
TP10 — Multi-Site VPN ▸ ✅ KERN DURCH (2026-06-27) — beide WG live auf ap1-Hub (docs/tp10-vpn-migration.md)
Details/Cutover/Gotchas/Eckdaten →
docs/tp10-vpn-migration.md(Single Source of Truth). Research:docs/research/vpn-comparison.md.
- ✅ KERN DURCH (2026-06-27) + EDGE-CUTOVER (2026-07-01): beide AVM-Tunnel → 2× WireGuard mit Hub auf ap1 migriert. Live:
peer fm(10.101.0.0/24, bidirektional, myfritz-Endpoint) undpeer dw(10.95.10.0/24, CGNAT-Dial-in) mit frischem Handshake + Traffic. Public-Edge direkt — ap1 hört UDP/51821 aufvlan100(Edge-Cutover 2026-07-01), keine FB-Portfreigabe mehr, kein Double-NAT. FM-IPsec gekillt, Gelis alter FB↔FB-WG sauber geswappt. - ✅ DW/Geli on-site verifiziert (2026-06-27): Geli auf
10.95.10.0/24renumbert, FB-WG single10.95.10.1/24, Keepalive 25, Endpointbf4…:51821. End-to-End von macmini/Linz → Gelis 24/7-APs10.95.10.246/.247sauber (echte LAN-IPs, kein10.255.255.x-NAT-Leak). - 💡 Root Cause (FM-PoC bewiesen): FB masqueradet WG, wenn die Interface-
Addresseine Transfernetz-IP ist → muss die FB-LAN-IP sein (AVM Proxy-ARP). War der Schlüssel zum sauberen LAN-LAN. - Hub:
wg-hub(UDP 51821, KeyP/bzt…, MTU 1412, keine IF-IP). Endpoint = DDNSbf4.emsenhuber.net:51821(Cloudflare, DNS-only → Public-IP). Apply gebündelt inrouteros/tp10-cutover-apply.rsc. - ✅ Permanenter Edge-Cutover durch (2026-07-01) — Details in TP4 (WAN via sw1 vlan100, ap1 = Public-Edge, WAN-Input-Seal live). BF-FB-eigenen WG-Server 51820 entfällt (FB physisch weg).
- Offen: DDNS-Auto-Updater für
bf4.emsenhuber.netauf NAS/pve, damit der A-Record der Public-IP folgt (falls Liwest sie tauscht). Aktuell manuell in Cloudflare gepflegt.
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 (HA-Connector-Pair pve+NAS in VLAN 20, Origins-Repoints) wartet auf CF-MCP-Write-Reauth und wird mit der IP-Migration (nach Omada-PVID-Fix) gebündelt.
TP12 — IPv6 (intern + extern, 3 Standorte) ▸ research-gated
- Konzept für FM/BF/DW. → TP-R.
TP13 — „Botschafts-WLANs" ▸ fun, low-prio
- Nutzlose SSIDs mit Botschaft („Kanal 500 bitte nicht nutzen"), offenes WLAN mit Captive-Portal das auf statische Info-HTML zeigt (Nachbarschafts-WLAN-Tuning, Auto-Kanalwechsel). Idee: wer's sieht, kann auch stören → Infoseite = beste Adresse. ⚠️ Recht prüfen (Impressum/TMG, Störerhaftung bei offenem WLAN — User privat). RouterOS-Hotspot/Captive-Portal kann das.
TP-R — Router-Capabilities-Sweep ▸ FERTIG (docs/research/routeros-capabilities.md)
- Leitsatz: nativ vor Container, NAS vor Router (128MB-Flash-Limit).
- Sofort nativ (~0 RAM): RoMON · Netwatch · Scheduler + Auto-Backup/Mail · SNMP→externes Monitoring · mDNS-Repeater · spectral-scan · CAPsMAN + 802.11r/k/v (Fast-Roaming statt Mesh) · Back-to-Home/WireGuard.
- Auf NAS: FreeRADIUS(+LDAP) · NPM · icinga/Grafana · CF-Tunnel.
- Weglassen: LoRa (keine HW) · OpenFlow · CALEA · ZeroTier (CPU-Fresser bis ~60 % → WireGuard) · lokales
dude. - ✏️ Korrektur Reverse-Proxy: RouterOS 7.22+ HAT einen nativen (
/ip/reverse-proxy, ACME/SNI) — aber ersetzt NPM NICHT (kein WebSocket/gRPC/Sticky, nur IPv4-Backends, TLS frisst Router-CPU) → NPM bleibt auf NAS. - Speist TP8/9/11/12.
Reihenfolge / Abhängigkeiten
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.
- Dann: TP5 (Deny-by-default fertigziehen — Sonos-/HA-/mDNS-Holes + WAN-Input-Seal stehen bereits) → 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ß).