WireGuard in 5 Minuten: VPN mit WG-Easy via Docker aufsetzen
Manchmal braucht es einfach eine schnelle, zuverlässige und einfache VPN-Lösung – ohne sich durch 50 Seiten Doku zu kämpfen. Genau hier kommt WG-Easy ins Spiel. Mit dieser schlanken Oberfläche kann man WireGuard in wenigen Minuten betriebsbereit machen. In diesem Beitrag zeige ich, wie man WG-Easy mit einer simplen docker-compose.yml betreibt – sicher, sauber und wartbar.
Voraussetzungen
- Ein Server mit Docker & Docker Compose
- Externe Domain (z. B.
vpn.domain.tld) - UDP-Port 51820 geöffnet in der Firewall
- Ein wenig Grundverständnis für WireGuard & Netzwerke
Der docker-compose Stack
version: "3.8"
services:
wg-easy:
image: ghcr.io/wg-easy/wg-easy
container_name: wg-easy
environment:
- WG_HOST=vpn.domain.tld
- PASSWORD_HASH=
- WG_DEFAULT_DNS=9.9.9.9
labels:
- "com.centurylinklabs.watchtower.enable=true"
volumes:
- /opt/docker/volumes/wireguard/data:/etc/wireguard
networks:
- proxy
ports:
- "51820:51820/udp"
restart: always
cap_add:
- NET_ADMIN
- SYS_MODULE
sysctls:
- net.ipv4.ip_forward=1
- net.ipv4.conf.all.src_valid_mark=1
networks:
proxy:
external: true
Wichtige Konfigurationsdetails
| Variable | Bedeutung |
|---|---|
WG_HOST |
Deine externe Domain oder IP-Adresse für den VPN-Server. |
PASSWORD_HASH |
Ein Hash für das Webinterface (mehr dazu unten). |
WG_DEFAULT_DNS |
DNS-Server für Clients – z. B. Quad9 mit 9.9.9.9 |
cap_add & sysctls |
Notwendig für Routing und WireGuard-Funktionalität im Container. |
Passwort für das Webinterface setzen
Das Webinterface von WG-Easy ist durch ein Login geschützt. Du musst den Passwort-Hash manuell erzeugen, z. B. mit:
docker run --rm -e PASSWORD=deinPasswort ghcr.io/wg-easy/wg-easy hash
Datenpersistenz
Die Konfiguration und alle Client-Files werden im Volume /opt/docker/volumes/wireguard/data gespeichert. So bleibt alles erhalten – auch nach einem Neustart oder Update.
Automatische Updates
Dank des Labels
- "com.centurylinklabs.watchtower.enable=true"
wird der Container automatisch mit Watchtower aktuell gehalten – sofern Watchtower auf dem Host läuft.
Integration in ein bestehendes Reverse-Proxy-Netzwerk
Der Container hängt im Beispiel am externen Docker-Netzwerk proxy. Dies erlaubt ggf. später die Einbindung in einen Reverse Proxy (z. B. Traefik oder Nginx-Proxy-Manager), etwa um das Webinterface via HTTPS verfügbar zu machen.
Wichtig: Der VPN-Traffic selbst läuft weiterhin rein über UDP Port 51820!