Virtual Private Networking
Das VPN ist nicht mit einer DMZ zu verwechseln, Ressourcen die wir öffentlich im Internet bereitstellen wollen gehören in diese DMZ, welche in Kombination des Traefik Reverse Proxy und eines weiteren Docker Netzwerks bereit gestellt werden.
Hier bauen wir folgendes auf:
- Ein Wireguard Netzwerk für die verschlüsselte Kommunikation unserer eigenen Ressourcen - VPS, Homeserver und weitere Clients.
- Ein Wireguard Netzwerk für die verschlüsselte Kommunikation zwischen unserer VPS und dem Internet.
Beide Netzen laufen virtualisiert, unabhängig und getrennt voneinander.
Server Setup
Auf unserer VPS erstellen wir ein eigenes internes VPN Netzwerk mit Wireguard, bei dem die VPS als Server und der Homeserver sowie andere Geräte als Clients behandelt werden.
Außerdem bauen wir auf einen anderen Weg ein weiteres VPN auf, bei dem es darum geht das der VPS optional selbst eine möglichst anonyme Verbindung zu weiteren Ressourcen aus dem Internet aufbauen kann.
Internes Netzwerk
Um ein Wireguard VPN bereitzustellen nutzen wir “wg-easy”, ein Tool dass als Docker Container betrieben nicht nur einen Wireguard Server an sich sondern auch eine Web-UI dafür liefert und die Konfiguration vereinfacht.
Die compose.ymldafür sieht z.B. so aus:
services:
wg-easy:
image: ghcr.io/wg-easy/wg-easy:15
container_name: wg-easy
environment:
- WG_HOST=ÖFFENTLIHCE-IPv4-ADRESSE-DES-SERVERS
- WG_PORT=51820
- WG_DEFAULT_ADDRESS=10.8.0.x #oder ein anderer adressbereich
- WG_DEFAULT_DNS= #ja, mit absicht leer, damit die dns config der clients nicht überschrieben wird
- WG_ALLOWED_IPS=10.42.42.0/24,fdcc:ad94:bacf:61a3::/64 #zusätzlicher sicherheitsfaktor
- INSECURE=false
networks:
wg:
ipv4_address: 10.42.42.42
ipv6_address: fdcc:ad94:bacf:61a3::2a
volumes:
- ./config:/etc/wireguard # für die conifg
- /lib/modules:/lib/modules:ro # für hardwarebeschleunigte wireguard verschlüsselung
ports:
- "51820:51820/udp" #freigabe in der Firewall nicht vergessen!
- "51821:51821/tcp" #freigabe in der Firewall nicht vergessen!
restart: unless-stopped
cap_add:
- NET_ADMIN
- SYS_MODULE
sysctls:
- net.ipv4.ip_forward=1
- net.ipv4.conf.all.src_valid_mark=1
- net.ipv6.conf.all.disable_ipv6=0
- net.ipv6.conf.all.forwarding=1
- net.ipv6.conf.default.forwarding=1
networks:
wg:
driver: bridge
enable_ipv6: true
ipam:
driver: default
config:
- subnet: 10.42.42.0/24
- subnet: fdcc:ad94:bacf:61a3::/64
Damit sich die Clients später auch verbinden können, gegen wir in der Firewall unserer VPS den Wireguard Port 51820 für TCP und den Port 51821 für UDP frei.
Homeserver Setup
Auf dem Homeserver setzen wir den Wireguard Client in Form eines Docker Containers auf.
compose.yml :
services:
wireguard:
image: lscr.io/linuxserver/wireguard:latest
container_name: wireguard
cap_add:
- NET_ADMIN
- SYS_MODULE
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/Berlin
volumes:
- ./config:/config
- /lib/modules:/lib/modules:ro
network_mode: host
restart: unless-stopped
Weitere Clients
Linux
Für Debian basierende Distributionen
client.conf :
[Interface]
PrivateKey = PRIVATE_KEY
Address = 10.8.0.X/24
MTU = 1420
DNS =
[Peer]
PublicKey = PUBLIC_KEY
PresharedKey = PRESHARED_KEY
AllowedIPs = 10.42.42.0/24,10.8.0.0/24,fdcc:ad94:bacf:61a3::/64
PersistentKeepalive = 30
Endpoint = VPS_PUBLIC_IPv4:51820
Quellen und Links
- Wireguard Server “wg-easy”
- Wireguard Docker Client von linuxserver.io
- \