Files
Homelab--Bratonein-Kontroll…/Kapitel 4/Free Rohtext.md

261 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Kapitel 4 WireGuard (VPN) mit WG-Dashboard
## Einleitung
Bisher haben wir unsere Dienste im UCC so aufgebaut, dass öffentliche Anwendungen wie zum Beispiel die Nextcloud über den Nginx Proxy Manager (NPM) erreichbar sind.
Doch nicht jede Oberfläche sollte ins Internet freigegeben werden. Viele Admin-Dashboards, Diagnose-Tools oder Konfigurationen sind **nur für uns selbst gedacht** und würden im Internet ein leichtes Ziel für automatisierte Angriffe oder Bruteforce darstellen.
### Zugriff von unterwegs
Stell dir vor, du bist nicht zuhause und möchtest trotzdem dein UCC nutzen:
- Das **Pi-hole** soll auch unterwegs Werbung und Tracker blockieren.
- Eine **Admin-Oberfläche** soll erreichbar sein, ohne sie öffentlich freigeben zu müssen.
- Du möchtest dich per **SSH oder Terminal** einloggen, um eine schnelle Diagnose durchzuführen.
All das funktioniert nicht über den NPM, da er ausschließlich für **öffentliche Dienste** gedacht ist. Wir brauchen also einen sicheren Weg, unser gesamtes internes Netz von außen nutzen zu können.
### Lösung: VPN
Ein **Virtual Private Network (VPN)** erstellt einen verschlüsselten Tunnel zwischen deinem Gerät (z. B. Laptop oder Smartphone) und dem UCC.
Nach der Verbindung verhält sich dein Gerät so, als wäre es direkt im Heimnetz.
Das bedeutet:
- Alle internen IPs und Container sind erreichbar.
- Der gesamte Datenverkehr kann optional über das UCC laufen.
- Pi-hole wirkt dadurch auch außerhalb des heimischen WLANs.
### WireGuard
WireGuard ist ein moderner Standard für VPN-Verbindungen. Er ist schlanker, schneller und einfacher aufgebaut als klassische Lösungen wie OpenVPN oder IPSec.
Mit wenig Ressourcen läuft WireGuard auch in einem kleinen Proxmox-LXC stabil und zuverlässig.
Die Verbindung ist innerhalb weniger Sekunden aufgebaut und nutzt moderne Kryptografie, ohne komplizierte Konfiguration.
### WG-Dashboard
Die größte Hürde bei WireGuard war bisher die manuelle Einrichtung. Schlüssel erzeugen, Config-Dateien schreiben, Clients verteilen das war fehleranfällig und unübersichtlich.
**WG-Dashboard** löst genau dieses Problem:
- Der VPN-Server wird über eine **Weboberfläche** eingerichtet.
- Neue Clients lassen sich mit einem Klick anlegen.
- Für mobile Geräte werden **QR-Codes** angezeigt, die direkt in die WireGuard-App gescannt werden können.
- Statistiken und Verbindungsübersichten zeigen, welche Geräte online sind.
Damit wird WireGuard für alle nutzbar, die Wert auf Sicherheit legen, aber keine Zeit mit komplizierten Config-Files verschwenden wollen.
> [!TIP]
> Mit WireGuard und WG-Dashboard stellst du eine **sichere Verbindung** ins UCC her.
> So nutzt du alle Vorteile deines Heimnetzes von überall: Pi-hole blockt Werbung, Admin-Oberflächen bleiben geschützt, und der Zugriff auf interne Tools und Terminals ist jederzeit möglich.
---
## Voraussetzungen
Für den WireGuard-Server mit WG-Dashboard benötigen wir einen eigenen LXC-Container in Proxmox.
Dieser Container bildet die Grundlage für den VPN-Dienst und stellt die Verwaltungsoberfläche bereit.
### Anforderungen an den Container
- **Betriebssystem:** Ubuntu 24.04 LTS
- **Ressourcen:**
- 2 CPU-Kerne
- 2 GB RAM
- 16 GB Speicherplatz
- **Netzwerk:** Eine feste IPv4-Adresse im Heimnetz, z. B. `192.168.1.7`.
- **Internetverbindung:** Notwendig für das Herunterladen von Paketen und Docker-Images.
### Hinweis bei Problemen
Falls du unsicher bist, wie man in Proxmox einen LXC-Container erstellt, wirf bitte noch einmal einen Blick auf **Kapitel 1**.
Dort haben wir die grundlegenden Schritte (Template auswählen, Container einrichten, IP vergeben) ausführlich beschrieben.
> [!TIP]
> Trage die feste IP-Adresse des Containers im Router als **DHCP-Reservierung** ein.
> So stellst du sicher, dass die Adresse immer verfügbar ist und es keine Konflikte mit automatisch vergebenen Adressen gibt.
## Schritt für Schritt Anleitung
### Installation (Ubuntu 24.04 LTS im LXC)
Wir installieren WG-Dashboard nach offizieller Anleitung, erweitern die Schritte aber um Erklärungen und Hinweise.
Ziel ist es, den WireGuard-Server im UCC mit einer Weboberfläche bereitzustellen.
#### 1) System vorbereiten
Zuerst aktualisieren wir das System und installieren die wichtigsten Pakete für WireGuard und Netzwerkanalyse.
```bash
apt-get update -y
apt-get upgrade -y
apt-get install -y wireguard-tools net-tools git
```
- `wireguard-tools`: enthält die Werkzeuge, um WireGuard zu starten und zu verwalten.
- `net-tools`: nützlich für Befehle wie `ifconfig` oder `netstat` (oft für Diagnose gebraucht).
- `git`: notwendig, um den Quellcode von WG-Dashboard direkt von GitHub herunterzuladen.
> [!NOTE]
> Mit `apt-get upgrade -y` stellst du sicher, dass der Container auf dem neuesten Stand ist, bevor zusätzliche Software installiert wird.
#### 2) WG-Dashboard herunterladen
Das Projekt liegt auf GitHub. Mit `git clone` laden wir es direkt ins System.
```bash
git clone https://github.com/WGDashboard/WGDashboard.git
cd ./WGDashboard/src
```
Im Ordner `src` befindet sich das zentrale Script `wgd.sh`, das die komplette Installation und Verwaltung übernimmt.
#### 3) Installationsskript ausführen
Damit das Script lauffähig ist, setzen wir die Berechtigungen und starten die Installation:
```bash
chmod +x ./wgd.sh
./wgd.sh install
```
- `chmod +x` macht die Datei ausführbar.
- `./wgd.sh install` startet die eigentliche Einrichtung: Abhängigkeiten, Systemd-Services und Konfiguration für das Dashboard.
Während der Installation legt das Script alle benötigten Dateien unter `/etc/wireguard/` und `/etc/wgd/` an.
> [!TIP]
> Du kannst den Fortschritt jederzeit mit `journalctl -u wgd` oder `systemctl status wgd` prüfen.
#### 4) IP-Forwarding aktivieren
Damit Geräte im VPN Zugriff ins Heimnetz haben, muss das System IP-Forwarding erlauben.
Ohne diese Einstellung könnten sich Clients zwar verbinden, aber keine Daten weiterleiten.
```bash
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p /etc/sysctl.conf
```
Damit wird die Weiterleitung sofort aktiviert und auch nach einem Neustart beibehalten.
> [!WARNING]
> Ohne IP-Forwarding ist dein VPN nutzlos du könntest dich zwar verbinden, aber keine Dienste im UCC erreichen.
#### 5) WG-Dashboard starten
Zum ersten Mal starten wir das Dashboard mit:
```bash
./wgd.sh start
```
Das Script legt dabei einen Systemd-Service an, der automatisch mit dem Container gestartet wird.
Der Status kann überprüft werden mit:
```bash
systemctl status wgd
```
### Erste Anmeldung in der Weboberfläche
Wenn der Service läuft, öffnen wir im Browser:
```
http://<Container-IP>:10086
```
Standard-Zugangsdaten:
- **Benutzername:** `admin`
- **Passwort:** `admin`
Nach dem Login fordert dich das Dashboard auf, ein neues Passwort zu vergeben.
Dieser Schritt ist Pflicht, da die Standarddaten öffentlich bekannt sind.
👉 *Screenshot geeignet: Login-Maske von WG-Dashboard nach Erststart.*
> [!TIP]
> Lege das neue Passwort sofort fest und notiere es in deiner Passwortverwaltung (siehe Kapitel Vaultwarden).
> [!WARNING]
> WG-Dashboard verwaltet sensible Daten wie Private Keys deiner VPN-Clients. Sichere Passwörter und ein abgeschotteter Zugriff (nur über NPM oder VPN) sind Pflicht!
## WireGuard-Server einrichten und ersten Client hinzufügen
Nach der Installation von WG-Dashboard ist die Oberfläche über
```
http://<Container-IP>:10086
```
erreichbar. Hier beginnt die eigentliche Einrichtung unseres VPN-Servers im UCC.
### Server-Grundkonfiguration
Im Menüpunkt **Server Settings** tragen wir die Basiswerte ein, die den gesamten VPN-Betrieb bestimmen.
- **Listen Port**
Standard ist `51820/udp`. WireGuard setzt konsequent auf UDP, weil Verbindungen so schneller aufgebaut und stabiler gehalten werden können als über TCP. Diesen Port müssen wir später im Router freigeben, damit Anfragen von außen bis zum Server gelangen.
- **Server Address (VPN-Subnetz)**
Ein VPN braucht ein eigenes internes Netz, das unabhängig vom Heimnetz funktioniert.
Bewährt hat sich z. B. `10.6.0.1/24`.
- `10.6.0.1` → Adresse des VPN-Servers
- `10.6.0.2254` → mögliche Adressen für Clients
So stellen wir sicher, dass sich VPN-Geräte nicht mit bestehenden Heimnetz-IPs überschneiden.
- **DNS**
Hier legen wir fest, welcher Resolver für die VPN-Clients zuständig ist.
Tragen wir die IP unseres **Pi-hole** ein (z. B. `192.168.1.5`), profitieren wir unterwegs genauso von Werbe- und Tracking-Blockade wie zuhause.
Alternativ könnten hier auch externe Resolver wie 1.1.1.1 oder 8.8.8.8 stehen aber das verschenkt die Stärke des UCC.
Nachdem wir die Werte gespeichert haben, erzeugt WG-Dashboard automatisch die nötigen Konfigurationsdateien und startet den Dienst. Im Dashboard sehen wir jetzt den Status des Servers.
> [!NOTE]
> Port 51820/UDP ist der Standard. Es ist möglich, andere Ports zu verwenden, aber nur sinnvoll, wenn im Netzwerk bereits ein weiterer WireGuard-Server läuft.
### Portfreigabe im Router
Damit externe Geräte den Server erreichen, muss der Datenverkehr weitergeleitet werden.
Im Router richten wir deshalb eine **Portfreigabe** ein:
- **Extern:** UDP 51820
- **Intern:** 192.168.1.7:51820 (die IP des WireGuard-Containers)
Ohne diese Weiterleitung bleibt der VPN-Server von außen unsichtbar.
> [!WARNING]
> Achte darauf, dass wirklich nur **UDP** weitergeleitet wird. Eine TCP-Freigabe für den gleichen Port ist unnötig und kann zu Verbindungsproblemen führen.
### Ersten Client anlegen
Als nächstes erstellen wir einen Zugang für unser erstes Gerät in diesem Beispiel ein Smartphone.
1. Öffne im Menü den Bereich **Clients**.
2. Klicke auf **Add Client**.
3. Vergib einen eindeutigen Namen, z. B. `Smartphone`.
4. WG-Dashboard generiert automatisch:
- Ein Schlüsselpaar (Public/Private Key)
- Eine vollständige Konfigurationsdatei
- Einen QR-Code für die mobile App
Für **Smartphones** ist der QR-Code die bequemste Variante.
- WireGuard-App öffnen
- „+“ → „QR-Code scannen“
- Fertig das Profil wird automatisch angelegt.
Für **Laptops oder PCs** laden wir stattdessen die `.conf`-Datei herunter und importieren sie in den Desktop-Client.
### Erste Verbindung testen
Bevor wir testen, stellen wir sicher, dass das Smartphone **nicht im heimischen WLAN** hängt, sondern über mobile Daten oder ein anderes Netz verbunden ist.
So prüfen wir realistisch, ob die VPN-Verbindung von außen funktioniert.
1. WireGuard-App öffnen und das Profil aktivieren.
2. Innerhalb weniger Sekunden sollte die Verbindung aufgebaut sein.
3. Im WG-Dashboard erscheint der Client mit Status **connected**.
4. Test im Browser:
```
http://192.168.1.5/admin
```
Das Pi-hole-Dashboard sollte sich öffnen obwohl wir uns nicht im Heimnetz befinden.
Damit ist klar:
- Der VPN-Tunnel steht.
- DNS-Anfragen laufen über das UCC und werden vom Pi-hole gefiltert.
- Interne Oberflächen wie Admin-Tools sind sicher erreichbar.
> [!TIP]
> Über `ping 10.6.0.1` (Server-Adresse im VPN) kannst du zusätzlich prüfen, ob der Tunnel stabil reagiert.
### Split-Tunnel oder Full-Tunnel?
Ein wichtiger Punkt bei VPNs ist die Frage: Soll nur der Zugriff aufs Heimnetz laufen, oder der gesamte Internetverkehr?
- **Split-Tunnel:** Nur Anfragen ins interne UCC (192.168.x.x, 10.6.x.x) laufen durch den VPN. Internet geht direkt übers aktuelle Netz. Vorteil: schneller, weniger Last.
- **Full-Tunnel:** Der gesamte Verkehr wird durchs UCC geleitet. Vorteil: Pi-hole blockt überall, deine IP im Internet ist immer die vom Heimanschluss.
Für Content Creator ist Full-Tunnel oft praktischer: unterwegs dieselbe Umgebung wie zuhause, inklusive Blocklisten und Sicherheit.
## Ergebnis
Mit WG-Dashboard haben wir in wenigen Schritten einen WireGuard-Server eingerichtet und den ersten Client erfolgreich angebunden.
Der Vorteil: kein manuelles Bearbeiten von Konfigurationsdateien, sondern eine klare Weboberfläche, die Schlüssel, Profile und Verbindungen automatisch verwaltet.
Ab sofort greifen wir von überall auf unser UCC zu geschützt, verschlüsselt und mit allen gewohnten Vorteilen wie Pi-hole-Filterung und Zugriff auf interne Oberflächen.
👉 *Screenshot geeignet: WG-Dashboard mit aktivem Client „Smartphone“ in der Übersicht.*