WireGuard stellt eine effiziente Möglichkeit dar, VPN-Verbindungen in einem Docker-Container zu ermöglichen.
Docker Basics
Docker ermöglicht es, Services oder Applikationen per Befehl in einem sogenannten Container zu starten.
Ein Container ist eine vom Betriebssystem (OS) unabhängige isolierte Umgebung:
Beim ersten Start eines Containers, lädt Docker selbstständig alle notwendigen Quellen
aus dem Internet.
Docker kann unter Windows, macOS oder einer Linux-Distribution installiert werden,
siehe auch: Docker
Dieses Setup kombiniert zwei essenzielle Komponenten: den WireGuard-Container für die grundlegende VPN-Funktionalität und WireGuard-UI für eine benutzerfreundliche Verwaltung der Verbindungen und Konfiguration.
docker-compose.yml
Die bereitgestellte Docker-Compose-Datei definiert zwei Hauptservices:
WireGuard: Nutzt das Image "linuxserver/wireguard" und ist für die hauptsächliche VPN-Verbindung zuständig. Der Container erhält Netzwerkverwaltungsrechte (NET_ADMIN) und bindet Volumes sowie Ports für die Konfiguration.
WireGuard-UI: Stellt eine benutzerfreundliche Webschnittstelle zur Verfügung, um die WireGuard-Verbindungen zu verwalten. Dieser Dienst ist vom WireGuard-Dienst abhängig und wird im gleichen Netzwerkmodus betrieben, was eine nahtlose Interaktion ermöglicht. Um Umgebungsparameter zu definieren, werden verschiedene Umgebungsvariablen genutzt, und die Protokollierung ist optimiert, um die Protokolldateigröße zu begrenzen.
Nach dem Start mit dem Befehl "docker compose up" kann WireGuuard UI über die IP-Adresse des Hosts mit dem Port 5001 aufgerufen werden, z.B. http://localhost:5001, wenn Docker auf derselben Maschine läuft. Das initiale Passwort kann in der docker-compose.yaml Datei vorgegeben werden und in der UI geändert werden.
Wireguard Server - Settings
WireGuard Post-Up- und Post-Down-Skripte werden verwendet, um Befehle nach dem Start bzw. vor dem Stoppen einer VPN-Verbindung auszuführen. Sie ermöglichen automatisierte Netzwerk- oder Systemkonfigurationen, wie das Einstellen von Firewall-Regeln oder das Hinzufügen von Routing-Einträgen, die nur aktiv sein sollen, wenn die VPN-Verbindung aktiv ist. Damit der Wireguard Docker Container den Netzwerkverkehr des Hosts weiterleitet, habe ich folgende Scripts im Einsatz:
Post Up Script
Post-Up-Skript: Konfiguriert Firewall-Regeln, um eingehenden und ausgehenden Traffic zu erlauben und Netzwerkpakete zu maskieren.
iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -d 192.168.1.0/24 -j MASQUERADE
Die IP-Range 192.168.1.0/24 sollte natürlich an das Netzwerk angepasst oder gegebenenfalls auf bestimmte IP-Adressen eingeschränkt werden.
Post Down Script
Post-Down-Skript: Entfernt die zuvor gesetzten Firewall-Regeln.
Die IP-Range sollte analog zum Post Up Script gesetzt werden.
Fazit
WireGuard vereinfacht die Verwaltung und Absicherung von Netzwerken durch den Einsatz von Docker-Containern für die VPN-Nutzung. Mit der Kombination aus einem WireGuard-Container und der benutzerfreundlichen WireGuard-UI, die über die Docker-Compose-Konfiguration integriert sind, wird der Netzwerkverkehr sicher und effizient gehandhabt, wobei Post-Up- und Post-Down-Skripte zur dynamischen Anpassung von Firewall- und Routing-Einstellungen beitragen.
Hallo
Vielen Dank für das Tutorial. Es funktioniert alles soweit und ich kann mich mit dem Client zum Server verbinden. Leider habe ich dann aber kein Internet und kann auch nicht auf mein internes Netzwerk zugreiffen... Ich bin auf einem Mac mit Monterey und Docker Desktop. Hätten Sie vielleicht einen Tipp. Logs geben leider auch nichts her...
Vielen Dank zum Voraus!
Fragen / Kommentare