Einleitung
VPNs werden immer beliebter, um die Privatsphäre zu schützen. Ich möchte hier ein kurzes Tutorial zu einem VPN auf wireguard-Basis in einem Docker-Contaier geben.
Kernel Modules
Bevor man Wireguard (mit diesem Docker Image) in einem Docker Container laufen lassen kann, muss man zuerst die Kernel Header und das Kernel Modul installieren. Unter Manjaro geht das so:
$ sudo pacman -S linux-headers
Anmerkung: Es wird nun gefragt, welchen Header er installieren soll, man wählt hier den Header für die Version des installieren Linux Kernels aus. Wenn man gerade nicht weiß, welche Version man installiert hat, kann man das über diesen Befehl herausfinden: uname -r
Als nächstes installiert man das Kernel Modul über diesen Befehl:
sudo pacman -S dkms wireguard-dkms wireguard-tools
Wireguard im Docker Container
Als erstes sucht man sich einen Ordner und erstellt in diesem als Beispielkonfiguration (updated) folgende docker-compose.yml
:
version: "2"
services:
vpn:
image: cmulk/wireguard-docker
container_name: wireguard
volumes:
- ./etc-wireguard:/etc/wireguard
networks:
- net
ports:
- port-external:port-internal/udp
restart: unless-stopped
cap_add:
- NET_ADMIN
- SYS_MODULE
environment:
- IPTABLES_MASQ=1
wg-gen-web:
image: vx3r/wg-gen-web:latest
container_name: wg-gen-web
restart: unless-stopped
ports:
- port-external:8080
environment:
- WG_CONF_DIR=/data
- WG_INTERFACE_NAME=wg0.conf
- SMTP_HOST=mailserver.example.com
- SMTP_PORT=465
- SMTP_USERNAME=mail@example.com
- SMTP_PASSWORD=password
- SMTP_FROM=Wg Gen Web <mail@example.com>
- OAUTH2_PROVIDER_NAME=oauth2oidc
- OAUTH2_PROVIDER=https://gitlab.example.com
- OAUTH2_CLIENT_ID=*
- OAUTH2_CLIENT_SECRET=*
- OAUTH2_REDIRECT_URL=https://wireguard.example.com
volumes:
- ./etc-wireguard:/data
networks:
net:
Updated (automatische Konfiguration über das Webinterface)
Als nächstes erstellt man zwei Dateien, damit sich bei Änderungen über das Webinterface der wireguard
docker container neu startet.
-
sudo nano /etc/systemd/system/wg-gen-web.path
[Unit] Description=Watch etc-wireguard for changes [Path] PathModified=/path/of/docker-wireguard-config/etc-wireguard [Install] WantedBy=multi-user.target
-
sudo nano /etc/systemd/system/wg-gen-web.service
[Unit] Description=Restart WireGuard Docker After=network.target [Service] Type=oneshot ExecStart=/usr/bin/docker restart wireguard [Install] WantedBy=multi-user.target
-
sudo systemctl daemon-reload
nginx Konfiguration
sudo nano /etc/nginx/sites-enabled/wireguard.example.com.conf
Hier den Reverse Proxy je nach vergebener Portnummer konfigurieren.
Archiv (manuelle Konfiguration ohne Webinterface)
Als nächstes erstellt man über mkdir etc-wireguard
den entsprechenden Ordner für die Konfiguarationsdateien.
server.conf
[Interface]
Address = 192.168.20.1/24
PrivateKey = <server-private-key>
ListenPort = 7777
[Peer]
PublicKey = <client-public-key>
AllowedIPs = 192.168.20.2
*client.config
[Interface]
Address = 192.168.20.2/24
PrivateKey = <client-private-key>
ListenPort = 0 #needed for some clients to accept the config
[Peer]
PublicKey = <server-public-key>
Endpoint = 24.134.225.237:7777
AllowedIPs = 0.0.0.0/0,::/0 #makes sure ALL traffic routed through VPN
PersistentKeepalive = 25
Die entsprechenden "private-keys" und "public-keys" lassen sich zum Beispiel über die Android-App oder die iOS-App. Jeweils zwei Konfigurationen anfangen zu erstellen und dort die entsprechenden Schlüssel generieren. Das ganze macht man zweimal, einmal für den Server und einmal für den Client und modifiziert dann die jeweiligen Konfiguarationsdateien. Die fertige Client-Konfiguration lässt sich dann einfach importieren.
Zum Schluss wechselt man wieder in den Oder der "docker-compose.yml" und startet den Conatainer per sudo docker-compose up -d
Quellen
- Kernel Module (Stand: 25.07.2019)
- Wireguard (Stand: 25.07.2019)
- Wireguard Docker Container (Stand: 25.07.2019)