Möchte man z.B. wie wir, über einen WPA2 WLAN-Link, eine doppelte Sicherheit und deshalb noch ein VPN spannen, nimmt man hierzu gerne OpenVPN. Geht es um größere Bandbreiten (> 100Mbit) des Links, kann man schnell an Grenzen stoßen. Der machbare Durchsatz hängt von mehreren Faktoren ab:
- Gewählte Cipher
- Verfügbare CPU-Leistung für Verschlüsselung
- Genutztes Protokoll
- Genutzte Art der Verschlüsselung (TLS / PSK)
Ziehen wir das Pferd von hinten auf. Je nach genutzter Verschlüsselung, bieten sich unterschiedliche Ciphers an. Dies zeigt auf einem OpenVPN-Knoten:
`openvpn –show-ciphers`
Bei unserer Verbindung kommt ein statischer Schlüssel zum Einsatz (secret….) wodurch alle TLS-Ciphers in der Übersicht ausscheiden. Den besten Durchsatz haben wir erreicht mit aes-256-cbc.
Da UDP verbindungslos ist, ist UDP hier dem TCP-Protokoll vorzuziehen.
Bei allen unseren Tests wurde klar, dass Verschlüsselung ganz gravierend auf die CPU schlägt und OpenVPN bis heute im Jahr 2018 pro Verbindung jeweils nur einen CPU-Kern nutzt. Aus diesem Grund bremst fast immer die CPU (100% Last) die Übertragung.
Hier noch ein paar Performancewerte (Angabe jeweils in Mbits-Durchsatz – gemessen mit iperf im client/server Mode mit TCP – 40 Sekunden Test)
OpenVPN als virtuelle KVM-Maschine auf mobilem Intel i5 Laptop:
BF-CBC -> 213 Mbits
AES-128-CBC -> 227 Mbits
CAMELLIA-128-CBC -> 206 MBit
Man sieht immer schön mit ‚top‘ dass die CPU bei 100% hängt – technisch deutlich mehr möglich wäre also, wenn die Rechenleistung verfügbar ist.
Ein Blick in Proxmox/KVM zeigt, dass hier nicht alle CPU-Flags (vgl. cat /proc/cpuinfo) an die VM durchgereicht werden. Wählt man in der Virtualisierungslösung bei CPU-Typ ‚host‘ bzw. einen aktuellen CPU, sehen die Werte nach einem Neustart der VM gleich anders aus:
AES-128-CBC -> 313 Mbit
AES-256-CBC -> 309 Mbit
Es bleibt jedoch die CPU der Flaschenhals. Im Vergleich dümpelte ein Xeon E3 Prozessor auf dem Ziel-OpenVPN-System bei ~ 45 % Auslastung herum. Hier wäre noch Luft nach oben. Dennoch bleibt Verschlüsselung eine nicht zu unterschätzende Anforderung an die CPU.