VPN Clients: OpenVPN & WireGuard (Artikel 016)
Vergleich und Konfiguration von VPN-Clients unter Linux. Deep-Dive in das moderne WireGuard-Protokoll und den bewährten OpenVPN-Standard für Enterprise-Verbindungen.
# VPN Clients: Sicherer Remote-Zugriff für Server & Admins
TL;DR / Management Summary Virtual Private Networks (VPNs) sind die Lebensader für die sichere Server-Wartung in hybriden Architekturen. Während OpenVPN der bewährte Standard mit massiven Konfigurationsmöglichkeiten ist, hat WireGuard die Szene durch extreme Geschwindigkeit, minimalistischen Code und native Kernel-Integration revolutioniert. Empfehlung: WireGuard für Site-to-Site und High-Performance Tunnel; OpenVPN für komplexe Auth-Szenarien (LDAP/MFA) oder wenn nur TCP/Port 443 erlaubt ist.
# 1. Einführung & Architektur
Wie Tunnel gegraben werden.
# OpenVPN (User-Space)
OpenVPN basiert auf SSL/TLS. Da es im User-Space läuft, muss jedes Paket zwischen Kernel und User-Space kopiert werden (Context Switches), was CPU-Overhead erzeugt.
# WireGuard (Kernel-Space)
WireGuard läuft direkt als Kernel-Modul. Es nutzt “Crypto Routing”, wobei öffentliche Schlüssel direkt an IP-Adressen gebunden sind. Es ist zustandslos (stateless) und verbraucht fast keinen Strom/CPU im Leerlauf.
graph LR
subgraph "Local Server"
A[App] --> B[Virtual Interface wg0/tun0]
end
B -->|Encrypted UDP/TCP| C[Internet]
C -->|Encrypted| D[Remote Gateway]
D -->|Decrypted| E[Internal Network]
# 2. WireGuard: Der moderne Champion
Einfachheit als Sicherheitsmerkmal.
# Installation & Key-Setup
sudo apt install wireguard
# Keys generieren
wg genkey | tee privatekey | wg pubkey > publickey
# Konfiguration (/etc/wireguard/wg0.conf)
[Interface]
PrivateKey = <Inhalt von privatekey>
Address = 10.0.0.2/24
DNS = 10.0.0.1
[Peer]
PublicKey = <Server PublicKey>
Endpoint = vpn.company.com:51820
AllowedIPs = 10.0.0.0/24, 172.16.0.0/16
PersistentKeepalive = 25
# Management
# Tunnel starten
sudo wg-quick up wg0
# Status prüfen
sudo wg show
# 3. OpenVPN: Das Enterprise-Urgestein
Vielseitigkeit für jede Firewall.
# Installation
sudo apt install openvpn
# Konfiguration (/etc/openvpn/client/office.conf)
Normalerweise erhält man eine .ovpn Datei. Diese kopiert man nach /etc/openvpn/client/ (umbenannt zu .conf).
client
dev tun
proto udp
remote vpn.company.com 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert client.crt
key client.key
remote-cert-tls server
cipher AES-256-GCM
verb 3
# Management
# Starten via Systemd
sudo systemctl enable --now openvpn-client@office
# 4. Day-2 Operations: Routing & DNS
Die VPN-Fallen vermeiden.
# Split-Tunneling
Vermeiden Sie es, den gesamten Traffic (“Default Gateway”) durch das VPN zu jagen, wenn nur interne Ressourcen gebraucht werden.
- WireGuard: Steuerung via
AllowedIPs. - OpenVPN: In der Config
route-nopullsetzen und Routen manuell hinzufügen (route 10.0.0.0 255.255.255.0).
# DNS-Leaks verhindern
Stellen Sie sicher, dass interne Domains via VPN-DNS aufgelöst werden (siehe Artikel 009: systemd-resolved).
# 5. Troubleshooting & “War Stories”
Wenn der Tunnel einbricht.
# Story 1: “Der MTU-Albtraum”
Symptom: SSH geht, aber ls -l oder große Webseiten hängen im VPN.
Ursache: VPN-Header fressen Platz. Ein Standard-Ethernet Paket (1500 Bytes) passt plus VPN-Header nicht mehr durch die Leitung (Fragmentation).
Lösung: MTU senken.
- WireGuard:
MTU = 1280in der[Interface]Sektion. - OpenVPN:
mssfix 1200hinzufügen.
# Story 2: “UDP-Blocking in Hotels”
Symptom: VPN verbindet sich nicht in öffentlichen WLANs.
Ursache: Hotels blockieren oft alles außer TCP 80/443. WireGuard nutzt nur UDP.
Lösung: Nutzen Sie OpenVPN im TCP-Modus auf Port 443 als Fallback. WireGuard kann mit Tools wie udp2raw getunnelt werden (komplex!).
# 6. Fazit & Empfehlung
- Server-to-Server: WireGuard. Immer.
- Admins / Roadwarrior: WireGuard (wenn möglich), sonst OpenVPN.
- Sicherheit: WireGuard hat eine viel kleinere Angriffsfläche (4.000 Zeilen Code vs. 100.000+ bei OpenVPN).
# Anhang: Cheatsheet
| Aufgabe | WireGuard | OpenVPN |
|---|---|---|
| Status prüfen | wg show |
systemctl status openvpn-client@* |
| Logs | journalctl -f |
/var/log/openvpn.log |
| Performance | ~95% Line-Rate | ~20-40% Line-Rate |
| Port (Standard) | 51820 (UDP) | 1194 (UDP) |