Erreiche dein Homelab von überall! | Netbird
Übersicht
In dem heutigen Beitrag geht es darum, dass Homelab sicher von überall aus zu erreichen. Viele Haben dabei das Problem, dass der Provider cgnat
verwendet oder prinzipiell keine feste öffentliche IP-Adresse existiert. Das erschwert das Setup eines VPN Zugriffs.
Um all diese Probleme zu umgehen, nutzen wir das Tool Netbird. Mit Netbird setzt ihr einen “Hub” Server auf, der die Verwaltung der verschiedenen WireGuard Tunnel für euch übernimmt. Die Clients und Server initiieren die Verbindung zum Hub, was kein Portforwarding und co. benötigt.
Ein weiterer Vorteil hierbei ist, dass wir uns auch nicht mit iptables
rumschlagen müssen um Verbindungen nur zu gewissen Ports oder Clients erlauben zu können. Hierfür hat Netbird ein Access Control
Menü, in dem wir uns entsprechende Policys dafür direkt in der GUI erstellen können.
Außerdem haben wir die Möglichkeit unsere Homelab Domain über unseren AdGuard DNS Server auflösen zu lassen, so dass wir Unterwegs auf alles genauso wie Zuhause zugreifen können.
Setup
Für das Aufsetzen einer Netbird-Instanz gibt es verschiedene Möglichkeiten. Wir schauen uns heute die einfachste an, den Quickstart Guide. Hierbei installiert sich Netbird komplett automatisch und richtet SSO mit Zitadel ein.
Server
VPS
Als erstes benötigen wir einen VPS um das Netbird Hub von überall erreichbar zu machen.
Ich habe viele verschiedene Provider getestet und war Langezeit auf der Suche nach den günstigsten Servern. Mittlerweile bin ich seit ca. 2 Jahren mit allen Servern die Produktiv und dauerhaft laufen sollen bei Netcup. Bei Netcup findet man recht versteckt eine Reihe von sehr günstigen Servern. So gibt es dort einen Server mit 2GB RAM und 2 CPUs für 2€ im Monat. Dieser Server ist perfekt für unsere Netbird Installation.
Natürlich könnt ihr auch zu jedem anderen Provider gehen, allerdings habe ich noch keine günstigeren VPS gefunden und kann euch Netcup daher sehr empfehlen.
Wenn ihr mich gerne unterstützten wollt und weitere solche Beiträge und Videos ermöglichen wollt, habe ich hier einen 5€ Gutschein (für Neukunden) für euch den ihr nutzen könnt. Anschließend erhalte ich ebenfalls einen kleinen Obolus dafür.
5€ Gutschein: 36nc17222595270
Hier gelangt ihr zu dem genannten VPS.
Ich empfehle euch sehr euren SSH Zugang zu dem Server entsprechend abzusichern. Eine Möglichkeit mit MFA und SSH-Key findet ihr hier.
DNS
Bevor ihr mit dem Setup startet, sollte ihr die VPS IP-Adresse als DNS Einträg für eure gewünschte Domain hinterlegen.
Quickstart Guide
Nachdem wir nun einen VPS bereitgestellt haben können wir mit der eigentlichen Netbird-Installation fortfahren.
Firewall
Netbird teilt uns die Ports mit die zugänglich sein müssen. Wir nutzen UFW um die Firewall-Einstellungen vorzunehmen
sudo ufw default allow outgoing
sudo ufw default deny incoming
sudo ufw allow 22
sudo ufw allow 80
sudo ufw allow 443
sudo ufw allow 33073
sudo ufw allow 10000
sudo ufw allow 3478/udp
sudo ufw allow 49152:65535/udp
sudo ufw enable
Pre-Configuration
Als erstes statten wir unseren Server mit allem aus, was er für die Installation braucht.
curl
installieren
sudo apt install curl
jq
installieren
sudo apt install jq
Docker Installieren
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
Quickstart-Script
Da wir nun alle Abhängigkeiten installiert haben, können wir das eigentliche Quickstart-Script ausführen, was den Rest für uns erledigt.
Wir kopieren uns die Zeile, passen die Domain an und führen das Script aus.
export NETBIRD_DOMAIN=netbird.example.com; curl -fsSL https://github.com/netbirdio/netbird/releases/latest/download/getting-started-with-zitadel.sh | bash
Jetzt wird alle relevante für Netbird installiert. Wenn das Script durchgelaufen ist, werden uns die Credentials für den Admin-User mitgeteilt.
Bug Fix
Wir möchten gleich noch in Zitadel das Registrieren von neuen Usern deaktiveren. In der aktuell verwendeten Version von Zitadel gibt es allerdings den Bug, dass dies trz deaktivieren noch möglich ist. Daher upgraden wir die Zitadel Version in der Compose Datei.
- Auf dem Server in das Verzeichnis wo Netbird installiert wurde navigieren.
- mit
nano
diedocker-compose.yml
Datei öffnen - Die Version von Zitadel auf eine neuere Anpassen
Container neu starten
docker compose down
docker compose up -d
Zitadel
Mit den Credentials können wir uns nun einmalig in Zitadel einloggen und ein paar Einstellungen vornehmen. Danach müssen wir hier nicht mehr wirklich ran.
Um zu Zitadel zu gelangen navigieren wir zu der genannten URL und fügen /ui/console
mit hinzu. Nun können wir uns Anmelden.
Anschließend werden wir direkt aufgefordert einen Zweitfaktor zu hinterlegen, dass solltet ihr unbedingt tun!
Nun können wir noch unser gewünschtes Kennwort hinterlegen.
User
In Zitadel angekommen, können wir als erstes zu unserem Account Navigieren und den Namen + Username anpassen.
Dafür klicken wir oben rechts auf unser Bild und wählen dann Konto Bearbeiten aus.
Für das Einloggen später können wir den User Name oben bearbeiten. Und den Namen, damit wir korrekt in Netbird angezeigt werden und nicht Zitadel Admin heißen.
Wichtig! ändert nicht die E-mail aus den Kontakt Informationen! diese muss danach Verifiziert werden. Da wir aber keinen SMTP Server hinterlegt haben, funktioniert das nicht.
Registration Verbieten
Aktuell ist das Registrieren von neuen Usern in Zitadel noch erlaubt. Das deaktivieren wir mit der folgenden Einstellung.
- Wir deaktivieren das Registrieren von neuen Personen in unserer Zitadel-Instanz
- Default Settings → Login and Access → Login Behavior and Security
- Ganz unten den Haken “User registration allowed” entfernen und Speichern
Netbird
Nachdem wir jetzt alles soweit eingestellt haben, kommen wir zum eigentlichen Star der Show. Über unsere vergebene URL gelangen wir zu der Netbird-Instanz. Dort angekommen ist es erstmal etwas leer.
Um euch jetzt möglichst viele Funktionen von Netbird zeigen zu können, bauen wir jetzt gemeinsam ein Beispielsetup für unser Homelab. Dabei richten wir einen extra Server auf unserem Proxmox-Host für den Netbird-Client ein. Das gibt uns den Vorteil, dass wir neue Homelab-Server einfach mit einbinden können.
Ziel ist es, dass der Netbird-Client im Homelab genutzt werden kann um Routen zu verschiedenen Homelab-Servern bereitzustellen. Außerdem wollen wir auch die Möglichkeit haben unsere Applikationen per Domainnamen zu erreichen mit den vorhandenen SSL-Zertifikaten.
Netbird Agent
Damit wir die Gruppen in Netbird erstellen können, auf denen dann die Policys basieren, müssen wir zuerst den Agent auf dem Homelab-Server und einem beliebigen Mobilen-Client installieren.
Installation Linux
Der Agent an sich wird mit einem Befehl installiert.
curl -fsSL https://pkgs.netbird.io/install.sh | sh
Setup-Key
Damit wir uns nicht in einem Browser authentifizieren müssen, können wir auf Setup-Keys zurückgreifen. Den Key können wir beim Starten von Netbird mit angeben. Außerdem können wir das Gerät schon direkt einer neuen Gruppe zuordnen.
Verbinden
Alles was wir jetzt machen müssen ist den Netbird up
Befehl zu nutzen. Dabei geben wir 2 Flags mit an, damit sich der Agent mit unserer Instanz verbindet und den Setup-Key dafür nutzt.
netbird up --management-url https://<url> --setup-key <setup-key>
Andere Agents
Für Smartphones, Macs und Windows PC´s gibt es Agents zum Downloaden.
Aktuelle Peers
Wir haben nun einen Homelab-Server Peer den wir in eine Gleichnamige Gruppe gepackt haben und einen Mobile-Client.
Netbird Routen
Um jetzt die Verbindung zu unseren Homelab-Servern möglich zu machen, hinterlegen wir in Netbird Routen über den Netbird-Agent in unserem Homelab.
Wir benötigen 2 Routen, einmal muss der Interne DNS Server erreichbar sein, der die interne Domain für uns auflöst und zum anderen müssen wir Port 443 und 80 von unserem Nginx Docker erreichen, um die Applikationen zu erreichen.
Netbird Policys
Policys benötigen wir ebenfalls nur 2 Stück. Einmal erlauben wir Port 80
und 443
von den Mobilen-Clients zum Homelab-Server und dann erlauben wir noch Udp 53
für unseren DNS Server.
Netbird Nameservers
Als letztes hinterlegen wir nun einen Nameserver für unsere Homelab Domain.
Unter dem Reiter Nameservers können wir unseren privaten AdGuard Server eintragen und eine Match Domain
festlegen. Damit sagen wir aus, dass der DNS Server nur bei der Homelab-Domain befragt werden soll.
Wenn ihr die Match-Domain funktion nutzt, sollten ihr mindestens noch einen zweiten DNS Server wie bspw. Google hinterlegen um die restlichen Anfragen aufzulösen. Macht ihr das nicht, kann es hier ggf. zu Problemen kommen.
Alternativ könnt ihr aber auch euren Adguard einfach für alle Anfragen verwenden. Dies generiert allerdings ein wenig mehr Traffic, da jede Anfrage durch den Tunnel zu eurem AdGuard DNS Zuhause geht.
Fertig! Wenn wir jetzt unseren Mobilen-Client mit Netbird verbinden, können wir wie gewohnt auf unser Homelab zugreifen.