Erreiche dein Homelab von überall! | Netbird

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.

Günstiger VPS

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.

script done

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.

  1. Auf dem Server in das Verzeichnis wo Netbird installiert wurde navigieren.
  2. mit nano die docker-compose.yml Datei öffnen
  3. Die Version von Zitadel auf eine neuere Anpassen
Neue Version

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!

Zweitfaktor

Nun können wir noch unser gewünschtes Kennwort hinterlegen.

Passwort ändern

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.

User
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.

  1. Wir deaktivieren das Registrieren von neuen Personen in unserer Zitadel-Instanz
    1. Default Settings → Login and Access → Login Behavior and Security
    2. Ganz unten den Haken “User registration allowed” entfernen und Speichern
deactivate user-registration

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.

Setup
Setup

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.

Setup-Key
Setup-Key

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.

Routen

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.

Policys

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.

Nameserver

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.