WireGuard ist ein modernes VPN-Protokoll, das einfacher und schneller als OpenVPN ist. Es ist seit 2020 im Linux-Kernel integriert.
Vorteile von WireGuard
- Schnell: Bessere Performance als OpenVPN/IPsec
- Einfach: Minimale Konfiguration
- Modern: Aktuelle Kryptographie
- Schlank: ~4000 Zeilen Code (vs. 100.000+ bei OpenVPN)
- Kernel-Integration: Seit Linux 5.6 im Kernel
Installation
Ubuntu/Debian
apt update
apt install wireguardCentOS/AlmaLinux
dnf install epel-release elrepo-release
dnf install kmod-wireguard wireguard-toolsKernel-Modul laden
modprobe wireguardServer einrichten
Schlüsselpaar generieren
cd /etc/wireguard
umask 077
wg genkey | tee privatekey | wg pubkey > publickeyServer-Konfiguration
Erstellen Sie /etc/wireguard/wg0.conf:
[Interface]
PrivateKey = SERVER_PRIVATE_KEY
Address = 10.0.0.1/24
ListenPort = 51820
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
[Peer]
# Client 1
PublicKey = CLIENT1_PUBLIC_KEY
AllowedIPs = 10.0.0.2/32Ersetzen Sie:
SERVER_PRIVATE_KEYmit Inhalt von/etc/wireguard/privatekeyeth0mit Ihrem Netzwerk-Interface
IP-Forwarding aktivieren
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -pFirewall
ufw allow 51820/udpWireGuard starten
wg-quick up wg0
systemctl enable wg-quick@wg0Status prüfen
wg showClient einrichten
Linux-Client
Schlüssel generieren:
cd /etc/wireguard
umask 077
wg genkey | tee privatekey | wg pubkey > publickeyClient-Konfiguration /etc/wireguard/wg0.conf:
[Interface]
PrivateKey = CLIENT_PRIVATE_KEY
Address = 10.0.0.2/24
DNS = 1.1.1.1
[Peer]
PublicKey = SERVER_PUBLIC_KEY
Endpoint = server-ip:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25Client zum Server hinzufügen:
# Auf dem Server
wg set wg0 peer CLIENT_PUBLIC_KEY allowed-ips 10.0.0.2/32Windows-Client
1. WireGuard von wireguard.com/install installieren 2. "Tunnel hinzufügen" → "Leeren Tunnel hinzufügen" 3. Konfiguration eintragen 4. Aktivieren
macOS-Client
1. WireGuard aus dem App Store 2. "Tunnel aus Datei importieren" oder manuell erstellen
Android/iOS
1. WireGuard App installieren 2. "+" → "Von Datei importieren" oder QR-Code scannen
Weitere Clients hinzufügen
Für jeden Client:
1. Schlüsselpaar generieren 2. Eindeutige IP zuweisen (10.0.0.3, 10.0.0.4, ...) 3. Peer auf Server hinzufügen
Schnelles Hinzufügen
# Client-Keys generieren
CLIENT_PRIV=$(wg genkey)
CLIENT_PUB=$(echo $CLIENT_PRIV | wg pubkey)
# Auf Server hinzufügen
wg set wg0 peer $CLIENT_PUB allowed-ips 10.0.0.3/32
# Client-Config ausgeben
cat << EOF
[Interface]
PrivateKey = $CLIENT_PRIV
Address = 10.0.0.3/24
DNS = 1.1.1.1
[Peer]
PublicKey = $(cat /etc/wireguard/publickey)
Endpoint = $(curl -s ifconfig.me):51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25
EOFQR-Code für Mobile
apt install qrencode
qrencode -t ansiutf8 < client.confKonfigurationsoptionen
AllowedIPs
0.0.0.0/0- Gesamter Traffic über VPN (Full Tunnel)10.0.0.0/24- Nur VPN-Netzwerk (Split Tunnel)10.0.0.0/24, 192.168.1.0/24- VPN und bestimmte Netze
PersistentKeepalive
Wichtig für Clients hinter NAT:
PersistentKeepalive = 25Sendet alle 25 Sekunden ein Paket, um die Verbindung offen zu halten.
DNS
DNS-Server für Clients:
DNS = 1.1.1.1, 1.0.0.1Verwaltungsbefehle
# Interface starten
wg-quick up wg0
# Interface stoppen
wg-quick down wg0
# Status anzeigen
wg show
# Peer hinzufügen (ohne Neustart)
wg set wg0 peer PUBLIC_KEY allowed-ips 10.0.0.5/32
# Peer entfernen
wg set wg0 peer PUBLIC_KEY remove
# Konfiguration speichern
wg-quick save wg0Automatisiertes Setup
Mit dem wg-easy Docker-Container:
docker run -d \
--name wg-easy \
-e WG_HOST=ihre-domain.de \
-e PASSWORD=admin-passwort \
-v ~/.wg-easy:/etc/wireguard \
-p 51820:51820/udp \
-p 51821:51821/tcp \
--cap-add NET_ADMIN \
--cap-add SYS_MODULE \
--sysctl net.ipv4.ip_forward=1 \
--restart unless-stopped \
ghcr.io/wg-easy/wg-easyWeb-Interface unter http://server:51821.
Site-to-Site VPN
Zwei Netzwerke verbinden:
Server A (Netz 192.168.1.0/24)
[Interface]
PrivateKey = SERVER_A_PRIVATE
Address = 10.0.0.1/24
ListenPort = 51820
[Peer]
PublicKey = SERVER_B_PUBLIC
Endpoint = server-b.example.com:51820
AllowedIPs = 10.0.0.2/32, 192.168.2.0/24Server B (Netz 192.168.2.0/24)
[Interface]
PrivateKey = SERVER_B_PRIVATE
Address = 10.0.0.2/24
ListenPort = 51820
[Peer]
PublicKey = SERVER_A_PUBLIC
Endpoint = server-a.example.com:51820
AllowedIPs = 10.0.0.1/32, 192.168.1.0/24Troubleshooting
Keine Verbindung
# Server erreichbar?
ping server-ip
nc -vzu server-ip 51820
# WireGuard läuft?
wg show
# Firewall?
ufw status
iptables -LKein Internet über VPN
# IP-Forwarding aktiv?
cat /proc/sys/net/ipv4/ip_forward
# NAT-Regel vorhanden?
iptables -t nat -LHandshake schlägt fehl
- Public/Private Keys überprüfen
- Endpoint-Adresse prüfen
- Firewall Port 51820/UDP
WireGuard vs. OpenVPN
| Aspekt | WireGuard | OpenVPN | |--------|-----------|---------| | Geschwindigkeit | Schneller | Langsamer | | Konfiguration | Einfach | Komplex | | Code | ~4.000 Zeilen | ~100.000 Zeilen | | Protokoll | UDP | UDP oder TCP | | Verschlüsselung | ChaCha20, Poly1305 | Flexibel (OpenSSL) | | Kernel-Support | Ja (seit 5.6) | Nein |
Fazit
WireGuard ist die moderne Wahl für VPN. Die Einrichtung ist deutlich einfacher als bei OpenVPN, und die Performance ist besser. Für die meisten Anwendungsfälle ist WireGuard die bessere Wahl.