OPNsense Forum
International Forums => German - Deutsch => Topic started by: BeNe on November 05, 2016, 08:12:32 pm
-
Hallo OPNsense Community,
habe mir eine APU2 zugelegt und bin gerade am konfigurieren.
Jetzt ist mir aufgefallen das ich beim anlegen von meinen OpenVPN Verbindungen (Server wie auch Client)
kein "Hardware Crypto" auswählen kann ?! Laut beschreibung hat die APU2 eine AES-NI Unterstützung.
Habe schon von OpenSSL auf LibreSSL gewechselt, hat aber leider nichts gebracht.
In den Einstellungen -> System: Settings: Miscellaneous -> hatte ich zuvor AESNI ausgewählt und neugestartet.
Hat einer einen Tipp oder ebenfalls eine APU2 mit aktivem AES-NI ?
Bei Google habe ich Foreneinträge gefunden - sind aber schon älter wo von bessere Unterstützung in FreeBSD 10.3 gesprochen wird welches ja schon einzug in OPNSense erhalten hat.
Infos zu meinem System:
Versions OPNsense 16.7.7-amd64
FreeBSD 10.3-RELEASE-p11
LibreSSL 2.4.3
Danke & Grüße,
BeNe
-
Bei mir am Laptop mit AES-NI sieht es so aus:
$ openvpn --show-engines
OpenSSL Crypto Engines
Dynamic engine loading support [dynamic]
Es könnte also sein, dass es nicht dargestellt wird und stattdessen wird einfach genommen, was da ist.
-
Hallo BeNe
Frei nach Handbuch:
---
The setting Hardware Crypto is not used for new systems equipped with AESNI, when the aesni module is loaded it will be used automatically.
---
aus: https://docs.opnsense.org/manual/how-tos/sslvpn_s2s.html
Gruss, Stefan
-
Hallo Stefan,
danke für deine fixe Antwort.
Meine "openvpn --show-engines" sieht gleich aus wie deine -> leer!
Das im Wiki hatte ich schon gelesen. Allerdings bin ich um Welten von dem Ergebniss aus dem PC-Engines Forum weg --> http://www.pcengines.info/forums/?page=post&id=FF05AF29-15FD-4501-AAC9-CD669CBB5077&fid=DF5ACB70-99C4-4C61-AFA6-4C0E0DB05B2A
Daher gehe ich mal von aus dass das AESNI Module nicht (automatisch) geladen wird.
Wie könnte ich das am besten prüfen ?
-
Meine "openvpn --show-engines" sieht gleich aus wie deine -> leer!
Das war Fabians Antwort. Aber bei mir sieht es auf der APU2.C4 auch so aus.
Daher gehe ich mal von aus dass das AESNI Module nicht (automatisch) geladen wird.
Wie könnte ich das am besten prüfen ?
root@OPNsense:~ # kldload aesni
kldload: can't load aesni: module already loaded or in kernel
= das Modul wurde geladen.
Wie wäre es mit einem Vorher-Nachher-Test, also mal mit aktiviertem AES-NI und einmal ohne eine Messung durchführen? Stell doch mal deine Messwerte mit den gewünschten Parametern hier rein, dann können wir vergleichen.
-
Klar - gerne poste ich die Messwerte.
Habe heute Mittag OPNsense nochmals komplett neu augespielt.
Alle Einstellugen habe ich erstmal auf default belassen und dann den speedtest angestossen.
Jetzt sieht es sehr gut aus :o
Ohne AES-NI
root@OPNsense:~ # openssl speed aes-128-cbc
Doing aes-128 cbc for 3s on 16 size blocks: 2997223 aes-128 cbc's in 3.09s
Doing aes-128 cbc for 3s on 64 size blocks: 787115 aes-128 cbc's in 3.04s
Doing aes-128 cbc for 3s on 256 size blocks: 199344 aes-128 cbc's in 3.00s
Doing aes-128 cbc for 3s on 1024 size blocks: 124572 aes-128 cbc's in 3.02s
Doing aes-128 cbc for 3s on 8192 size blocks: 16009 aes-128 cbc's in 3.02s
OpenSSL 1.0.1s-freebsd 1 Mar 2016
built on: date not available
options:bn(64,64) rc4(8x,int) des(idx,cisc,16,int) aes(partial) idea(int) blowfish(idx)
compiler: clang
The 'numbers' are in 1000s of bytes per second processed.
type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes
aes-128 cbc 15540.03k 16575.95k 17010.69k 42300.26k 43376.36k
Mit AES-NI
root@OPNsense:~ # openssl speed -evp aes-128-cbc
Doing aes-128-cbc for 3s on 16 size blocks: 313110 aes-128-cbc's in 0.45s
Doing aes-128-cbc for 3s on 64 size blocks: 300432 aes-128-cbc's in 0.33s
Doing aes-128-cbc for 3s on 256 size blocks: 279337 aes-128-cbc's in 0.33s
Doing aes-128-cbc for 3s on 1024 size blocks: 206289 aes-128-cbc's in 0.21s
Doing aes-128-cbc for 3s on 8192 size blocks: 57919 aes-128-cbc's in 0.10s
OpenSSL 1.0.1s-freebsd 1 Mar 2016
built on: date not available
options:bn(64,64) rc4(8x,int) des(idx,cisc,16,int) aes(partial) idea(int) blowfish(idx)
compiler: clang
The 'numbers' are in 1000s of bytes per second processed.
type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes
aes-128-cbc 11056.02k 58598.55k 217936.07k 1001433.77k 4671728.72k
Die Ausgabe der openssl engine zeigt AES bis 256 an 8)
root@OPNsense:~ # openssl engine -t -c
(cryptodev) BSD cryptodev engine
[RSA, DSA, DH, AES-128-CBC, AES-192-CBC, AES-256-CBC]
[ available ]
(rsax) RSAX engine support
[RSA]
[ available ]
(dynamic) Dynamic engine loading support
[ unavailable ]
Hier noch die Werte mit 256:
Ohne AES-NI:
root@OPNsense:~ # openssl speed aes-256-cbc
Doing aes-256 cbc for 3s on 16 size blocks: 2155988 aes-256 cbc's in 3.03s
Doing aes-256 cbc for 3s on 64 size blocks: 568665 aes-256 cbc's in 3.07s
Doing aes-256 cbc for 3s on 256 size blocks: 139940 aes-256 cbc's in 3.00s
Doing aes-256 cbc for 3s on 1024 size blocks: 95278 aes-256 cbc's in 3.09s
Doing aes-256 cbc for 3s on 8192 size blocks: 11653 aes-256 cbc's in 3.09s
OpenSSL 1.0.1s-freebsd 1 Mar 2016
built on: date not available
options:bn(64,64) rc4(8x,int) des(idx,cisc,16,int) aes(partial) idea(int) blowfish(idx)
compiler: clang
The 'numbers' are in 1000s of bytes per second processed.
type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes
aes-256 cbc 11380.06k 11853.70k 11941.55k 31536.06k 30934.32k
Mit AES-NI:
root@OPNsense:~ # openssl speed -evp aes-256-cbc
Doing aes-256-cbc for 3s on 16 size blocks: 319830 aes-256-cbc's in 0.57s
Doing aes-256-cbc for 3s on 64 size blocks: 308056 aes-256-cbc's in 0.41s
Doing aes-256-cbc for 3s on 256 size blocks: 275877 aes-256-cbc's in 0.37s
Doing aes-256-cbc for 3s on 1024 size blocks: 185783 aes-256-cbc's in 0.13s
Doing aes-256-cbc for 3s on 8192 size blocks: 46493 aes-256-cbc's in 0.04s
OpenSSL 1.0.1s-freebsd 1 Mar 2016
built on: date not available
options:bn(64,64) rc4(8x,int) des(idx,cisc,16,int) aes(partial) idea(int) blowfish(idx)
compiler: clang
The 'numbers' are in 1000s of bytes per second processed.
type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes
aes-256-cbc 8972.76k 47615.00k 192339.10k 1432408.79k 9750288.79k
Damit sieht die VPN-Welt doch schon viel besser. Es ist mir allerding immer noch nicht klar
was an meinem Setup vor der neuinstallation so falsch war, dass ich nicht solche hohen Werte erreicht habe.
Was bekommt Ihr für Werte mit und ohne AES-NI hin ?
-
Die Ausgabe der openssl engine zeigt AES bis 256 an 8)
Bei mir nicht:
root@OPNsense:~ # openssl engine -t -c
(rsax) RSAX engine support
[RSA]
[ available ]
(dynamic) Dynamic engine loading support
[ unavailable ]
Ich vermute du hast unter System: Settings: Miscellaneous "Use /dev/crypto" "Enable old userland device for cryptographic acceleration" angehakt? Wenn ich den zugehörigen Hilfetext und die Ausführungen hier https://forum.opnsense.org/index.php?topic=2379.0 (https://forum.opnsense.org/index.php?topic=2379.0) richtig verstehe, ist das unnötig bis kontraproduktiv.
openssl speed -evp aes-128-cbc
Kommt nicht gut. Wir sollten -elapsed und /usr/local/bin/openssl verwenden, Begründung siehe im oben verlinkten Thread.
Miss bitte mal mit:
/usr/local/bin/openssl speed -elapsed aes-256-cbc (ohne AES-Beschleunigung)
/usr/local/bin/openssl speed -elapsed -evp aes-256-cbc (mit AES-Beschleunigung)
Ergibt bei mir folgende Werte:
root@OPNsense:~ # /usr/local/bin/openssl speed -elapsed aes-256-cbc
You have chosen to measure elapsed time instead of user CPU time.
Doing aes-256 cbc for 3s on 16 size blocks: 2281277 aes-256 cbc's in 3.16s
Doing aes-256 cbc for 3s on 64 size blocks: 567848 aes-256 cbc's in 3.00s
Doing aes-256 cbc for 3s on 256 size blocks: 144303 aes-256 cbc's in 3.01s
Doing aes-256 cbc for 3s on 1024 size blocks: 93567 aes-256 cbc's in 3.09s
Doing aes-256 cbc for 3s on 8192 size blocks: 11268 aes-256 cbc's in 3.00s
OpenSSL 1.0.2j 26 Sep 2016
built on: reproducible build, date unspecified
options:bn(64,64) md2(int) rc4(8x,int) des(idx,cisc,16,int) aes(partial) idea(int) blowfish(idx)
compiler: cc -I. -I.. -I../include -fPIC -DOPENSSL_PIC -DOPENSSL_THREADS -pthread -D_THREAD_SAFE -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -DL_ENDIAN -O3 -Wall -O2 -pipe -fstack-protector -fno-strict-aliasing -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DRC4_ASM -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM -DECP_NISTZ256_ASM
The 'numbers' are in 1000s of bytes per second processed.
type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes
aes-256 cbc 11564.49k 12114.09k 12281.87k 30969.73k 30769.15k
root@OPNsense:~ # /usr/local/bin/openssl speed -elapsed -evp aes-256-cbc
You have chosen to measure elapsed time instead of user CPU time.
Doing aes-256-cbc for 3s on 16 size blocks: 18087660 aes-256-cbc's in 3.01s
Doing aes-256-cbc for 3s on 64 size blocks: 6152322 aes-256-cbc's in 3.01s
Doing aes-256-cbc for 3s on 256 size blocks: 1809435 aes-256-cbc's in 3.01s
Doing aes-256-cbc for 3s on 1024 size blocks: 465577 aes-256-cbc's in 3.00s
Doing aes-256-cbc for 3s on 8192 size blocks: 58767 aes-256-cbc's in 3.01s
OpenSSL 1.0.2j 26 Sep 2016
built on: reproducible build, date unspecified
options:bn(64,64) md2(int) rc4(8x,int) des(idx,cisc,16,int) aes(partial) idea(int) blowfish(idx)
compiler: cc -I. -I.. -I../include -fPIC -DOPENSSL_PIC -DOPENSSL_THREADS -pthread -D_THREAD_SAFE -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -DL_ENDIAN -O3 -Wall -O2 -pipe -fstack-protector -fno-strict-aliasing -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DRC4_ASM -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM -DECP_NISTZ256_ASM
The 'numbers' are in 1000s of bytes per second processed.
type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes
aes-256-cbc 96216.96k 130908.63k 154004.07k 158916.95k 160056.27k
-
Hallo zusammen,
Das ist immer etwas kniffelig. Ich fasse mal die letzten 2 Jahre zusammen:
Die korrekte Binary ist /usr/local/bin/openssl und muss auch so aufgerufen werden.
AES-NI ist nur im Envelope-Mode (-evp) der OpenSSL Engine verfügbar. LibreSSL hat die auch. Die Befehle sind Assembler-Code, die aesni.ko-unabhänig sind.
/dev/crypto ist nur von OpenSSL unterstützt und hat irgendwann mal folgenden Hilfetext bekommen:
Old hardware accelerators like 'safe', 'hifn' or 'ubsec' may only provide userland acceleration to e.g. OpenVPN by means of the /dev/crypto interface, which can be accessed via the OpenSSL engine framework. Note that LibreSSL does not have support for this device and instead solely relies on embedded acceleration methods e.g. AES-NI. The default is to disable this device as it is likely not needed on modern systems.
OpenVPN sollte automatisch mit AES-NI laufen. aesni.ko wird hier nicht benutzt.
Grüsse
Franco
-
Hallo Franco
Vielen Dank für die Zusammenfassung.
OpenVPN sollte automatisch mit AES-NI laufen. aesni.ko wird hier nicht benutzt.
Das Modul beeinträchtigt die Performance von OpenVPN aber auch nicht negativ, oder? Und IPsec profitiert davon?
Ist eigentlich der Hilfetext zu Hardware noch aktuell? Ich finden den verwirrend.
"A cryptographic accelerator module will use hardware support to speed up some cryptographic functions on systems which have the chip. Do not enable this option if you have a Hifn cryptographic acceleration card, as this will take precedence and the Hifn card will not be used. Acceleration should be automatic for IPsec when using a cipher supported by your chip, such as AES-128. OpenVPN should be set for AES-128-CBC and have cryptodev enabled for hardware acceleration.
If you do not have a crypto chip in your system, this option will have no effect. To unload the selected module, set this option to 'none' and then reboot."
Es wäre schön, wenn die konkreten Sachverhalte gebündelt im Wiki stehen würden.
-
Hi RdO,
Das Modul beeinträchtigt die Performance natürlich nicht. Bei IPsec im Kernel weiß ich leider zu wenig, um eine qualifizierte Aussage zu machen. Jos oder Ad wissen da deutlich mehr, können aber kein fließendes Deutsch. Ich versuche mal eine Antwort einzuholen morgen. :)
Der Hilfetext stimmt historisch gesehen schon, muss aber noch erweitert werden in der Art:
"Nothing needs selected for OpenVPN to utilize AES-NI. The OpenSSL engine has its own code for handling AES-NI that works well without using the BSD Cryptodev Engine."
Mit freundlicher Unterstützung von pfSense:
https://doc.pfsense.org/index.php/Are_cryptographic_accelerators_supported
Grüße
Franco
-
Hallo Franco
Bei IPsec im Kernel weiß ich leider zu wenig, um eine qualifizierte Aussage zu machen. Jos oder Ad wissen da deutlich mehr, können aber kein fließendes Deutsch. Ich versuche mal eine Antwort einzuholen morgen.
Danke, das wäre cool.
Falls IPsec nicht von aesni.ko profitieren sollte frage ich mich für was man das Modul überhaupt (noch) laden/anbieten soll?
Wie wäre es mit einer Übersichtstabelle im Wiki mit: "Was in welchem Fall geladen/aktiviert werden soll"? Plus vielleicht noch eine Anleitung fürs jeweilige Benchmarking.
Gruss, Stefan
-
Hallo Stefan,
Jos sagte der geladene aesni.ko hat messbare Performancevorteile für AES-GCM. In FreeBSD 11.0 wird das auch noch gleich doppelt so schnell als aktuell in 10.3.
Eine Matrix für das "Wie mit was" wird immer weniger relevant mit AES-NI in der Hardware. Vielleicht sollten wir überlegen automatisch aesni.ko zu laden, dann entfällt auch die letzte Hürde im Performance Puzzle für einen Großteil?
Grüße
Franco
-
Hallo Franco
aesni.ko per default zu laden fände ich gut.
LG Oliver
-
Hi Oliver,
Okay, Ticket ist erstellt. Nur zeitlich kann ich es noch nicht einordnen.
https://github.com/opnsense/core/issues/1259
Grüsse
Franco
-
Hallo Franco
Vielen Dank für die Abklärung und sorry für die späte Antwort.
Jos sagte der geladene aesni.ko hat messbare Performancevorteile für AES-GCM. In FreeBSD 11.0 wird das auch noch gleich doppelt so schnell als aktuell in 10.3.
Tönt gut!
Wenn ich das richtig verstehe profitiert nicht nur IPsec sondern auch SSH, TLS und dergleichen? Dann fände ich es auch gut aesni.ko per default zu laden. Oder ist das doof für Systeme ohne AES-NI? So von wegen "lade nur was effektiv benötigt wird" wegen weniger Ressourcenverbrauch, Angriffsfläche, Nebenwirkungen usw.
Falls aesni.ko nur für IPSec eine Rolle spielen sollte: Wie wäre es mit: Automatisch laden wenn IPsec aktiviert wird?
Sorry falls das dumme Fragen/Vorschläge sind, aber ich kenne mich damit null aus.
Oh, und vermutlich müsste man noch den Hilfetext entsprechend ergänzen, sonst werden vermutlich Tonnen Anfragen kommen wieso man AES-NI nicht mehr aktivieren kann. :)
Gruss, Stefan
-
Hallo zusammen,
das aesni.ko deutlich performanter im Einsatz mit dem APU2 Board und IPsec ist kann ich so bestätigen. Das FreeBSD11 hier nochmal einen daraufsetzt versuche ich gerade zu testen. Aber aktuell heute bin ich hier leider hängen geblieben https://forum.opnsense.org/index.php?topic=3951.0 (https://forum.opnsense.org/index.php?topic=3951.0).
Die Werte von BeNe habe ich so aber auch noch nie erreicht. Welche APU2 genau wurde hier benutzt? Softwaretechnisch immer die LibreSSL Version?
AES-NI ist wirklich ein Thema für sich.
Gruß Till
-
Hallo Till,
kurze Frage am Rande... Wie aktiviert man AES-NI auf der apu2c4 und wie prüfe ich vorher/nachher ob es was gebracht hat? Bin noch recht frisch mit bsd/opnsense unterwegs...
Danke u. Grüße
M.
EDIT: Wer lesen kann ist klar im Vorteil...habs auf der 1. Seite gefunden und nen Testlauf gestartet... Ergebnisse lt. "/usr/local/bin/openssl speed -evp aes-128-cbc" sind leider vorher/nachher ziemlich identisch. Muss AES-NI noch an einer anderen Stelle aktiviert werden, außer in den Systemeinstellungen in der OPNsense GUI?
-
AESNI ist nun in der Standardconfiguration ausgewählt, allerdings nur bei einer Neuinstallation mit 17.1 aufwärts oder bei einem Factory-Reset ab Version 16.7.12. Ziemlich coole Lösung von Ad. :)
-
Hat sich erledigt
-
Hm? Bitte Output posten und auf "-evp" achten, ohne gibt es kein AES-NI.
-
PS:
franco@sensey:~ % /usr/local/bin/openssl speed aes-128-cbc
Doing aes-128 cbc for 3s on 16 size blocks: 5798122 aes-128 cbc's in 3.00s
Doing aes-128 cbc for 3s on 64 size blocks: 1543074 aes-128 cbc's in 3.00s
Doing aes-128 cbc for 3s on 256 size blocks: 395499 aes-128 cbc's in 3.01s
Doing aes-128 cbc for 3s on 1024 size blocks: 262350 aes-128 cbc's in 3.00s
Doing aes-128 cbc for 3s on 8192 size blocks: 33119 aes-128 cbc's in 3.00s
LibreSSL 2.4.5
built on: date not available
options:bn(64,64) rc4(8x,int) des(idx,cisc,16,int) aes(partial) idea(int) blowfish(idx)
compiler: information not available
The 'numbers' are in 1000s of bytes per second processed.
type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes
aes-128 cbc 30923.32k 32918.91k 33661.59k 89548.80k 90436.95k
franco@sensey:~ % /usr/local/bin/openssl speed -evp aes-128-cbc
Doing aes-128-cbc for 3s on 16 size blocks: 44383756 aes-128-cbc's in 3.00s
Doing aes-128-cbc for 3s on 64 size blocks: 16040196 aes-128-cbc's in 3.00s
Doing aes-128-cbc for 3s on 256 size blocks: 4987221 aes-128-cbc's in 3.00s
Doing aes-128-cbc for 3s on 1024 size blocks: 1321077 aes-128-cbc's in 3.01s
Doing aes-128-cbc for 3s on 8192 size blocks: 167437 aes-128-cbc's in 3.00s
LibreSSL 2.4.5
built on: date not available
options:bn(64,64) rc4(8x,int) des(idx,cisc,16,int) aes(partial) idea(int) blowfish(idx)
compiler: information not available
The 'numbers' are in 1000s of bytes per second processed.
type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes
aes-128-cbc 236713.37k 342190.85k 425576.19k 449756.38k 457214.63k
-
Hat sich erledigt
-
Vielleicht kein AES-NI?
# dmesg | grep AESNI
Features2=0x3ed8220b<SSE3,PCLMULQDQ,MON,SSSE3,CX16,SSE4.1,SSE4.2,MOVBE,POPCNT,AESNI,XSAVE,OSXSAVE,AVX,F16C>
-
Hat sich erledigt... Ich bin dumm xD
-
Awas, gelöst ist gelöst. 8)