Installation von Wireguard auf einem Stratoserver
Da Strato durch die Virtualisierung einige Dinge gesperrt hat, muss hier vom im Netz üblicherweise beschriebenen Installationsweg abgewichen werden.
1. Firewall-Konfiguration (UFW)
Da wg-easy im Host-Netzwerkmodus betrieben wird, steuert Docker die Ports nicht automatisch. Die Ports für den verschlüsselten VPN-Tunnel (UDP) und das Web-Interface (TCP) müssen manuell in UFW freigegeben werden.
sudo ufw allow 51820/udp
sudo ufw allow 51821/tcp
2. Verzeichnisstruktur und Docker-Konfiguration
Erstelle das dedizierte Installationsverzeichnis für das Docker-Projekt:
mkdir -p /opt/wg-easy
cd /opt/wg-easy
Passwort-Hash generieren: Bevor wir die Konfiguration anlegen, brauchst du ein sicheres Administrator-Passwort für das Web-Interface. Da Passwörter niemals im Klartext in einer Konfigurationsdatei stehen sollten, generieren wir vorab einen bcrypt-Hash deines Wunschpassworts (ersetze DEIN_PASSWORT durch dein echtes Passwort):
docker run --rm ghcr.io/wg-easy/wg-easy wgeasy hash DEIN_PASSWORT
Kopiere dir den ausgegebenen Hash (beginnt meist mit $2b$12$...). Wichtig: In der folgenden Datei musst du vor jedes $-Zeichen ein zweites $-Zeichen setzen (also $$2b$$12$$...), damit Docker Compose es nicht versehentlich als Variable interpretiert!
Erstelle in diesem Ordner die Konfigurationsdatei docker-compose.yml:
nano docker-compose.yml
Füge die folgende Konfiguration ein.
Hinweis zur Architektur: Um eine reibungslose Kommunikation mit dem auf dem Host laufenden Nginx-Server zu ermöglichen, wird network_mode: "host" verwendet. Dadurch wird das WireGuard-Interface direkt an das Host-Betriebssystem gekoppelt. Ein ports:-Block darf in dieser Konfiguration nicht existieren.
version: '3.8'
services:
wg-easy:
container_name: wg-easy
network_mode: "host"
image: ghcr.io/wg-easy/wg-easy
environment:
- WG_HOST=smart.xplore-dna.de //durch deine domain ersetzen
- PASSWORD_HASH=$$2b$$12$$aBcDeFgHiJkLmNoPqRsTu.VwXyZ0123456789aBcDeFgHiJkLmNoP // Durch deinen Hash ersetzen
- WG_DEFAULT_ADDRESS=10.8.0.x
- WG_DEFAULT_DNS=1.1.1.1
- WG_QUICK_USERSPACE_IMPLEMENTATION=wireguard-go
volumes:
- /root/.wg-easy:/etc/wireguard
devices:
- /dev/net/tun:/dev/net/tun
restart: unless-stopped
privileged: true
3. Deployment des Containers
Starte den Container aus dem Verzeichnis /opt/wg-easy heraus im Hintergrund:
docker compose up -d
Das Web-Interface zur Verwaltung der VPN-Clients ist nun über Port 51821 (z. B. http://smart.xplore-dna.de:51821) erreichbar. Logge dich mit dem Administrator-Passwort im Klartext ein, um neue Endgeräte (Peers) anzulegen und deren Konfigurationsdateien herunterzuladen.
4. Nginx Reverse Proxy Anpassung
Durch den Wechsel des Containers in den host-Netzwerkmodus teilt sich WireGuard die Netzwerkinfrastruktur direkt mit dem Host. Nginx kann nun Datenpakete ohne zusätzliche Docker-Brücken direkt in das VPN-Subnetz (10.8.0.x) leiten.
Suche die entsprechende Nginx-Konfigurationsdatei für die Domain unter /etc/nginx/sites-available/ oder /etc/nginx/conf.d/:
# Beispiel zur Identifikation der Datei
grep -rl "smart.xplore-dna.de" /etc/nginx/
Öffne die gefundene Datei und passe den proxy_pass innerhalb des location /-Blocks an. Ersetze die alte IP-Adresse durch die neue, feste WireGuard-IP-Adresse des Ziel-Clients (z. B. 10.8.0.2 für das Home-Assistant-Gerät):
server {
<span class="hljs-attribute">server_name</span> smart.xplore-dna.de;
<span class="hljs-comment"># ... (SSL- und Standardkonfigurationen bleiben unverändert)</span>
<span class="hljs-attribute">location</span> / {
<span class="hljs-comment"># proxy_pass http://100.x.x.x:8123; # Alte IP (z.B. Tailscale) entfernen</span>
<span class="hljs-attribute">proxy_pass</span> http://10.8.0.2:8123; <span class="hljs-comment"># Neue WireGuard-IP des Clients eintragen</span>
<span class="hljs-comment"># Unverzichtbare Header für WebSockets (Home Assistant) und IP-Weiterleitung</span>
<span class="hljs-attribute">proxy_set_header</span> Host $host;
<span class="hljs-attribute">proxy_set_header</span> X-Real-IP $remote_addr;
<span class="hljs-attribute">proxy_set_header</span> X-Forwarded-For $proxy_add_x_forwarded_for;
<span class="hljs-attribute">proxy_set_header</span> X-Forwarded-Proto $scheme;
<span class="hljs-attribute">proxy_set_header</span> Upgrade $http_upgrade;
<span class="hljs-attribute">proxy_set_header</span> Connection <span class="hljs-string">"upgrade"</span>;
}
}
Überprüfe die Nginx-Konfiguration vor der Übernahme auf Syntaxfehler:
nginx -t
Wenn der Test erfolgreich verläuft (syntax is ok / test is successful), weise Nginx an, die Konfiguration ohne Verbindungsunterbrechung neu einzulesen:
systemctl reload nginx
Wenn die Installation Erfolgreich verlaufen ist, kann die Wireguard Oberfläche nun unter deine-domain.de:51821 erreicht werden und du dich dort mit deinem Passwort einloggen.