Zum Inhalt

Eigenen WireGuard-Zugang mit wg-easy per Docker einrichten

Veröffentlicht am 22. August 2026 · Geschätzte Lesezeit: 4 Minuten

Mit wg-easy betreibst du einen eigenen WireGuard-VPN-Server und verwaltest Geräte über eine Weboberfläche. So erreichst du dein Heimnetz verschlüsselt von unterwegs, ohne Verwaltungsports öffentlich freizugeben. Plane für Einrichtung und Test etwa 30 Minuten ein.

Voraussetzungen

  • Ein Linux-Server mit Docker und Docker Compose
  • Eine öffentliche IP-Adresse oder ein DNS-Name für deinen Internetanschluss
  • Zugriff auf die Portfreigaben deines Routers
  • Der UDP-Port 51820 frei und ein SSH-Zugang zum Server

1. Arbeitsordner anlegen

Führe diesen Befehl auf dem Docker-Server aus. Er erstellt den Projektordner und wechselt direkt hinein:

mkdir -p ~/wg-easy && cd ~/wg-easy

2. Compose-Datei erstellen

Lege im Ordner ~/wg-easy eine Datei namens compose.yaml mit diesem Inhalt an:

volumes:
  etc_wireguard:
    name: wg-easy-data

services:
  wg-easy:
    image: ghcr.io/wg-easy/wg-easy:15
    container_name: wg-easy
    restart: unless-stopped
    environment:
      INSECURE: "true"
    networks:
      wg:
        ipv4_address: 10.42.42.42
        ipv6_address: fdcc:ad94:bacf:61a3::2a
    volumes:
      - etc_wireguard:/etc/wireguard
      - /lib/modules:/lib/modules:ro
    ports:
      - "51820:51820/udp"
      - "127.0.0.1:51821:51821/tcp"
    cap_add:
      - NET_ADMIN
      - SYS_MODULE
    sysctls:
      - net.ipv4.ip_forward=1
      - net.ipv4.conf.all.src_valid_mark=1
      - net.ipv6.conf.all.disable_ipv6=0
      - net.ipv6.conf.all.forwarding=1
      - net.ipv6.conf.default.forwarding=1

networks:
  wg:
    driver: bridge
    enable_ipv6: true
    ipam:
      driver: default
      config:
        - subnet: 10.42.42.0/24
        - subnet: fdcc:ad94:bacf:61a3::/64

Der UDP-Port 51820 nimmt VPN-Verbindungen an. Die Weboberfläche auf Port 51821 ist nur an 127.0.0.1 gebunden und damit nicht direkt aus LAN oder Internet erreichbar. INSECURE erlaubt hier HTTP ausschließlich durch den späteren lokalen SSH-Tunnel.

3. Container starten

Starte wg-easy auf dem Docker-Server:

docker compose up -d

Prüfe danach den Zustand:

docker compose ps

Bei einem Fehler zeigen die letzten Protokollmeldungen meist die Ursache:

docker compose logs --tail=100 wg-easy

4. Sicheren Zugang zur Weboberfläche öffnen

Führe den folgenden Befehl auf deinem Computer aus, nicht auf dem Server. Ersetze <ssh-benutzer> durch deinen Linux-Benutzernamen und <server-ip> durch die interne IP-Adresse des Docker-Servers:

ssh -L 51821:127.0.0.1:51821 <ssh-benutzer>@<server-ip>

Lass das Terminal geöffnet und rufe im Browser http://127.0.0.1:51821 auf. Der Browserzugriff läuft dadurch innerhalb der verschlüsselten SSH-Verbindung.

5. Administrator und Serveradresse einrichten

Lege im Assistenten einen eigenen Administratornamen und ein langes, einmaliges Passwort fest. Wähle bei einer neuen Installation No, wenn nach einer vorhandenen Konfiguration gefragt wird.

Trage bei Host deine öffentliche IP-Adresse oder deinen DNS-Namen ein. Bei Port bleibt 51820, sofern du ihn nicht bewusst geändert hast. Aktiviere danach unter Account die Zwei-Faktor-Anmeldung und bewahre die Wiederherstellungsdaten außerhalb des Servers auf.

6. Router und Firewall konfigurieren

Leite im Router ausschließlich UDP 51820 an <server-ip> weiter. Ersetze <server-ip> durch die feste interne IP des Docker-Servers. Bei einer Host-Firewall mit UFW öffnest du nur diesen UDP-Port:

sudo ufw allow 51820/udp

Verwaltungsport nicht weiterleiten

Leite TCP 51821 niemals im Router weiter. Die Weboberfläche bleibt über den SSH-Tunnel erreichbar. Für eine öffentliche Oberfläche wäre stattdessen ein korrekt abgesicherter HTTPS-Reverse-Proxy nötig.

7. Erstes Gerät verbinden und testen

Erstelle in wg-easy einen Client mit einem eindeutigen Namen, zum Beispiel handy. Importiere den angezeigten QR-Code in die offizielle WireGuard-App. Behandle QR-Code und heruntergeladene Konfigurationsdatei wie ein Passwort.

Deaktiviere am Handy testweise WLAN, aktiviere den neuen WireGuard-Tunnel und rufe eine interne Seite auf. Prüfe anschließend in wg-easy, ob beim Client ein aktueller Handshake und übertragene Daten erscheinen.

8. Konfiguration sichern und wiederherstellen

Stoppe wg-easy kurz, damit die SQLite-Datenbank und Schlüssel während des Backups unverändert bleiben:

docker compose stop wg-easy

Sichere das benannte Volume in ein verschlüsselbar zu verwahrendes Archiv:

docker run --rm -v wg-easy-data:/data:ro -v "$PWD:/backup" alpine sh -c 'tar czf /backup/wg-easy-backup-$(date +%F-%H%M).tar.gz -C /data .'

Starte den Dienst wieder:

docker compose start wg-easy

Das Archiv enthält private VPN-Schlüssel und muss vertraulich behandelt werden. Für den Rückbau genügt docker compose down; verwende nicht -v, solange du das Volume behalten möchtest.

9. Typische Fehler beheben

  • Kein Handshake: Prüfe öffentliche Hostadresse, UDP-Portfreigabe und Firewall.
  • Mobil verbunden, aber Heimnetz nicht erreichbar: Kontrolliere die erlaubten IP-Netze des Clients und mögliche Überschneidungen mit dem fremden WLAN.
  • Weboberfläche nicht erreichbar: Der SSH-Tunnel muss geöffnet bleiben und der lokale Port 51821 darf nicht bereits belegt sein.
  • SYS_MODULE-Fehler: Prüfe, ob der Host WireGuard unterstützt und /lib/modules vorhanden ist.
  • Gerät verloren: Deaktiviere oder lösche den zugehörigen Client sofort, damit dessen privater Schlüssel keinen Zugriff mehr erhält.

10. Quellen und Videos

Fertig

Dein WireGuard-Zugang läuft jetzt, während die Verwaltung nur über den SSH-Tunnel erreichbar bleibt. Die Funktionsprüfung ist erfolgreich, wenn das Mobilgerät über das Mobilfunknetz einen aktuellen Handshake erhält und eine interne Seite öffnet.