🌐 Dahoam Mesh-Weiche
Zentrale Vermittlungsstelle (Traefik v3 & Headscale) zur sicheren Anbindung dezentraler Homeserver ohne Portfreigaben am Router.
🗺️ Der Weg des Datenverkehrs (Ende-zu-Ende)
Ein eingehender HTTPS-Aufruf aus dem Internet wird auf dem Hostkey-VPS entgegengenommen, dort vollautomatisch mit einem echten Let’s-Encrypt-Zertifikat versehen und über den verschlüsselten Tailscale/WireGuard-Mesh-Tunnel direkt an den dezentralen Homeserver weitergeleitet:Browser / ClientInternet-NutzerPort 443Hostkey VPS (Weiche)Traefik v3Auto-TLS / SSLHeadscaleControl PlaneTailscale Mesh100.64.0.0/10Knoten SeebruckDietPi VM in PVEwp-seppi:8080
1. DNS-Wildcard*.aopen.nas64.de routet direkt auf die VPS-IP. Subdomains erfordern keine manuelle DNS-Verwaltung.
2. TLS & Zertifikat
Traefik v3 stellt automatisch Let’s-Encrypt-Zertifikate per HTTP-01 aus und terminiert SSL zentral am VPS.
3. CGNAT-Bypass
Der Tunnel baut sich von innen nach außen auf. Keine Portweiterleitung in Kundenroutern erforderlich.
Erledigt & Online Meilensteine des Setups
- VPS Basis & Härtung: Debian 12 auf Hostkey VPS gehärtet (Key-only SSH, UFW Firewall für Ports 22/80/443, Fail2ban, Auto-Upgrades).
- Zentrale Vermittlung (Traefik v3 & Headscale): Reverse-Proxy und selbst gehostete Headscale-Instanz laufen containerisiert im Mesh-Netz.
- Domain-Architektur: Saubere Wildcard-Domain
aopen.nas64.de– vollständig frei von geteilten DynDNS-Rate-Limits. - Mesh-Kopplung: 4 registrierte Knoten im Headscale-Netzwerk (
100.64.0.0/10). - Erstes Kunden-Deployment (Live): Kunde Seppi in Seebruck (
100.64.0.4) – WordPress Docker-Stack via Remote-SSH vom VPS ausgerollt. Endpunkthttps://wp-seppi.aopen.nas64.deist live und zertifiziert.
📖 Rezept 1: WordPress-Kundenknoten remote ausrollen
Dieses Rezept rollt einen neuen Dienst für einen Kunden vollautomatisch über das Mesh-Netzwerk aus.
1. Headscale Pre-Auth-Key auf dem VPS erzeugen
docker exec headscale headscale preauthkeys create --user 1 --expiration 24h
2. Remote-Node verbinden & Hostname setzen
tailscale up \
--login-server https://headscale.aopen.nas64.de \
--authkey <PRE-AUTH-KEY> \
--hostname seebruck-seppi \
--accept-routes
3. SSH-Key-Vertrauen über das Mesh herstellen
VPS-Public-Key in die /root/.ssh/authorized_keys des Client-Nodes eintragen, damit künftige Deployments und Updates direkt vom Hostkey-VPS per SSH ohne Passworteingabe durchlaufen.
4. WordPress-Stack per Remote-SSH vom VPS deployen
ssh root@100.64.0.4 'bash -s' << 'EOF'
set -e
mkdir -p /opt/wp-seppi && cd /opt/wp-seppi
cat << 'YAML' > compose.yaml
services:
db:
image: mariadb:10.11
container_name: wp-seppi-db
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: secret_root_password_seppi
MYSQL_DATABASE: wordpress
MYSQL_USER: wpuser
MYSQL_PASSWORD: secret_wp_password_seppi
volumes:
- db_data:/var/lib/mysql
wordpress:
image: wordpress:php8.2-apache
container_name: wp-seppi-app
restart: unless-stopped
depends_on:
- db
ports:
- "8080:80"
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wpuser
WORDPRESS_DB_PASSWORD: secret_wp_password_seppi
WORDPRESS_DB_NAME: wordpress
volumes:
- wp_data:/var/www/html
volumes:
db_data:
wp_data:
YAML
docker compose up -d
EOF
Hinweis: Das offizielle WordPress-Image erkennt HTTP_X_FORWARDED_PROTO bereits nativ – kein WORDPRESS_CONFIG_EXTRA erforderlich!
5. Traefik-Route am VPS aktivieren (/opt/headscale-traefik/traefik/dynamic/wp-seppi.yml)
http:
routers:
wp-seppi-router:
rule: "Host(`wp-seppi.aopen.nas64.de`)"
entryPoints:
- websecure
service: wp-seppi-svc
tls:
certResolver: letsencrypt
services:
wp-seppi-svc:
loadBalancer:
servers:
- url: "http://100.64.0.4:8080"
Roadmap Nächste Schritte
- Auto-Sync Daemon: Shell-Skript auf dem VPS, das neue Headscale-Registrierungen erkennt und Traefik-Routen automatisch aus Vorlagen generiert.
- Zero-Touch Bootstick: USB-Stick mit vorkonfiguriertem DietPi/Alpine-Image für Kunden, das beim Einstecken automatisch ins Mesh joint.
- Eigene Kundendomains: Aufschaltung beliebiger Kunden-Domains via CNAME auf den VPS.
TRAUNROCKS
Dahoam Cloud • Digitale Souveränität • Dezentrale Infrastruktur