Vergiss klassische VPNs! So greifst du sicher auf dein Homelab & entfernte Netzwerke zu

Vergiss klassische VPNs! So greifst du sicher auf dein Homelab & entfernte Netzwerke zu

Übersicht

In der Vergangenheit haben wir uns bereits mit Netbird auseinandergesetzt und die Vorteile kennengelernt. In dem damaligen Beitrag hatten wir Netbird zusammen mit dem vorhandenen Quick-Install Script in Kombination mit Zitadel installiert.

Da ich nie wirklich ein Fan von Zitadel war und auch der Meinung bin, dass das Hosten eines eigenen öffentlich erreichbaren Identity Providers keine ungefährliche Sache ist, habe ich mich nach Alternativen umgesehen.

Ich habe mein komplettes Netbird-Setup umgebaut, indem ich jetzt auf Caddy als Reverse Proxy, die neuesten Versionen der Netbird-Services und Entra-ID bzw. Azure als Identity Provider setze.

Azure kommt automatisch mit Multi-Faktor-Authentifizierung und einem ordentlichen Maß an Sicherheit. Außerdem müssen wir uns hier keine großen Gedanken über das Up-to-Date-Halten und ähnliches machen.

Mit diesem Setup bin ich jetzt eine Weile unterwegs und deutlich zufriedener als zuvor.

Ein guter Kollege von mir hat ein Deploy-Script für diese Variante erstellt, was die Installation genauso simpel macht wie die offizielle Quick-Installation.

Das Video zum Beitrag findet ihr hier: https://youtu.be/-ejSsu6GwDo


Warum Netbird?

NetBird bietet im Vergleich zu herkömmlichen VPNs einen entscheidenden Vorteil: Anstatt dass sich alle Geräte direkt miteinander verbinden müssen, gibt es einen zentralen Hub-Server. Dieser übernimmt automatisch die Einrichtung der benötigten Tunnel und sorgt dafür, dass die Verbindungen effizient und sicher zustande kommen – abhängig davon, welches Gerät wohin möchte und darf.

Die Zugriffskontrolle erfolgt über Access Policies, mit denen sich granular festlegen lässt, wer auf welche Ressourcen zugreifen darf. Das macht NetBird besonders flexibel und sicher.

Ein großer Vorteil ist auch der einfache Zugriff auf unser Homelab von unterwegs. NetBird ermöglicht eine nahtlose Verbindung, ohne dass wir uns um komplizierte Portfreigaben oder dynamische IPs kümmern müssen.

In einem späteren Video gehen wir außerdem auf die Kombination von NetBird mit OPNsense ein. Das eröffnet völlig neue Möglichkeiten, da entfernte Netzwerke so verwaltet werden können, als wären sie direkt vor Ort – ein echter Gamechanger für verteilte IT-Infrastrukturen!


Netbird - Server

Als Erstes benötigen wir natürlich einen passenden Server für Netbird. Da Netbird am Ende von überall erreichbar sein sollte und die meisten vermutlich keine feste IPv4-Adresse zuhause haben, empfehle ich einen VPS.

Einen VPS bekommt man relativ günstig. Mein langjähriger Favorit und daher meine Empfehlung an euch ist ein VPS bei Netcup. Netcup hat nach wie vor die günstigsten Server, die ich bisher gefunden habe, und diese laufen sehr zuverlässig ohne wirkliche Ausfälle, etc.

Relativ versteckt auf der Netcup-Seite findet ihr eine Reihe von VPS mit sehr fairem Preis.

Meine Empfehlung für Netbird ist hier der VPS nano G11s. Ich habe Netbird mit dem Piko getestet, und 1 GB RAM ist dabei zu wenig. Der Nano funktioniert aber sehr gut und zuverlässig.

VPS nano G11s

Solltet ihr euch für einen Server bei Netcup entscheiden, habe ich für alle Neukunden einen 5€ Gutschein. Mit Verwendung des Gutscheins habt ihr einen kleinen Rabatt und unterstützt mich gleichzeitig, um weitere solcher Beiträge zu ermöglichen. Den Gutschein könnt ihr einfach im Bestellprozess angeben, und automatisch werden euch 5€ von der ersten Rechnung abgezogen.

  • 5€ Gutschein Code: 36nc17222595270
  • Günstige VPS-Server bei Netcup hier *
    *Es handelt sich hierbei um einen Affiliate-Link

Absicherung des Servers

Da der Server am Ende natürlich von außerhalb erreichbar ist, solltet ihr vor allem den SSH-Zugang entsprechend gegen Angreifer absichern. Einen Beitrag zu Fail2Ban, 2Faktor und SSH-Einstellungen findet ihr hier.


DNS

Bevor wir fortfahren, müssen wir unserer Domäne einen passenden öffentlichen DNS-Eintrag zu unserem neuen Server hinzufügen, damit wir später Netbird darüber erreichen können.

Je nach Anbieter, bei dem ihr eure Domain habt, kann das Vorgehen variieren.

DNS-Eintrag


Entra ID - Azure AD

Bevor wir mit der Installation und Einrichtung von Netbird fortfahren, erstellen wir zunächst ein kostenloses Azure Tenant.

  1. Öffnet die Seite https://azure.microsoft.com/free/
  2. Erstellt euch ein kostenloses Azure Konto
    Die Kreditkarte wird hier zur Bestätigung der Identität genutzt, es fallen keine Kosten an.

Nach Abschluss der Registrierung habt ihr ein Azure Tenant in der Free Version.

Azure Tenant

MFA in Azure

Ein großer Vorteil bei Azure ist die solide Multifaktorauthentifizierung. Ich empfehle jedem diese dringendst einzurichten um einen deutlichen Sicherheitszuwachs zu gewinnen. Die Multifaktorauthentifizierung funktioniert hier am besten mit der Microsoft Authenticator App. Das Einrichten könnt ihr einfach hier für euren Account vornehmen.

Azure Netbird Application

Für Netbird erstellen wir jetzt in unserem neuen Tenant eine neue Applikation. Über diese funktioniert später dann die Authentifizierung bei Netbird.

Anwendung registrieren und konfigurieren

  1. App-Registrierung → Neue Registrierung

App registrieren

  1. Wir vergeben der Anwendung einen Namen und fügen die Umleitungs-URI hinzu.

Umleitungs-URI

  1. Als nächstes gehen wir in der neu erstellten App auf den Reiter Authentifizierung und fügen eine neue Plattform hinzu.

Authentifizierung

  1. Dort wählen wir Single-Page-Webanwendung

Single-Page-Webanwendung

  1. Nun geben wir als URI https://eure-domain.de/auth ein und klicken auf Konfigurieren

URI konfigurieren

  1. Jetzt scrollen wir nochmal runter im Authentifizierungs-Tab, setzen noch die beiden Haken und wählen beim Ja-Nein-Feld Ja aus und speichern das Ganze.

Haken setzen

  1. Jetzt erstellen wir noch eine weitere Plattform, diesmal wählen wir Mobilgerät- und Desktopanwendungen.

Mobilgerät- und Desktopanwendungen

  1. Hier fügen wir jetzt als URI http://localhost:53000 hinzu.

URI hinzufügen

Anwendungs-APIs erstellen

Als Nächstes müssen wir der Anwendung die passenden APIs erstellen. Dafür navigieren wir in der Anwendung zum Reiter Eine API verfügbar machen.

APIs erstellen

  1. Hier klicken wir auf Bereich hinzufügen, lassen die Anwendungs-URI so wie sie angezeigt wird und klicken Speichern.

Bereich hinzufügen

  1. Jetzt geben wir einen Namen ein, setzen das Wer darf einwilligen auf Admins und Benutzer und bei Bedarf fügen wir noch eine Beschreibung hinzu.

API-Namen eingeben

  1. Nun fügen wir noch eine Clientanwendung hinzu. Der Name muss dabei genauso sein wie die API, nur ohne das api:// davor. Außerdem setzen wir den Haken bei der API.

API-Clientanwendung

API-Berechtigungen vergeben

Nun bekommt die API noch entsprechende Berechtigungen.

  1. Navigiere zum Reiter API-Berechtigungen in der Anwendung.

API-Berechtigungen

  1. Klicke Berechtigung hinzufügen, gehe zum Reiter Von meiner Organisation verwendete APIs und wähle Netbird.

Berechtigung hinzufügen

  1. Wähle api aus und klicke Berechtigung hinzufügen.

API wählen

  1. Gehe erneut auf Berechtigung hinzufügen und wähle dann Microsoft Graph und dann Anwendungsberechtigung.

Microsoft Graph wählen

  1. Suche nach User.Read und setze den Haken bei User.Read.All.

User.Read.All wählen

  1. Klicke nun auf Administratorzustimmung erteilen.

Zustimmung erteilen

Token-Version aktualisieren

Gehe als Nächstes zum Reiter Manifest und dort zum zweiten Reiter. Suche hier nach accessTokenAcceptedVersion und tausche den Wert von null auf 2.

Token-Version ändern

Client Secret

Zuletzt benötigen wir für Netbird einen Client Secret Key.

  1. Navigiere zum Reiter Zertifikate & Geheimnisse.

Client Secret Key

  1. Wähle Neuen geheimen Clientschlüssel.

Geheimer Clientschlüssel

  1. Gebe eine kurze Beschreibung ein und wähle die Gültigkeitsdauer des Schlüssels aus. Danach muss er erneuert und in der Umgebung ausgetauscht werden.

Clientschlüssel einrichten

  1. Notiere dir den Wert des neuen Schlüssels (dieser Wert kann nur einmal angezeigt werden).

Key-Wert notieren

Alle Werte notieren

Notiert euch jetzt alle Werte, die ihr später für Netbird benötigt.

  1. Der geheime Schlüssel, den ihr euch eben notiert habt = AZURE_CLIENT_SECRET
  2. AZURE_ISSUER_ID → ist die Tenant ID, die ihr auf der Übersichtsseite des Tenants findet.

Azure Issuer ID

  1. AZURE_CLIENT_ID → Reiter Unternehmensanwendungen → Netbird.

Azure Client ID

  1. AZURE_OBJECT_ID → Reiter Unternehmensanwendungen → Netbird (Direkt unter der Anwendungs-ID).

Azure Object ID

So könnt ihr die Werte bei der Installation einfach kopieren.

Notierte Werte


Installation & Einrichtung

Wir haben jetzt alles, was wir benötigen und können mit der Installation von Netbird auf unserem neuen Server beginnen.

Docker & Docker Compose

Als Erstes benötigen wir natürlich Docker, das wir ganz einfach mit einem Befehl installieren können.

curl -fsSL https://get.docker.com -o get-docker.sh && sudo sh get-docker.sh

Nach Beendigung des Skripts haben wir Docker und Docker Compose erfolgreich installiert und können uns nun final Netbird zuwenden.

Netbird Deploy-Script

Wie bereits erwähnt, hat ein guter Kollege für das komplette Setup mit Caddy, Entra ID & den neuesten Netbird-Services ein Deploy-Skript erstellt, das die Installation mindestens genauso einfach macht wie die offizielle Quick-Start-Installation, jedoch mit dem Unterschied, dass wir hier alles noch ein wenig neuer und aktueller nutzen.

  1. Zunächst klonen wir die Repo auf unseren Server.
git clone https://github.com/Gauss23/netbird-azure.git
  1. Anschließend navigieren wir in den Ordner der Repo.
cd ./netbird-azure/deploy/
  1. Wir kopieren die Datei params_dist.sh und benennen sie in params.sh um.
cp ./params_dist.sh ./params.sh
  1. Dann bearbeiten wir params.sh und füllen alle erforderlichen Werte nach unseren Wünschen + die notierten Werte aus Azure (Das doppelte AZURE_OBJECT_ID kann entfernt werden) ein.
#!/bin/bash

# List of parameters: Search value -> Replacement value
declare -A parameterList=(
    # Public FQDN of the NetBird server you want to use, the FQDN needs to be resolvable to the public IP of the NetBird server
    ["###NB_PUBLIC_FQDN###"]="demo.example.com"
    # Public IP of the NetBird server
    ["###NB_PUBLIC_IP###"]="1.1.1.1"
    # Internal domain you want to use in NetBird
    ["###NB_INTERNAL_DOMAIN###"]="internal-netbird.local"
    # Some secrets which are created for you
    ["###NB_TURN_PW###"]="$(tr -dc 'A-Za-z0-9' < /dev/urandom | head -c 20)"
    ["###NB_RELAY_SECRET###"]="$(tr -dc 'A-Za-z0-9' < /dev/urandom | head -c 20)"
    ["###NB_POSTGRES_PW###"]="$(tr -dc 'A-Za-z0-9' < /dev/urandom | head -c 20)"
    # Azure AD parameters
    # The Azure AD tenant ID, it's called issuer id here, i.e. https://login.microsoftonline.com/##AZURE_ISSUER_ID##/v2.0
    ["###AZURE_ISSUER_ID###"]="AZURE_ISSUER_ID"
    # The Azure AD object ID of the application created in the Azure AD tenant
    ["###AZURE_OBJECT_ID###"]="AZURE_OBJECT_ID"
    # The Azure AD client ID of the application created in the Azure AD tenant
    ["###AZURE_CLIENT_ID###"]="AZURE_CLIENT_ID"
    # The Azure AD client secret of the application created in the Azure AD tenant
    ["###AZURE_CLIENT_SECRET###"]="AZURE_CLIENT_SECRET"
)
  1. Nachdem wir alle Variablen angepasst und ausgefüllt haben, speichern wir es ab und führen replace-params.sh aus.
./replace-params.sh
  1. Nun führen wir das deploy.sh-Script aus. (sudo wird benötigt, da der gesamte Ordner für Docker nach /opt/netbird verschoben wird.)
sudo ./deploy.sh 
  1. Jetzt navigieren wir in den neu erstellten Ordner, in dem das fertige Docker-Setup auf uns wartet.
cd /opt/netbird
  1. Zum Schluss starten wir die Container. Nun wird automatisch ein gültiges Zertifikat mithilfe von Caddy geholt, und alles Weitere wird eingerichtet. Nach kurzer Zeit ist Netbird unter der ausgewählten Domain erreichbar, und wir können uns mit dem Azure-User anmelden.
sudo docker compose up -d

Erster Login

Sobald alle Docker-Container gestartet sind, könnt ihr eure gewählte Domain im Browser aufrufen. Anschließend öffnet sich Netbird, und ihr könnt euch mit eurem Azure-Account anmelden.

Der erste Benutzer des Tenants, der sich anmeldet, wird automatisch Admin. Weitere Benutzer können nachträglich ebenfalls als Admin hinzugefügt werden.


Netbird Beispiel

Nachdem wir jetzt alles soweit eingestellt haben, kommen wir zum eigentlichen Star der Show. Über unsere vergebene URL gelangen wir zur Netbird-Instanz. Dort angekommen ist es erst einmal etwas leer.

Um euch jetzt möglichst viele Funktionen von Netbird zeigen zu können, bauen wir jetzt gemeinsam ein Beispiel-Setup für unser Homelab. Dabei richten wir einen zusätzlichen Server auf unserem Proxmox-Host für den Netbird-Client ein. Das gibt uns den Vorteil, dass wir neue Homelab-Server einfach einbinden können.

Das 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

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 angeben. Außerdem können wir das Gerät direkt einer neuen Gruppe zuordnen.

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-PCs gibt es Agents zum Download.

Aktuelle Peers

Wir haben nun einen Homelab-Server-Peer, den wir in eine gleichnamige Gruppe gepackt haben, und einen mobilen Client.

Netbird Routen

Um die Verbindung zu unseren Homelab-Servern herzustellen, 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

Zuletzt hinterlegen wir 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.

Nameservers

Fertig! Wenn wir jetzt unseren mobilen Client mit Netbird verbinden, können wir wie gewohnt auf unser Homelab zugreifen.