Hosten Sie Ihren eigenen KI-Agenten mit OpenClaw - kostenlose 1-Klick-Installation!

WireGuard Leistung optimieren: Fortgeschrittenes Tuning und Benchmarking

WireGuard Leistung optimieren: Fortgeschrittenes Tuning und Benchmarking (Titelbild)

Diese praktische Anleitung zeigt dir, wie du die WireGuard-Performance auf einem VPS oder Dedicated Server messen und optimieren kannst. Du erstellst einen zuverlässigen Vergleich zwischen Baseline- und Tunnel-Performance, behebst die wichtigsten Einflussfaktoren (MTU/MSS, parallele Streams, GRO/GSO, CPU-Tuning) und richtest ein sauberes, reproduzierbares Server-Interface ein. Anschließend schauen wir uns fortgeschrittene Themen wie offload-aware Tunneling, Parallelisierung, NUMA-/CPU-Frequenz-Themen und Netzwerk-Topologien an und schließen mit einer kompakten FAQ ab. Folge den Checklisten und geprüften Befehlen, um aus Theorie reproduzierbare Ergebnisse zu machen.

Einführung: WireGuard-Performance optimieren

WireGuard kann eine außergewöhnlich hohe Performance liefern, wenn es korrekt konfiguriert wird. Obwohl WireGuard bereits von Haus aus sehr schnell ist, hängen maximale Geschwindigkeiten von einigen entscheidenden Faktoren ab: CPU-Eigenschaften, korrekten MTU-Einstellungen und sauberen Benchmark-Methoden.

Viele WireGuard-Performanceprobleme entstehen durch einfache Fehlkonfigurationen – zum Beispiel eine falsche MTU (Maximum Transmission Unit), die zu Fragmentierung führt, oder Single-Stream-Tests, die die Vorteile mehrerer CPU-Kerne nicht ausnutzen.

Teste nach jeder Änderung erneut, damit du Verbesserungen nachvollziehen und bei Bedarf sauber zurückrollen kannst.

Warum WireGuard so schnell ist

Die hohe WireGuard-Performance basiert auf drei grundlegenden Designprinzipien: Einfachheit, moderne Kryptografie und die direkte Integration ins Betriebssystem. Genau diese Faktoren sorgen dafür, dass WireGuard klassische VPN-Protokolle häufig deutlich übertrifft.

WireGuard Performance Key Factors

WireGuard erreicht seine Geschwindigkeit durch mehrere zentrale Eigenschaften:

  • Schlankes Design: Nur etwa 4.000 Zeilen Code (im Vergleich zu Zehntausenden bei OpenVPN). Das erleichtert Audits, Wartung und Optimierungen.
  • Moderne Verschlüsselung: WireGuard verwendet ChaCha20-Poly1305, das effizient auf nahezu allen Prozessoren läuft – im Gegensatz zu AES, das für optimale Geschwindigkeit oft Hardwarebeschleunigung (AES-NI) benötigt.
  • Kernel-Integration: Pakete werden direkt im Kernel verarbeitet, wodurch aufwendige Context Switches reduziert werden.
  • UDP-Optimierung: WireGuard nutzt moderne Netzwerkbeschleunigungen und Linux-Offloads effizient aus.
  • Nahtlose Rekeying-Prozesse: Schlüssel werden automatisch erneuert, ohne aktive Verbindungen zu unterbrechen.

Mit Multi-Queue-Netzwerkkarten können unterschiedliche Verbindungen auf mehrere CPU-Kerne verteilt werden. Dadurch skaliert WireGuard deutlich besser als viele ältere VPN-Lösungen und stößt seltener an Single-Core-Grenzen.

Befehle zur Überprüfung der Performance

Bevor du mit dem Tuning der WireGuard-Performance beginnst, solltest du prüfen, ob dein System einen modernen Kernel, das WireGuard-Kernelmodul und optimierte Netzwerk-Offloads verwendet.

Kernel-Version prüfen:

uname -r

WireGuard ist ab Linux-Kernel 5.6 direkt integriert. Moderne Kernel (5.15+ oder 6.x) liefern in der Regel eine bessere WireGuard-Performance und effizienteres Netzwerk-Handling.

WireGuard-Modul überprüfen:

sudo modprobe wireguard
lsmod | grep wireguard  

Damit stellst du sicher, dass das WireGuard-Kernelmodul geladen ist und nicht eine langsamere Userspace-Implementierung verwendet wird.

Netzwerk-Offloads prüfen:

ethtool -k eth0 | grep -E 'gro|gso|tso' 

GRO, GSO und TSO reduzieren den CPU-Aufwand bei der Paketverarbeitung, indem Daten effizienter gebündelt oder segmentiert werden. Aktivierte Offloads können die WireGuard-Performance deutlich verbessern und gleichzeitig die CPU-Auslastung senken – besonders auf leistungsstarken VPS- oder Dedicated-Servern.

WireGuard-Benchmark: Mehr als nur ein einfacher Speedtest

Ein sinnvoller WireGuard-Benchmark vergleicht die normale Netzwerkleistung mit der Leistung innerhalb des VPN-Tunnels. Teste die Verbindung zunächst ohne WireGuard und führe anschließend dieselben Tests durch den WireGuard-Tunnel aus. So siehst du direkt, wie stark Verschlüsselung und Tunneling die Performance beeinflussen.

Wichtig ist, dass beide Tests unter denselben Bedingungen durchgeführt werden: gleicher Client, gleicher Server, gleiche Route, gleiche Testdauer und dieselbe Anzahl paralleler Streams. Nur so sind die Ergebnisse vergleichbar.

Grundlegende Testmethodik

iperf3 ist dafür das praktischste Tool. Starte zuerst einen normalen TCP-Test und wiederhole ihn anschließend mit mehreren parallelen Streams, zum Beispiel mit -P 4 oder -P 8. Parallele Streams sind wichtig, weil die WireGuard-Performance häufig davon abhängt, wie gut mehrere CPU-Kerne genutzt werden können.

Teste außerdem beide Richtungen. Mit iperf3 -R kannst du den Test umkehren. Das ist wichtig, da sich Upload- und Download-Performance unterscheiden können.

Für UDP-Tests verwendest du iperf3 -u zusammen mit einer definierten Bandbreite über -b. Achte dabei auf Paketverluste, denn hohe UDP-Durchsatzwerte bringen wenig, wenn Pakete verworfen werden.

Ergebnisse richtig interpretieren

Überwache während der Tests die CPU-Auslastung und mögliche Paketverluste mit Tools wie top, mpstat oder ip -s link.

Ist WireGuard deutlich langsamer als die rohe Netzwerkverbindung, prüfe insbesondere: CPU-Auslastung einzelner Kerne, MTU- und MSS-Einstellungen und GRO/GSO-Offloads

Variablen für das Tuning von WireGuard Leistung

Gute WireGuard Leistung entsteht meist durch die Optimierung einiger wichtiger System- und Netzwerkeinstellungen – nicht durch einen einzelnen magischen Parameter.

Was du optimieren solltest

VariableWarum sie wichtig istSchneller TestEmpfehlung
MTU/MSSFalsche MTU-Werte können Fragmentierung, Retransmits und geringeren Durchsatz verursachenWährend der Tests auf Retransmits oder instabile Geschwindigkeiten achtenMTU passend zum Netzwerkpfad anpassen; bei Bedarf MSS-Clamping verwenden
ParallelisierungEinzelne Verbindungen nutzen oft nicht alle verfügbaren CPU-Kerneiperf3 -P 1 mit -P 4 oder -P 8 vergleichenFür große Transfers und Benchmarks parallele Streams verwenden
GRO/GSO-OffloadsReduzieren CPU-Last und PaketverarbeitungsaufwandOffload-Status mit ethtool prüfenGRO/GSO aktiviert lassen, außer beim Troubleshooting
CPU-ScalingWireGuard-Verschlüsselung ist CPU-intensivCPU-Auslastung pro Kern überwachenCPU-Governor während Benchmarks auf performance setzen
Kernel und TreiberAlte Kernel oder Netzwerktreiber können Skalierung und Durchsatz begrenzenKernel-Version prüfen und Skalierung vergleichenModerne Linux-Kernel (5.15+ oder 6.x) und aktuelle Treiber verwenden

Wichtige Befehle

Diese Befehle helfen bei den häufigsten WireGuard-Performanceproblemen: MTU-Problemen, fehlenden Netzwerk-Offloads und zu kleinen Systempuffern.

Nutze MSS-Clamping, wenn WireGuard Traffic zwischen Subnetzen routet und TCP-Verbindungen langsam, instabil oder von Fragmentierung betroffen sind.

sudo iptables -t mangle -A FORWARD -o wg0 -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu 

Dadurch verwenden TCP-Verbindungen automatisch eine sichere Paketgröße für den Tunnelpfad.

Systempuffer erhöhen:

cat >/etc/sysctl.d/99-wireguard.conf <<'EOF'
net.core.rmem_max = 134217728
net.core.wmem_max = 134217728
net.core.netdev_max_backlog = 250000
EOF

Diese Einstellungen helfen Linux dabei, größere Netzwerkspitzen auf stark ausgelasteten oder High-Throughput-Systemen besser zu verarbeiten.

Änderungen übernehmen:

sudo sysctl --system

Wichtig zu wissen: WireGuard erlaubt keine Auswahl „schnellerer“ Verschlüsselungsalgorithmen – die Kryptografie ist bewusst fest definiert. PersistentKeepalive hilft bei NAT-Verbindungen, verbessert aber nicht die Geschwindigkeit. In den meisten Fällen bringen korrekte MTU-Werte, aktivierte Offloads und saubere Paralleltests die größten Performance-Gewinne.

Configuring the WireGuard Server Interface 

Konfiguration des WireGuard-Server-Interfaces

Hinweis: Wenn du die Contabo 1-Klick Lösung für WireGuard verwendest, ist dein WGDashboard bereits eingerichtet und vorkonfiguriert. Du kannst diese Schritte daher überspringen.

Voraussetzungen und Schlüsselerstellung

Stelle sicher, dass auf deinem Linux-Server wireguard-tools installiert ist (Kernel 5.6+ empfohlen) und UDP-Port 51820 offen ist.

Schlüssel erzeugen:

umask 077 

wg genkey | tee /etc/wireguard/privatekey | wg pubkey > /etc/wireguard/publickey 

Minimale Server-Konfiguration

Erstelle/etc/wireguard/wg0.conf

[Interface] 
Address = 10.0.0.1/24 
PrivateKey = <SERVER_PRIVATE_KEY> 
ListenPort = 51820 

# MTU = 1440 (leave unset for auto-selection, or set after testing) 

[Peer] 
PublicKey = <CLIENT_PUBLIC_KEY> 
AllowedIPs = 10.0.0.2/32 
PersistentKeepalive = 25 # usually set on the NATed client, not needed on server 

Ersetze die Schlüssel und verwende ein privates /24-Netzwerk.

Firewall- und Netzwerkkonfiguration

Eine korrekte Firewall-Konfiguration ist entscheidend für Performance und Konnektivität.

Basisregeln:

# WireGuard-UDP-Port erlauben 

sudo iptables -A INPUT -p udp --dport 51820 -j ACCEPT 

# IP-Forwarding und NAT aktivieren 

echo 'net.ipv4.ip_forward=1' | sudo tee /etc/sysctl.d/99-sysctl.conf sudo sysctl --system sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE 

Ersetze eth0 durch dein öffentliches Netzwerk-Interface.

WireGuard funktioniert standardmäßig problemlos hinter NAT. Befindet sich ein Client hinter NAT und soll dauerhaft erreichbar bleiben, setze PersistentKeepalive = 25 auf der Client-Seite.

Troubleshooting: Wenn sich Clients verbinden können, aber keinen Internetzugriff haben:

  • prüfe net.ipv4.ip_forward
  • kontrolliere die NAT-Regeln mit iptables -t nat -L -v

Aktivieren und überprüfen

sudo systemctl enable --now wg-quick@wg0 

sudo wg show 

MTU-Optimierung

Starte möglichst einfach: Lass MTU zunächst leer, damit wg-quick automatisch einen passenden Wert auswählt.

ip link show wg0

Wenn du MTU manuell setzen möchtest:

  1. Ermittle zunächst die PMTU mit: ping -M do -s <größe> <server_ip>
  2. Starte beispielsweise mit 1472
  3. Ziehe den WireGuard-Overhead ab (~60 Byte bei IPv4, ~80 Byte bei IPv6)
  4. Setze den Wert als MTU in jedem [Interface]
  5. Führe anschließend erneut parallele iperf3-Tests durch

Abschließende Prüfungen

Prüfe, ob Handshakes korrekt stattfinden und ob das Routing funktioniert.

Führe nach Änderungen an MTU oder Firewall-Regeln immer neue Benchmarks durch, um die Auswirkungen auf die Performance zu messen.

Weitere Informationen findest du in der offiziellen WireGuard Quick Start Dokumentation.

Erweiterte Performance-Konzepte

Sobald das grundlegende Tuning abgeschlossen ist, kommen zusätzliche Performance-Gewinne meist durch bessere CPU-Auslastung, moderne Kernel und optimierte Netzwerktreiber zustande.

Netzwerk-Offloads aktiviert lassen

WireGuard profitiert stark von Linux-Netzwerk-Offloads wie GRO und GSO, da sie den CPU-Aufwand bei der Paketverarbeitung reduzieren.

ethtool -k eth0 | grep -E 'gro|gso'

In den meisten Fällen sollten diese Funktionen aktiviert bleiben, außer du führst gezieltes Troubleshooting durch.

Parallelen Traffic nutzen

Einzelne Verbindungen können moderne CPUs oder schnelle Netzwerkverbindungen oft nicht vollständig auslasten. Mehrere parallele Streams spiegeln reale Transfer-Workloads besser wider.

iperf3 -P 4

Verbessert sich die Performance dadurch nicht, prüfe mögliche CPU- oder Queue-Engpässe.

Stabile CPU-Performance sicherstellen

Die WireGuard-Verschlüsselung ist CPU-intensiv. Dynamische CPU-Taktung kann daher Benchmark-Ergebnisse beeinflussen.

echo performance | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor 

Der performance-Governor sorgt während Benchmarks für stabile CPU-Taktraten.

Moderne Kernel und Treiber verwenden

Neuere Linux-Kernel und aktuelle Netzwerktreiber verbessern häufig den WireGuard-Durchsatz und die Paketverarbeitung. Moderne virtio-, ENA- und Multi-Queue-Treiber liefern meist die besten Ergebnisse auf VPS und Dedicated Servern.

TCP-Performance innerhalb des Tunnels verbessern

Der Großteil des WireGuard-Traffics besteht aus TCP-Verbindungen innerhalb des verschlüsselten UDP-Tunnels. Hohe Latenzen oder Paketverluste können die TCP-Performance deutlich verschlechtern.

In einigen Umgebungen kann BBR die Performance auf langen oder instabilen Verbindungen verbessern.

echo 'net.ipv4.tcp_congestion_control=bbr' >> /etc/sysctl.conf

Übernimm die Änderungen mit:

sudo sysctl --system

Teste die Performance immer vor und nach der Aktivierung von BBR, da die Ergebnisse je nach Netzwerk stark variieren können.

WireGuard Performance FAQ

Wie funktioniert WireGuard?

WireGuard erstellt verschlüsselte Peer-to-Peer-VPN-Verbindungen mithilfe von Public- und Private-Key-Authentifizierung. Unter Linux läuft WireGuard direkt im Kernel, wodurch weniger Overhead entsteht und häufig eine bessere Performance als bei älteren VPN-Protokollen erreicht wird.

Verwendet WireGuard TCP oder UDP?

WireGuard nutzt ausschließlich UDP. Dadurch bleiben Latenz und Protokoll-Overhead gering, während Linux Netzwerkoptimierungen wie GRO und GSO nutzen kann. Falls ein Netzwerk UDP blockiert, kann WireGuard über TCP- oder HTTPS-Tunnel betrieben werden – allerdings meist mit schlechterer Performance.

Wie prüfe ich, ob WireGuard funktioniert?

Führe wg aus. Ein aktueller „latest handshake“ sowie steigende Transferzähler zeigen, dass der Tunnel aktiv ist. Zusätzlich kannst du die Verbindung testen, indem du die WireGuard-IP des Peers anpingst. Für Performance-Tests führe iperf3 durch den Tunnel aus und vergleiche die Ergebnisse mit einem Test außerhalb des VPNs.
Falls Probleme auftreten, prüfe die Firewall-Regeln für UDP-Port 51820, die AllowedIPs auf beiden Peers sowie die MTU- oder MSS-Konfiguration.

Welche MTU sollte ich für WireGuard verwenden?

In den meisten Fällen solltest du MTU nicht manuell setzen und wg-quick automatisch wählen lassen.
Falls du manuell optimieren möchtest, starte mit Werten zwischen 1420 und 1440 und passe sie anhand deines Netzwerkpfads und möglicher Fragmentierung an.

Warum ist meine WireGuard-Geschwindigkeit langsamer als die normale Netzwerkverbindung?

Die häufigsten Ursachen sind falsche MTU- oder MSS-Einstellungen, deaktivierte GRO/GSO-Offloads oder CPU-Engpässe bei einzelnen Streams. Vergleiche die Performance innerhalb und außerhalb des Tunnels mit iperf3-Tests und mehreren parallelen Streams, um den Flaschenhals zu identifizieren.

Nach oben scrollen