Zugriff Auf Das Home Lab Über Einen Vps Mit Wireguard
In meiner Bude steht ein Heim-Server und beherbergt den ein oder anderen Dienst. Die meisten davon müssen nicht aus dem Internet erreichbar sein, und lokale Verfügbarkeit mit Pi-Hole und Traefik genügen mir. Für unterwegs kann ich mit einem Wireguard VPN, dass mir die Fritzbox bereitstellt, auch auf diese Dienste zugreifen.
Aber es gibt auch Fälle, wo das eben nicht ausreicht. Der erste Fall sind Dienste, die zwingend eine Verbindung über https verlangen. Natürlich kann ich mir eine lokale CA einrichten und darüber ACME-Challenges laufen lassen. Oder ich lasse mir self-signed Zertifikate über Traefik erstellen, die ich dann auf jedem Endgerät als vertrauenswürdig importiere.
Dann kommt aber auch schon der zweite Fall: Die nicht-so-tech-affine Ehefrau. Das Prozedere mit den self-signed Zertifikaten ist zu umständlich, der VPN eine andere Hürde.
Die Alternative ist dann denkbar einfach: Man nutzt den Wireguard VPN - aber mit einem Peer im Internet.
Grund-Aufbau
- Mein VPS wird als Wireguard-Client mit der Fritzbox verbunden.
- Caddy lauscht auf Anfragen und leitet diese per
reverse_proxyan die interne IP meines Heimservers weiter. - Auf dem Heimserver weiß Traefik über
labelsder einzelnen Docker Container, zu welchem Container er die Anfragen weiterleiten soll.
Die TLS-Terminierung übernimmt Caddy automatisch. Es erstellt für jeden Host (oder in meinem Fall Sub-Domains) ein Let’s Encrypt Zertifikat, was von jedem Client als gültig akzeptiert wird. Der interne Datenverkehr ist über HTTP und ungesichert, was für meinen Anwendungsfall aber ausreicht. Und auch strikte Anwendungen wie Vaultwarden scheinen mit dieser Lösung zufrieden zu sein.
Step-by-Step
Zuerst habe ich in der Fritzbox einen neuen Wireguard-Client angelegt: In der Oberfläche der Fritzbox unter “Internet” -> “Freigaben” und dann im Tab “VPN (WireGuard)” eine “WireGuard-Verbindung hinzufügen”. Namen vergeben, per Tastendruck auf der Fritzbox bestätigt und dann die Konfiguration heruntergeladen.
Dann muss auf dem VPS das Paket wireguard-tools installiert werden. Da ich einen Rocky Linux Server habe, war der entsprechende Befehlt dnf install wireguard-tools, das variiert aber je nach verwendetem Betriebssystem.
Die zuvor heruntergeladene Konfiguration habe ich dann unter /etc/wireguard/wg0.conf abgelegt.
Vorsicht, die Fritzbox geht davon aus, dass jeder Datenverkehr über den VPN Tunnel geleitet werden soll! Ich musste in der Konfiguration noch manuelle Anpassungen vornehmen:
- Die Zeile mit dem DNS-Server musste ich komplett entfernen, weil mein VPS natürlich keinen Zugriff auf Pi-Hole oder die Fritzbox hat. Ist für meinen Anwendungsfall auch egal, da ich meinen Heimserver am Ende über die IP anspreche.
- Anschließend musste ich den Eintrag
0.0.0.0/0aus der ListeAllowedIPsentfernen, weil sonst aller Datenverkehr über den Tunnel geleitet wird, und ich den Server nicht mehr über SSH direkt erreichen konnte.
Danach konnte ich den Wireguard-Service aktivieren und starten:
systemctl enable wg-quick@wg0
systemctl start wg-quick@wg0
Und der Tunnel stand.
In der Caddy File war noch ein kleiner Stolperstein, dass ich bei der Angabe des reverse_proxy nicht nur die IP-Adresse des Heim-Servers angeben musste, sondern auch den Port dahinter.
Abschluss
Im ersten Versuch habe ich einfach mal einen bestehenden Dienst aus dem Homelab über eine öffentliche URL erreichbar gemacht. Nachdem das wunderbar geklappt hat, habe ich den Docker Container meiner Vaultwarden-Instanz auf dem VPS runtergefahren, auf meinen Heimserver migriert und dort über das VPN-Setup verfügbar gemacht. Das hat genau so problemlos funktioniert, wie ich es mir erhofft habe.
Nun läuft ein ziemlich wichtiger Dienst auf meinem privaten Server in meinen vier Wänden und ist direkt im lokalen Backup auf das NAS, aber auch im Offsite-Backup in einen S3 Bucket inkludiert.