RFC-004: VLAN-Segmentierung des Heimnetzes¶
| Feld | Wert |
|---|---|
| Status | draft |
| Datum | 2026-03-23 |
| Betrifft | homeserver, homelab-external, claude-pi, homelab-documentation |
| Tracking-Issues | noch keine |
| Verwandt | RFC-002 (VPN-Redesign), RFC-003 (Authelia/LDAP) |
Problem¶
Das gesamte Heimnetz laeuft in einem einzigen flachen Subnetz (10.10.10.0/24).
Alle Geraete — Server, IoT, persoenliche Geraete, Gaeste — befinden sich im selben
Broadcast-Domaene und koennen uneingeschraenkt miteinander kommunizieren.
Konkrete Probleme:
- Keine Isolation: Ein kompromittiertes IoT-Geraet kann auf den NUC, das NAS und alle anderen Geraete zugreifen
- Kein Gaeste-Netz: Gaeste haben vollen Zugriff auf das lokale Netz
- Kein VPN-Tracking: VPN-Traffic kommt im selben Subnetz an wie lokaler Traffic, nicht separat messbar
- mDNS-Broadcast-Flut: Alle mDNS-Announcements erreichen alle Geraete
- Kein Least Privilege: Jedes Geraet kann jedes andere auf jedem Port erreichen
- VPN-ACLs unvollstaendig: RFC-002 definiert ACLs pro Subnetz, aber es gibt nur ein Subnetz — keine granulare Steuerung moeglich
Vorschlag¶
Segmentierung des Heimnetzes in 9 VLANs ueber die bestehende UniFi-Infrastruktur.
VLAN-IDs entsprechen dem 3. Oktett der Subnetze fuer einfache Zuordnung.
Migration als Big-Bang-Umstellung an einem Wochenende, mit dem bestehenden
10.10.10.0/24 als Legacy-VLAN fuer noch nicht migrierte Geraete.
Explizit nicht in Scope¶
- Firewall-Regeln im Detail — Dieser RFC definiert die VLAN-Struktur und Kommunikationsmatrix. Konkrete UDM-Pro-Firewall-Regeln werden bei der Implementierung ausgearbeitet.
- Tailscale-ACL-Details — Die VPN-ACL-Anpassungen sind in RFC-002 beschrieben. Dieser RFC stellt sicher, dass das VLAN-Design mit dem VPN kompatibel ist.
Ist-Zustand¶
Netzwerk¶
| Parameter | Wert |
|---|---|
| Subnetz | 10.10.10.0/24 (einziges) |
| Gateway | UDM Pro |
| VLANs | Keine (ausser Draytek VLAN 99) |
| DNS | Pi-hole (10.10.10.3) |
| DHCP | UDM Pro |
| WLAN-SSIDs | Speednet, Speednet IoT, Gaeste (hidden) |
Hardware¶
| Geraet | Modell | Funktion |
|---|---|---|
| Gateway | UDM Pro | Router, Firewall, DHCP, VLAN-Routing |
| Switch 1 | USW-24-PoE | Haupt-Switch (Server, APs) |
| Switch 2 | USW Flex | Nebenstandort |
| Switch 3 | USW Lite 8 PoE | Nebenstandort |
| AP 1 + AP 2 | 2x U6-LR | WLAN (alle SSIDs) |
| NAS | UNAS Pro | Netzwerk-Speicher |
Aktuelle Geraete im Netz¶
| Geraet | IP (aktuell) | Ziel-VLAN |
|---|---|---|
| NUC (Homeserver) | 10.10.10.3 | Server (20) |
| UNAS Pro (NAS) | 10.10.10.150 | Server (20) |
| Claude-Pi | 10.10.10.2 | Server (20) |
| Exit-Node-Server (neu) | — | VPN (70) |
| UDM Pro | 10.10.10.1 | Management (100) |
| Switches, APs | DHCP | Management (100) |
| Laptops, Phones | DHCP | Trusted Clients (30) |
| ESPHome, Zigbee | DHCP/statisch | IoT Trusted (40) |
| Cloud-IoT-Geraete | DHCP | IoT Untrusted (50) |
| Draytek | 10.10.99.1 | Draytek WAN (99) |
Soll-Zustand¶
VLAN-Struktur¶
| VLAN | ID | Subnetz | Gateway | DHCP | Zweck |
|---|---|---|---|---|---|
| Legacy | 1 | 10.10.10.0/24 | 10.10.10.1 | Ja | Nicht-migrierte Geraete |
| Server | 20 | 10.10.20.0/24 | 10.10.20.1 | Ja¹ | NUC, NAS, Claude-Pi |
| Trusted Clients | 30 | 10.10.30.0/24 | 10.10.30.1 | Ja | Laptops, Phones, Tablets |
| IoT Trusted | 40 | 10.10.40.0/24 | 10.10.40.1 | Ja | ESPHome, Zigbee/Z2M |
| IoT Untrusted | 50 | 10.10.50.0/24 | 10.10.50.1 | Ja | Cloud-IoT |
| Gaeste | 60 | 10.10.60.0/24 | 10.10.60.1 | Ja | Gaeste-WLAN |
| VPN | 70 | 10.10.70.0/24 | 10.10.70.1 | Ja¹ | Tailscale Router + Exit Node |
| Draytek WAN | 99 | 10.10.99.0/24 | 10.10.99.1 | Nein | Draytek Modem/Bridge |
| Management | 100 | 10.10.100.0/24 | 10.10.100.1 | Ja | UDM Pro, Switches, APs |
¹ Server und VPN-VLANs nutzen primaer statische IPs, DHCP als Fallback.
Design-Entscheidung: VLAN-ID = 3. Oktett. Einfache mentale Zuordnung: VLAN 20 = 10.10.20.0/24. Ausnahme: Legacy (VLAN 1 = 10.10.10.0/24, historisch).
WLAN-SSIDs¶
| SSID | VLAN | Sicherheit | Sichtbar |
|---|---|---|---|
| Speednet | Trusted Clients (30) | WPA3 | Ja |
| Speednet IoT | IoT Trusted (40) | WPA2 (Kompatibilitaet) | Ja |
| Speednet Untrust | IoT Untrusted (50) | WPA2 | Ja |
| Gaeste | Gaeste (60) | WPA2, Client-Isolation | Nein (QR-Code) |
Server (20), VPN (70), Draytek (99) und Management (100) haben kein WLAN — ausschliesslich kabelgebunden.
Switch-Port-Zuordnung¶
| Switch | Trunk-Ports | Access-Ports |
|---|---|---|
| USW-24-PoE | Uplink zu UDM Pro (alle VLANs), NUC (Server + IoT Trusted) | Server-Geraete (VLAN 20), APs (alle VLANs via Trunk) |
| USW Flex | Uplink (Trunk) | Nach Bedarf |
| USW Lite 8 PoE | Uplink (Trunk) | Nach Bedarf |
NUC als Trunk-Port: Der NUC bekommt einen Trunk-Port mit VLAN 20 (Server,
Native/untagged) und VLAN 40 (IoT Trusted, tagged). Auf dem NUC wird ein
VLAN-Sub-Interface (eth0.40) fuer das IoT-VLAN eingerichtet. Home Assistant
(network_mode: host) sieht beide Interfaces und kann direkt mit IoT-Geraeten
kommunizieren (mDNS auf eth0.40, Bluetooth ueber USB-Dongle/VLAN-unabhaengig).
Ohne Trunk waere ein mDNS-Relay (Avahi) noetig — der Trunk ist die einfachere Loesung.
Docker und VLAN-Interfaces
Container mit network_mode: host (Home Assistant, ESPHome, Tailscale, Cloudflared)
sehen alle Netzwerk-Interfaces des Hosts, einschliesslich VLAN-Sub-Interfaces.
Container in Docker-Bridge-Netzwerken sind davon nicht betroffen — sie kommunizieren
nur ueber ihre zugewiesenen Bridge-Netzwerke.
Casting/mDNS zwischen Trusted Clients und IoT: Chromecast, AirPlay und aehnliche Casting-Protokolle benoetigen mDNS-Discovery in beide Richtungen. Da der NUC-Trunk nur VLAN 20+40 verbindet, brauchen Casting-Geraete in VLAN 40 einen mDNS-Reflector (Avahi) auf dem UDM Pro, um mDNS zwischen VLAN 30 (Trusted Clients) und VLAN 40 (IoT Trusted) zu bridgen. Alternativ bleiben Casting-Geraete (Smart-TVs, Chromecast) im Trusted-Clients-VLAN (30).
Rollenabgrenzung NUC vs. Exit-Node-Server:
- NUC (Server-VLAN 20, Trunk zu IoT 40): Bleibt Subnet Router fuer die lokalen VLANs (RFC-002, Redundanz). Der NUC-Tailscale-Client advertisiert die erreichbaren Subnetze. Da er Trunk-Zugang zu VLAN 20+40 hat, kann er diese Netze routen.
- Exit-Node-Server (VPN-VLAN 70, Trunk zu 20+30+40): Primaerer Subnet Router + Exit Node. Sitzt im VPN-VLAN mit Trunk-Zugang zu allen VLANs die ueber VPN erreichbar sein sollen. Die Headscale-ACLs (RFC-002) steuern, wer wohin darf.
Inter-VLAN-Firewall (Kommunikationsmatrix)¶
Grundprinzip: Default Deny — nur explizit erlaubte Verbindungen.
| Quelle | Ziel | Erlaubt | Zweck |
|---|---|---|---|
| Server (20) | Alle | Ja | DNS, NTP, Updates, Monitoring |
| Management (100) | Alle | Ja | Netzwerk-Management |
| Trusted Clients (30) | Server (20) | Ja | Web-UIs, SSH, Services |
| Trusted Clients (30) | IoT Trusted (40) | Ja | Smart-Home-Steuerung, Casting |
| Trusted Clients (30) | Management (100) | Ja (nur UI-Ports) | UniFi-Controller-UI (443) |
| Trusted Clients (30) | Internet | Ja | Normaler Internetzugang |
| IoT Trusted (40) | Server (20) | Ja (Ports einschraenken) | HA, MQTT, Z2M |
| IoT Trusted (40) | Internet | Eingeschraenkt | Firmware-Updates, NTP |
| IoT Untrusted (50) | Internet | Ja | Cloud-Dienste |
| IoT Untrusted (50) | Lokal | Nein | Kein lokaler Zugriff |
| Gaeste (60) | Internet | Ja | Nur Internet |
| Gaeste (60) | Lokal | Nein | Kein lokaler Zugriff |
| VPN (70) | Per ACL | Per Headscale-ACL | RFC-002 steuert Zugriff |
| Legacy (1) | Server (20) | Ja | Uebergangsphase |
| Legacy (1) | Internet | Ja | Uebergangsphase |
IoT Trusted → Server (Ports): Nur die Ports die IoT-Geraete brauchen:
- MQTT: 1883 (Mosquitto)
- HTTP: 8123 (Home Assistant), 8080 (Z2M)
- mDNS: 5353 (via Trunk, nicht ueber Firewall)
IoT Untrusted und Gaeste: Komplett isoliert. Kein Zugriff auf lokale Netze, kein Inter-Client-Traffic. Nur DNS (UDM Pro) und Internet.
DNS-Konfiguration¶
Pi-hole (aktuell 10.10.10.3) zieht ins Server-VLAN (10.10.20.x). Alle VLANs muessen Pi-hole als DNS-Server erreichen koennen:
- Option A (empfohlen): UDM Pro als DNS-Forwarder in jedem VLAN-DHCP. UDM Pro leitet DNS-Anfragen an Pi-hole (10.10.20.x) weiter.
- Option B: Pi-hole direkt als DNS in jedem VLAN-DHCP. Erfordert Firewall-Regeln von jedem VLAN zu Pi-hole auf Port 53.
Option A ist einfacher und erfordert weniger Firewall-Regeln.
Trade-off Option A
UDM Pro cached DNS-Anfragen (dnsmasq). Pi-hole sieht alle Anfragen als von der UDM-Pro-IP kommend — Client-basierte Statistiken gehen verloren. Falls Client-Zuordnung wichtig ist, Option B verwenden (mehr Firewall-Regeln).
VPN-Integration (RFC-002)¶
Headscale-ACL-Anpassungen nach VLAN-Migration:
Die ACLs aus RFC-002 muessen von 10.10.10.0/24 (flaches Netz) auf die neuen
Subnetze aktualisiert werden:
// Vorher (RFC-002):
"autoApprovers": {
"routes": {
"10.10.10.0/24": ["tag:gateway"]
}
}
// Nachher:
"autoApprovers": {
"routes": {
"10.10.20.0/24": ["tag:gateway"], // Server
"10.10.30.0/24": ["tag:gateway"], // Trusted Clients
"10.10.40.0/24": ["tag:gateway"], // IoT Trusted
"10.10.70.0/24": ["tag:gateway"], // VPN
"0.0.0.0/0": ["tag:exit-node"],
"::/0": ["tag:exit-node"]
}
}
Per-VLAN-Zugriff ueber VPN-ACLs:
// Robin: Zugriff auf Server, Trusted Clients und IoT Trusted
{ "src": ["robin"], "dst": ["10.10.20.0/24:*", "10.10.30.0/24:*", "10.10.40.0/24:*"] }
// Thies: Kein Zugriff auf Robins Heim-VLANs (wie in RFC-002)
// Monitoring: Nur Server-VLAN (Health-Checks + DNS)
{ "src": ["tag:hetzner"], "dst": ["10.10.20.0/24:53,80,443"] }
Subnet Router im VPN-VLAN: Der Tailscale-Node im VPN-VLAN (70) benoetigt einen Trunk-Port mit Zugang zu allen VLANs, die ueber VPN erreichbar sein sollen (20, 30, 40). Der UDM Pro routet Traffic zwischen VPN-VLAN und den Ziel-VLANs; die Headscale-ACLs bestimmen, welche Subnetze ein VPN-User erreichen darf.
Authelia-Integration (RFC-003)¶
Die VLAN-Segmentierung hat keinen direkten Einfluss auf Authelia/lldap (beide laufen auf dem Hetzner-Server, nicht im lokalen Netz). Relevant ist:
- Authelia OIDC fuer Homelab-Services (Phase 3c in RFC-003): Grafana und andere Services im Server-VLAN (20) erreichen Authelia ueber den VPN-Tunnel. Der Tailscale-Client auf dem NUC stellt die Verbindung her — unabhaengig vom VLAN-Setup.
- Trusted Clients brauchen Zugang zu Authelia fuer Browser-basierte OIDC-Flows. Da Authelia auf dem Hetzner-Server laeuft (oeffentlich via HTTPS erreichbar), funktioniert das ueber normalen Internetzugang — kein VPN noetig.
Betroffene Repos¶
| Repo | Aenderung |
|---|---|
| homeserver | IP-Adressen aller Services aktualisieren, Tailscale Subnet-Config anpassen, Docker-Networks ggf. anpassen |
| homelab-external | Headscale-ACLs auf neue Subnetze aktualisieren |
| claude-pi | Netzwerk-Config auf neue IP im Server-VLAN (20) anpassen |
| homelab-documentation | Netzwerk-Dokumentation, LikeC4-Modell, IP-Tabellen aktualisieren |
Umsetzungsphasen¶
Vorbereitung (vor dem Migrations-Wochenende)¶
- Geraete-Inventar erstellen: Alle Geraete mit aktueller IP und Ziel-VLAN
- Statische IP-Reservierungen fuer Server-Geraete planen (NUC, NAS, Pi)
- UniFi-VLANs in der UDM-Pro-UI konfigurieren (noch keine Ports zuweisen)
- WLAN-SSIDs den neuen VLANs zuordnen (noch nicht aktivieren)
- Inter-VLAN-Firewall-Regeln vorbereiten (noch nicht aktivieren)
- DNS-Forwarding auf UDM Pro konfigurieren
- Headscale-ACLs fuer neue Subnetze vorbereiten (noch nicht deployen)
- Backup: Aktuelle UDM-Pro-Config exportieren, Docker-Compose-Files sichern
Migration (Wochenende)¶
- Switch-Ports zuweisen: Trunk-Ports fuer NUC und Uplinks, Access-Ports fuer Server-Geraete auf VLAN 20 setzen
- Server migrieren: NUC, NAS, Claude-Pi auf neue IPs im Server-VLAN (20)
- Docker-Services aktualisieren: Pi-hole, Tailscale und alle Services mit hartkodierten IPs auf neue Adressen anpassen
- Pi-hole-DNS testen: Alle VLANs koennen DNS aufloesen
- WLAN umstellen: SSIDs den neuen VLANs zuordnen
- IoT-Geraete migrieren: NUC-Trunk muss VLAN 40 bereits aktiv haben, damit ESPHome-OTA-Updates funktionieren. ESPHome/Zigbee ins IoT-Trusted-VLAN (40), Cloud-IoT ins Untrusted-VLAN (50)
- Gaeste-WLAN aktivieren: VLAN 60, Client-Isolation, QR-Code
- VPN-VLAN einrichten: Exit-Node-Server ins VPN-VLAN (70)
- Firewall-Regeln aktivieren: Inter-VLAN-Firewall scharf schalten
- Headscale-ACLs deployen: Neue Subnetze in ACL-Policy
- Testen: Alle Services erreichbar, IoT funktioniert, VPN funktioniert, Gaeste-Netz isoliert, Monitoring laeuft
Nachbereitung¶
- Legacy-VLAN (10.10.10.0/24) ueberwachen: Sind noch Geraete drin?
- Vergessene Geraete einzeln migrieren
- Dokumentation aktualisieren (Netzwerk-Seite, LikeC4-Modell, Service-Docs)
- Legacy-VLAN entfernen sobald leer
Offene Aktionspunkte¶
- Vollstaendiges Geraete-Inventar mit MAC-Adressen erstellen
- Statische IP-Vergabe fuer Server-VLAN planen
- UDM-Pro-Firewall-Regeln im Detail ausarbeiten
- Pi-hole-DNS-Forwarding testen (UDM Pro als Forwarder)
- ESPHome-Geraete: Neue WLAN-SSID (Speednet IoT) und IP-Range konfigurieren
- Home-Assistant-Integrationen auf neue IP-Adressen pruefen
- Docker-Compose-Files: Hartkodierte IPs identifizieren und anpassen
- Tailscale Subnet-Router-Config auf neue VLANs erweitern
- NUC: VLAN-Sub-Interface (
eth0.40) einrichten und testen - mDNS-Reflector fuer Casting zwischen VLAN 30 und 40 evaluieren (Avahi auf UDM Pro oder Casting-Geraete in VLAN 30 belassen)
- RFC-002 VLAN-Kompatibilitaets-Beispiele nach Annahme dieses RFC aktualisieren
Risiken¶
| Risiko | Mitigation |
|---|---|
| Gesamter Netzwerkausfall bei Fehlkonfiguration | UDM-Pro-Config-Backup vor Migration, Rollback-Plan: alle Ports zurueck auf Default-VLAN |
| Docker-Services mit hartkodierten IPs brechen | Vorab alle Docker-Compose-Files auf hartkodierte IPs pruefen, .env-Dateien anpassen |
| IoT-Geraete verbinden sich nicht mit neuem WLAN | ESPHome-Geraete vorher OTA auf neue SSID/IP umflashen, Zigbee-Geraete sind unabhaengig (Z2M-Stick) |
| mDNS funktioniert nicht ueber VLAN-Grenzen | NUC hat Trunk-Port (Server + IoT), kein mDNS-Relay noetig fuer HA. Falls doch: Avahi-Reflector als Fallback. |
| Pi-hole-DNS nicht erreichbar nach Migration | DNS-Forwarding ueber UDM Pro testen BEVOR Switch-Ports umgestellt werden |
| VPN-Tunnel bricht bei IP-Aenderung | Tailscale-Client auf NUC anpassen, neue Subnetze advertisieren, Headscale-ACLs aktualisieren |
| Gaeste-WLAN zu restriktiv (Captive Portal fehlt) | UDM Pro hat Gaeste-Portal-Funktion, bei Bedarf aktivieren |
Zukunftsaussichten¶
- 802.1X (RADIUS): Port-basierte Netzwerkzugangs-Kontrolle. Geraete authentifizieren sich am Switch und werden automatisch dem richtigen VLAN zugewiesen. Setzt einen RADIUS-Server voraus (z.B. FreeRADIUS oder Authelia mit RADIUS-Plugin).
- Network Access Control: Integration mit Authelia/lldap fuer identitaetsbasierte VLAN-Zuweisung.
- Monitoring pro VLAN: UniFi-Controller exportiert bereits VLAN-basierte Metriken an UnPoller → Prometheus → Grafana. Nach Migration sind Traffic-Muster pro VLAN sichtbar.
- Legacy-VLAN entfernen: Sobald alle Geraete migriert sind, wird VLAN 1 (10.10.10.0/24) deaktiviert.