
Ich habe Leistungsprobleme mit Wireguard-Tunneln, die zwischen zwei virtuellen Maschinen auf demselben Hypervisor (unter Qemu/KVM) laufen, und ich wäre für alle Erkenntnisse/Ratschläge zu diesem Problem sehr dankbar. Das Problem, das ich habe, ist, dass verschiedene Benchmarks zeigen, dass die Geschwindigkeit der Wireguard-Verbindung/des Wireguard-Tunnels etwa 80-90 % langsamer ist als die Geschwindigkeit der „normalen“ Netzwerkverbindung, über die Wireguard läuft. Die Wireguard-Konfiguration ist eine einfache Punkt-zu-Punkt-Konfiguration.
Die gleiche Wireguard-Konfiguration zwischen zwei physischen Computern läuft einwandfrei und führt nur zu einem Leistungsverlust von etwa 4-5 %. Das lässt mich glauben, dass das Problem irgendwo in der Virtualisierungsschicht liegt. Ich habe bereits viele Dinge ohne positive Ergebnisse ausprobiert:
- Eine Erhöhung der CPU- und RAM-Leistung der VMs hat keine Auswirkungen.
- Beim Testen der Leistung von Verschlüsselungs-/Entschlüsselungsaufgaben auf diesen VMs zeigt sich kein signifikanter Leistungseinbruch. Die CPU-Leistung scheint für diese VMs also in Ordnung zu sein.
- Die Virtualisierungsunterstützung für die CPU ist im Hypervisor-BIOS aktiviert
- Ich habe einige unterschiedliche MTU-Größen ausprobiert, ohne wirklichen Unterschied festzustellen.
- CPU-Pinning und verschiedene CPU-Einstellungen innerhalb von Qemu/KVM machen keinen Unterschied.
- Wireguard läuft im Kernelmodus
- Ich habe mit demselben Setup auf verschiedenen Maschinen/Hypervisor-Kombinationen (z. B. VirtualBox) dieselben Probleme, was mich zu der Annahme veranlasst, dass ich bei der Konfiguration etwas falsch mache. Alles, was auf virtuellen Maschinen läuft, scheint dieses Problem zu haben.
- Auch unterschiedliche Linux-Distributionen scheinen keinen Unterschied zu machen
Hier sind einige weitere Informationen zu meinem Setup und ein Benchmark. Die beiden virtuellen Maschinen heißen wireguard-client-01 und wireguard-server:
Wireguard-Client-01-Netzwerkinformationen:
[root@wireguard-client-01 ~]# ip a
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 52:54:00:d4:fa:89 brd ff:ff:ff:ff:ff:ff
inet 192.168.2.41/24 brd 192.168.2.255 scope global dynamic noprefixroute enp1s0
valid_lft 863813sec preferred_lft 863813sec
inet6 fd00::5054:ff:fed4:fa89/64 scope global dynamic noprefixroute
valid_lft 7021sec preferred_lft 3421sec
inet6 fe80::5054:ff:fed4:fa89/64 scope link noprefixroute
valid_lft forever preferred_lft forever
3: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000
link/none
inet 10.8.0.2/24 scope global wg0
valid_lft forever preferred_lft forever
Wireguard-Server-Netzwerkinformationen:
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 52:54:00:73:c2:6d brd ff:ff:ff:ff:ff:ff
inet 192.168.2.40/24 brd 192.168.2.255 scope global dynamic noprefixroute enp1s0
valid_lft 863677sec preferred_lft 863677sec
inet6 fd00::5054:ff:fe73:c26d/64 scope global dynamic noprefixroute
valid_lft 6880sec preferred_lft 3280sec
inet6 fe80::5054:ff:fe73:c26d/64 scope link noprefixroute
valid_lft forever preferred_lft forever
3: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000
link/none
inet 10.8.0.1/24 scope global wg0
valid_lft forever preferred_lft forever
Wireguard-Server WG0-Konfiguration:
[Interface]
Address = 10.8.0.1/24
SaveConfig = true
ListenPort = 51820
PrivateKey = <my_private_key>
[Peer]
PublicKey = E0eS7oBffTDg8Qj4ZeIUhxA0GUC3HrSfacrjP54hFQI=
AllowedIPs = 10.8.0.2/32
Endpoint = 192.168.2.41:48671
Wireguard-client-01 wg0-Konfiguration:
[Interface]
PrivateKey = <my_private_key>
Address = 10.8.0.2/24
[Peer]
PublicKey = h+kDKK/2Y+WXRiO9lSQ0RT3HsRi0m6OckOkEJep/2jM=
AllowedIPs = 10.8.0.0/24
Endpoint = 192.168.2.40:51820
iperf3-Benchmarks über „normale“ Netzwerkschnittstellen:
[root@wireguard-client-01 ~]# iperf3 --client 192.168.2.40
Connecting to host 192.168.2.40, port 5201
[ 5] local 192.168.2.41 port 57836 connected to 192.168.2.40 port 5201
[ ID] Interval Transfer Bitrate Retr Cwnd
[ 5] 0.00-1.00 sec 913 MBytes 7.66 Gbits/sec 2 3.11 MBytes
[ 5] 1.00-2.00 sec 956 MBytes 8.00 Gbits/sec 2 3.11 MBytes
[ 5] 2.00-3.00 sec 958 MBytes 8.05 Gbits/sec 5 3.11 MBytes
[ 5] 3.00-4.00 sec 1.05 GBytes 9.00 Gbits/sec 3 3.11 MBytes
[ 5] 4.00-5.00 sec 998 MBytes 8.37 Gbits/sec 5 3.11 MBytes
[ 5] 5.00-6.00 sec 1014 MBytes 8.50 Gbits/sec 4 3.11 MBytes
[ 5] 6.00-7.00 sec 1.02 GBytes 8.75 Gbits/sec 4 3.11 MBytes
[ 5] 7.00-8.00 sec 960 MBytes 8.06 Gbits/sec 5 3.11 MBytes
[ 5] 8.00-9.00 sec 1.17 GBytes 10.0 Gbits/sec 2 3.11 MBytes
[ 5] 9.00-10.00 sec 1022 MBytes 8.58 Gbits/sec 3 3.11 MBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-10.00 sec 9.90 GBytes 8.50 Gbits/sec 35 sender
[ 5] 0.00-10.03 sec 9.89 GBytes 8.47 Gbits/sec receiver
iperf Done.
iperf3-Benchmarks über Wireguard-Tunnel (beachten Sie den Unterschied bei der Bitrate, die um etwa 80 % abfällt):
[root@wireguard-client-01 ~]# iperf3 --client 10.8.0.1
Connecting to host 10.8.0.1, port 5201
[ 5] local 10.8.0.2 port 39384 connected to 10.8.0.1 port 5201
[ ID] Interval Transfer Bitrate Retr Cwnd
[ 5] 0.00-1.00 sec 125 MBytes 1.05 Gbits/sec 106 1.59 MBytes
[ 5] 1.00-2.00 sec 120 MBytes 1.01 Gbits/sec 0 1.74 MBytes
[ 5] 2.00-3.00 sec 132 MBytes 1.11 Gbits/sec 0 1.83 MBytes
[ 5] 3.00-4.00 sec 176 MBytes 1.48 Gbits/sec 22 1.40 MBytes
[ 5] 4.00-5.00 sec 221 MBytes 1.85 Gbits/sec 0 1.50 MBytes
[ 5] 5.00-6.00 sec 191 MBytes 1.61 Gbits/sec 0 1.58 MBytes
[ 5] 6.00-7.00 sec 42.5 MBytes 357 Mbits/sec 0 1.58 MBytes
[ 5] 7.00-8.00 sec 191 MBytes 1.60 Gbits/sec 0 1.65 MBytes
[ 5] 8.00-9.00 sec 194 MBytes 1.63 Gbits/sec 169 1.21 MBytes
[ 5] 9.00-10.00 sec 214 MBytes 1.79 Gbits/sec 0 1.36 MBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-10.00 sec 1.57 GBytes 1.35 Gbits/sec 297 sender
[ 5] 0.00-10.04 sec 1.57 GBytes 1.34 Gbits/sec receiver
iperf Done.
Ich wäre für jeden Rat zu diesem Problem sehr dankbar und danke im Voraus für Ihre Hilfe!