Affiliate-Hinweis — Dieser Leitfaden enthält Links zu Contabo, dem VPS, den wir für unser eigenes selbstgehostetes WireGuard verwenden. Wenn Sie über unseren Link bestellen, erhalten wir eine Provision ohne zusätzliche Kosten für Sie. Wir dokumentieren nur, was wir tatsächlich betreiben.
WireGuard in Docker zu betreiben, bietet Ihnen das, was Container wertvoll macht: einen Server, den Sie in Minuten hochfahren, herunterfahren, versionieren und auf einen anderen Host verschieben können, ohne dass auf der Maschine selbst Pakete installiert werden müssen. Der Haken dabei ist, dass ein VPN-Container kein normaler Container ist — er greift auf den Netzwerk-Stack des Kernels zu, daher sind einige Flags unverzichtbar. Wenn Sie diese richtig setzen, ist ein containerisiertes WireGuard genauso schnell wie ein Bare-Metal. Wenn nicht, verbindet sich der Tunnel, leitet aber stillschweigend nichts weiter.
Dies ist der saubere, produktionsreife Weg, es zu tun.
Zuerst das eine, was die Leute bei "WireGuard in Docker" falsch machen
WireGuard ist ein Kernel-Modul. Wenn Sie "WireGuard in Docker betreiben", erfolgen die Verschlüsselung und das Routing weiterhin im Linux-Kernel des Hosts — der Container enthält nur die Benutzerwerkzeuge (wg, wg-quick) und Ihre Konfiguration. Deshalb gibt es keinen Leistungseinbruch: Der Datenpfad betritt nie den Container.
Das erklärt auch die Anforderungen. Um von innerhalb eines Containers ein Netzwerk-Interface zu erstellen und zu verwalten, benötigt dieser Container erweiterte Netzwerkfähigkeiten (NET_ADMIN), und der Host muss das Weiterleiten von Paketen erlauben (net.ipv4.ip_forward=1). Diese sind keine optionalen Sicherheitsmaßnahmen — ohne sie startet der Container entweder nicht oder kommt tot hoch.
Wählen Sie Ihr Image: linuxserver/wireguard vs. wg-easy
Zwei Images decken fast jeden Anwendungsfall ab:
linuxserver/wireguard— ein sauberer, konfigurationsgesteuerter Server. Sie definieren Peers über Umgebungsvariablen oder durch Bearbeiten von Dateien in einem gemounteten/config-Verzeichnis. Es generiert Client-Konfigurationen und QR-Codes beim ersten Lauf. Am besten, wenn Sie Infrastruktur-als-Code, viele Peers oder Ihre Einrichtung in ein privates Repo einpflegen möchten.wg-easy— WireGuard plus ein Web-Dashboard. Erstellen und widerrufen Sie Peers über einen Browser, scannen Sie QR-Codes für Telefone, sehen Sie sich Live-Übertragungsstatistiken pro Client an. Am besten für eine Handvoll Geräte und schnelles Onboarding ohne CLI.
Beide sind ausgereift und weit verbreitet. Die Entscheidung ist Dashboard-vs-Dateien, nicht Qualität.
Die docker-compose-Datei (wg-easy)
services:
wg-easy:
image: ghcr.io/wg-easy/wg-easy:latest
container_name: wg-easy
environment:
- WG_HOST=vpn.example.com # Ihre VPS-Domain oder öffentliche IP
- PASSWORD_HASH=<bcrypt-hash> # Web-UI-Login
- WG_DEFAULT_DNS=1.1.1.1
volumes:
- ./config:/etc/wireguard # Persistenz — behalten Sie dies auf dem Host
ports:
- "51820:51820/udp" # WireGuard-Daten
- "51821:51821/tcp" # Web-UI (diesen auf Ihre IP beschränken)
cap_add:
- NET_ADMIN
- SYS_MODULE
sysctls:
- net.ipv4.ip_forward=1
- net.ipv4.conf.all.src_valid_mark=1
restart: unless-stopped
Drei Zeilen erledigen die Hauptarbeit und sind die üblichen Fehlerquellen:
cap_add: NET_ADMINermöglicht es dem Container, daswg0-Interface zu verwalten. Ohne diese kann der Container den Tunnel nicht hochfahren.sysctls: net.ipv4.ip_forward=1verwandelt die Box in einen Router. Ohne diese verbindet sich der Tunnel, aber es wird kein Verkehr darüber geleitet — die häufigste Ursache für "es sagt verbunden, aber nichts funktioniert".volumes: ./configspeichert Schlüssel und Peers auf dem Host, sodass ein erneutes Erstellen nicht jeden Client löscht.
Öffnen Sie den UDP-Datenport öffentlich; beschränken Sie den TCP-Web-UI-Port auf Ihre eigene IP — lassen Sie 51821 niemals offen für das Internet.
Die Host-Checkliste (tun Sie dies, bevor Sie den Container beschuldigen)
Ein Container kann perfekt sein und dennoch nichts weiterleiten, weil die darunterliegende Schicht versagt:
- Cloud-Firewall: Öffnen Sie
51820/udpin der Sicherheitsgruppe Ihres Anbieters, nicht nur auf dem Host. Dies ist der häufigste stille Fehler auf einem VPS. - Host-Kernel-Modul: Die meisten modernen Distributionen liefern das WireGuard-Modul im Kernel (Linux 5.6+). Wenn
modprobe wireguardauf dem Host fehlschlägt, installieren Sie die Kernel-Header — der Container kann kein Modul laden, das der Host nicht hat. - DNS für Clients: Setzen Sie
WG_DEFAULT_DNS, damit Clients keine Anfragen an einen beliebigen Resolver leiten, den sie zuvor verwendet haben. Kombinieren Sie dies mit unserem WireGuard DNS-Leak-Präventionsleitfaden.
Wann ein Container die richtige Wahl ist — und wann nicht
Verwenden Sie Docker, wenn Sie andere Dienste auf derselben Box betreiben und WireGuard isoliert und reproduzierbar haben möchten, wenn Sie das Dashboard von wg-easy nutzen möchten oder wenn Sie häufig über Hosts hinweg neu bereitstellen. Das gesamte Setup wird zu einer Compose-Datei, die Sie versionieren und verschieben können.
Verzichten Sie auf Docker, wenn der VPS nichts anderes als WireGuard macht. Ein Bare-Metal apt install wireguard plus eine Konfigurationsdatei ist einfacher, hat ein bewegliches Teil weniger und ist trivial skriptbar — siehe unsere WireGuard-Konfigurationsvorlagen und den vollständigen Contabo + WireGuard Selbsthost-Walkthrough. Für eine VPN-Box mit nur einem Zweck fügt der Container eine Verpackung hinzu, die Sie nicht benötigen.
Der VPS darunter
Ob containerisiert oder nicht, WireGuard benötigt einen Host mit einer öffentlichen IP und einer anständigen Uplink-Verbindung. Ein kleiner VPS reicht aus — WireGuard ist so leicht, dass eine Instanz für 4–6 €/Monat ihren Netzwerkport lange vor der CPU auslastet. Wir betreiben unseren auf Contabo wegen des Preis-zu-Bandbreiten-Verhältnisses:
Holen Sie sich einen Contabo VPS für Ihren WireGuard-Container →
Für den vollständigen Preis-/Leistungsvergleich zwischen Anbietern siehe den günstigsten VPS für ein WireGuard VPN.
Die ehrliche Einschränkung
Docker macht WireGuard portabel, nicht sicherer. Der Container teilt den Host-Kernel, läuft mit NET_ADMIN und ist nur so abgesichert wie der Host. Er isoliert WireGuard nicht von der Maschine — jeder mit Root-Zugriff auf dem Host besitzt den Tunnel. Behandeln Sie den Container als Bereitstellungskomfort, härten Sie den Host, als ob WireGuard direkt darauf installiert wäre, und halten Sie den Web-UI-Port vom öffentlichen Internet fern. Tun Sie das, und containerisiertes WireGuard ist das sauberste Selbsthost-Setup, das es gibt.
★ Nürnberger DSGVO-Rechenzentrum · ✓ Dedizierte IPv4 inklusive · 200+ Mbps garantiert
Self-host your VPN on your own VPS → ContaboFull root access · public IPv4 · pick your region→