Aufgrund des Upgrades meiner Internetleitung auf 400/25MBit bei Vodafone Kabel und darauf folgend geringer OpenVPN Tunnel Performance habe ich mal ein paar Benchmarks gemacht.
Zuerst etwas zur Vorgeschichte:
Ich habe hinter dem Provider Router (Jetzt FritzBox 6490) schon lange eine pfsense Firewall laufen. Diese läuft auf einem kleinen, sparsamen Atom N2800 und macht neben Firewalling und Routing auch ein OpenVPN Tunnel zu meinem Root im RZ auf, um an die internen VMs zu kommen und Backups zu fahren.
Bei den bisherigen Leitungen (2MBit, 16MBit, 25MBit Downstream) war dies für die CPU kein Problem, mit AES-128-CBC als Cipher und SHA1 als Auth, die Bandbreite zu nutzen. Mit dem Upgrade auf die 400er Leitung blieb der Tunneldurchsatz allerdings bei etwa 30MBit „stecken“. Die CPU ist nicht die performanteste und unterstützt noch kein AES-NI oder AVX, aber mich hat natürlich interessiert, wie weit ich Upgraden müsste, um genug Durchsatz zu bekommen.
Leider finden sich kaum aktuelle Vergleiche im Netz, welche Kombination wie viel Durchsatz mit OpenVPN und verschiedenen Ciphern bringt. Der Server im RZ hat selber genug Power, dort werkelt ein Intel Core i7 6700, also aktueller Stand der Technik und AES-NI sowie AVX support.
Der Test:
Um äußere Einflüsse wie MTU, Routing, Carrier etc vorerst auszuschließen, habe ich mich auf den Test innerhalb des Netzwerkes beschränkt.
Aufbau:
Tyan S7012 mit 2x Intel Xeon E5645, Turboboost an, Cpufreq OnDemand
144GB DDR3 ECC Reg Ram
Debian 8 mit Proxmox Hypervisor
Dedizierte Open vSwitches pro Netz, ohne Nic-Bindung
2x Ubuntu Mate 16.10 Desktop, VirtIO für Nic, CPU auf Host-Modell
2x pfsense 2.3.3, ViroIO für Nic, CPU auf Host-Modell, alle Nic-Offloadings innerhalb der VM abgeschaltet (ist ein Muss bei VirtIO, andernfalls gehen keine gerouteten Pakete durch)
Direkte Verbindung:
Erster Test natürlich: Beide Deskops an den selben vSwitch und iPerf laufen lassen:
Durch die pfsense:
Danach habe ich diverse Kombinationen aus Ciphern, Auth, und beidem getestet, sowie auch beides auf none. Die Ergebnisse sind wie folgt:
Während der Tests bin ich auf einen Beitrag im pfsense Forum gestoßen, wo empfohlen wurde, die AES-NI crypto-Engine in den pfsense Optionen abzuschalten. Andernfalls wird ein anderer Treiber genutzt, der schlechtere Performance liefert. Entsprechendes sieht man in den Ergebnissen, mit der aktiven AES-NI Option sind die Ergebnisse unter AES tatsächlich schlechter. Auf einen Test unter Abschaltung der CPU Extension habe ich verzichtet.
Hinweis:
Im OpenVPN sind alle Einstellungen auf den defaults belassen, der Tunnel wurde mittels Shared Key authentifiziert. Bei der Nutzung von Cert-Based lassen sich ab der pfsense 2.4 (Aktuell noch Beta) mit aktuellerem OpenVPN noch weitere Cipher wie AES-XXX-GCM nutzen, die noch besser mit AES-NI performen sollen. Evtl teste ich dies im Nachgang auch noch.
Mit anderen iPerf Paketgrößen oder Optimierungen an der Tunnel-MTU und ähnlichem kann das Ergebniss ganz anders aussehen, der Test richtet sich primär darauf, den Performance-Impact der Verschlüsselung aufzuzeigen.
In einem Realen Scenario spielen noch viele weitere Factoren mit in die Performance rein, so das die Ergebnisse nicht 1:1 übertragbar sind.
Fazit:
Das System gehört heute nicht mehr zu den aktuellen, zeigt aber doch, dass es nicht so leicht ist, viel Performance über den Tunnel zu bekommen, gerade wo OpenVPN rein Single-Threaded arbeitet.
Bei immer schneller werdenden Internetleitungen zeigt sich somit auch immer mehr Bedarf an schneller Crypto-Hardware. Roadwarrior lassen sich noch einfacher handeln, hier können mehrere Verbindungen einzelne Prozesse Starten, bei einzelnen Verbindungen mit hohen Bandbreitenanforderungen wird es schon eng.
Die Ergebnisse lassen sich noch im diesem Googel Sheets Document nachlesen, die Werte sind immer auf 10er Stellen abgerundet.
Ich überlege aktuell, auf ein pcEngines APU2C4 (AMD GX-412TC mit AES-NI) oder einem Atom C25xx / Celeron N3150 basierenden System zu wechseln, in der Hoffnung zumindest an die 200MBit zu kommen.
Sollte jemand entsprechende besitzen und Performancedaten liefern können wäre ich für den Input dankbar.