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.

Bash
sudo ufw allow 51820/udp
sudo ufw allow 51821/tcp

2. Verzeichnisstruktur und Docker-Konfiguration

Erstelle das dedizierte Installationsverzeichnis für das Docker-Projekt:

Bash
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):

Bash
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:

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

YAML
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:

Bash
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/:

Bash
# 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):

Nginx
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:

Bash
nginx -t

Wenn der Test erfolgreich verläuft (syntax is ok / test is successful), weise Nginx an, die Konfiguration ohne Verbindungsunterbrechung neu einzulesen:

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

Last modified: Friday, 22 May 2026, 12:20 PM