Netzwerk & VPN¶
Netzwerktopologie¶
Alle Geraete im Heimnetzwerk sind ueber ein UniFi-Netzwerk (UDM Pro) verbunden. Der Hetzner vServer ist ueber einen Tailscale VPN-Tunnel angebunden.
Adressen im LAN (10.10.10.0/24)¶
| Geraet | Adresse | Rolle |
|---|---|---|
| UDM Pro | 10.10.10.1 |
Gateway/Router, Port-Forwards (siehe Erreichbarkeit von aussen) |
| Homeserver (Intel NUC) | 10.10.10.3 |
Produktiver Docker-Host |
| Dev-Workstation (Laptop) | 10.10.10.6 |
Entwicklungsmaschine |
| AI-Server | 10.10.10.7 |
KI-Inferenz, nicht extern erreichbar |
| UNAS Pro | 10.10.10.150 |
NAS, NFS v3, RAID 6 |
Erreichbarkeit von aussen¶
Vom Internet aus ist derzeit kein Dienst des NUC per Hostname erreichbar. Alle
Traefik-Router lauten *.home.robinwerner.net; ein externer Aufruf trifft also auf
keinen passenden Host-Header. Fernzugriff laeuft ueber Tailscale.
Oeffentlich auf die Heim-IP zeigen genau zwei Records, gepflegt von
Cloudflare DDNS und bewusst
unproxied: ddns.robinwerner.net und udm.robinwerner.net. An ddns.robinwerner.net
haengt der TeamSpeak-Zugang fuer Freunde — der braucht auf der UDM Forwards fuer
9987/udp (Voice) und 30033 (Dateitransfer). 10011 ist ServerQuery, die
Admin-Schnittstelle: die gehoert nicht nach aussen.
Der Cloudflare Tunnel wurde am 06.09.2026 stillgelegt
(homeserver#195). Er hatte
ha.robinwerner.net und vs.robinwerner.net bedient und in sieben Wochen null Anfragen
gesehen. Er kommt auch nicht zurueck: sein 100-MB-Upload-Limit schneidet zum Beispiel
Immich-Videos ab.
Offener Punkt: Port-Forward 443 auf der UDM
Die UDM leitet laut bisheriger Dokumentation 443 auf den Traefik des NUC weiter.
Da kein Router einen externen Hostname traegt, bedient dieser Forward nichts — er
ist offene Angriffsflaeche ohne Funktion und soll deaktiviert werden.
Noch nicht verifiziert, ob er ueberhaupt aktiv ist: die UDM-Konfiguration ist
von hier nicht lesbar, und ein Test aus dem LAN heraus ist wegen Hairpin-NAT
wertlos. Gegenprobe von aussen (Mobilfunk oder vServer):
curl -skI --max-time 8 https://<Heim-IP>/. Bis E10 wird oeffentliche Exposition
bewusst nicht neu aufgebaut.
VPN (Headscale + Tailscale)¶
- Headscale laeuft auf dem Hetzner vServer als selbst-gehosteter Tailscale Coordination Server
- Tailscale Clients auf NUC, Dev-Workstation und mobilen Geraeten
- ACL-Regeln beschraenken den Zugriff:
tag:server(Hetzner) darf nur Monitoring-Ports im Heimnetz erreichen
DNS¶
- Pi-hole + Unbound auf dem NUC (10.10.10.3) als lokaler DNS-Resolver mit Adblocker
- Cloudflare fuer externe DNS-Verwaltung (API-gesteuert)
- Magic DNS im VPN-Netzwerk via Headscale
Siehe: Pi-hole
Unbound steht dauerhaft auf unhealthy — die Aufloesung funktioniert trotzdem
Der Healthcheck des Images ruft drill-hc auf, das im Container nicht
existiert (executable file not found in $PATH). Der Zaehler stand am
18.08.2026 bei ueber 103.000 Fehlschlaegen. Eine Abfrage ueber Pi-hole an
Unbound liefert korrekte Antworten — es ist ausschliesslich der Healthcheck
defekt. Da Unbound nicht an Traefik haengt, hat der Status keine
Betriebsfolge; er verdeckt aber einen echten Ausfall, sollte es je einen
geben.
Homeserver — Docker-Netzwerke¶
Dieser Abschnitt beschreibt die internen Docker-Netzwerke des Homeservers.
Proxy Network¶
Alle web-zugaenglichen Services teilen sich das externe proxy_network (10.100.0.0/16).
Traefik routet den Traffic anhand von Host-Regeln und terminiert TLS mit Let's Encrypt
(DNS-Challenge via Cloudflare).
Interne Netzwerke¶
Services die Datenbanken oder interne Kommunikation brauchen, nutzen eigene isolierte Netzwerke:
| Netzwerk | Services | Zweck |
|---|---|---|
proxy_network |
Traefik + alle web-zugaenglichen Services | Reverse-Proxy-Routing |
monitoring |
Prometheus, VictoriaMetrics/Logs, Grafana, Alloy, Alertmanager, ntfy-alertmanager, Exporter | Metrics/Logs-Kommunikation |
paperlessngx_internal |
Paperless, Postgres, Redis, Gotenberg, Tika | DB/Cache-Isolation |
ollama_internal |
Ollama IPEX, Ollama Vision, Qdrant, Docling, Open WebUI, Prometheus | LLM-Stack und RAG |
immich_internal |
Immich Server, Postgres, Valkey, Machine Learning | DB/Cache/ML-Isolation |
voice_internal |
wyoming-parakeet, wyoming-piper | Sprachpfad |
dns_network |
Pi-hole, Unbound | DNS-Aufloesung |
influxdbnet |
InfluxDB, Telegraf, Grafana | Zeitreihen-Daten |
teamspeaknet |
TeamSpeak, MariaDB | TS3-Isolation |
speedtesttracker_internal |
Speedtest-Tracker, Postgres | Speedtest-DB |
pkvapp_internal |
PKV-App Frontend/Backend, Postgres | App-Isolation |
bonus-tracker_internal |
Bonus-Tracker Frontend/Backend | App-Isolation |
homeassistant_default |
HA-MCP | MCP-Zugriff auf die HA-API |
nut_default |
NUT upsd | USV-Daemon |
Mehrfach-Mitgliedschaften
Einige Container haengen in zwei Netzen: Traefik-erreichbare Dienste
zusaetzlich in proxy_network (Paperless, Immich, Open WebUI,
Speedtest-Tracker, Grafana, Prometheus, Alertmanager), Prometheus zudem in
ollama_internal, um dort scrapen zu koennen. Das Diagramm zeigt jeden
Dienst nur einmal — in seinem fachlichen Heimatnetz.
Der AI-Server hat sein eigenes Docker-Netz ai
(llama-swap, Sprachpfad, Open WebUI, node-exporter) und ein noch leeres
proxy-Netz fuer die spaetere Traefik-Anbindung.
Host-Netzwerk¶
Einige Services nutzen network_mode: host — entweder weil sie direkten Netzwerk-Zugriff
brauchen oder weil ihre Protokolle nicht ueber einen Reverse-Proxy funktionieren:
- Home Assistant — mDNS-Discovery, Bluetooth, Zigbee
- ESPHome — mDNS fuer OTA-Updates
- Tailscale — VPN-Tunnel (Headscale als Login-Server)
- Cloudflare DDNS — Aktualisiert die A-Records bei IP-Wechsel
- Syncthing — Device-Discovery
- Snowflake — Tor-Bridge-Relay