WireGuard VPN-Server in Docker betreiben
WireGuard stellt eine effiziente Möglichkeit dar, VPN-Verbindungen in einem Docker-Container zu ermöglichen. Docker Basics
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
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.
version: "3"
services:
wireguard:
image: linuxserver/wireguard:v1.0.20210914-ls7
container_name: wireguard
cap_add:
- NET_ADMIN
volumes:
- ./config:/config
ports:
- "5001:5000"
- "51820:51820/udp"
wireguard-ui:
image: ngoduykhanh/wireguard-ui:latest
container_name: wireguard-ui
depends_on:
- wireguard
cap_add:
- NET_ADMIN
network_mode: service:wireguard
environment:
- SENDGRID_API_KEY
- EMAIL_FROM_ADDRESS
- EMAIL_FROM_NAME
- SESSION_SECRET
- WGUI_USERNAME=admin
- WGUI_PASSWORD=password
- WG_CONF_TEMPLATE
- WGUI_MANAGE_START=true
- WGUI_MANAGE_RESTART=true
logging:
driver: json-file
options:
max-size: 50m
volumes:
- ./db:/app/db
- ./config:/etc/wireguard
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.
iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -d 192.168.1.0/24 -j MASQUERADE
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.
{{percentage}} % positiv