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 wireguard

CentOS/AlmaLinux

dnf install epel-release elrepo-release
dnf install kmod-wireguard wireguard-tools

Kernel-Modul laden

modprobe wireguard

Server einrichten

Schlüsselpaar generieren

cd /etc/wireguard
umask 077
wg genkey | tee privatekey | wg pubkey > publickey

Server-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/32

Ersetzen Sie:

  • SERVER_PRIVATE_KEY mit Inhalt von /etc/wireguard/privatekey
  • eth0 mit Ihrem Netzwerk-Interface

IP-Forwarding aktivieren

echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p

Firewall

ufw allow 51820/udp

WireGuard starten

wg-quick up wg0
systemctl enable wg-quick@wg0

Status prüfen

wg show

Client einrichten

Linux-Client

Schlüssel generieren:

cd /etc/wireguard
umask 077
wg genkey | tee privatekey | wg pubkey > publickey

Client-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 = 25

Client zum Server hinzufügen:

# Auf dem Server
wg set wg0 peer CLIENT_PUBLIC_KEY allowed-ips 10.0.0.2/32

Windows-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
EOF

QR-Code für Mobile

apt install qrencode

qrencode -t ansiutf8 < client.conf

Konfigurationsoptionen

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 = 25

Sendet 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.1

Verwaltungsbefehle

# 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 wg0

Automatisiertes 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-easy

Web-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/24

Server 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/24

Troubleshooting

Keine Verbindung

# Server erreichbar?
ping server-ip
nc -vzu server-ip 51820

# WireGuard läuft?
wg show

# Firewall?
ufw status
iptables -L

Kein Internet über VPN

# IP-Forwarding aktiv?
cat /proc/sys/net/ipv4/ip_forward

# NAT-Regel vorhanden?
iptables -t nat -L

Handshake schlägt fehl

  • Public/Private Keys überprüfen
  • Endpoint-Adresse prüfen
  • Firewall Port 51820/UDP

WireGuard vs. OpenVPN

AspektWireGuardOpenVPN
GeschwindigkeitSchnellerLangsamer
KonfigurationEinfachKomplex
Code~4.000 Zeilen~100.000 Zeilen
ProtokollUDPUDP oder TCP
VerschlüsselungChaCha20, Poly1305Flexibel (OpenSSL)
Kernel-SupportJa (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.