sabato 19 novembre 2016

Misurare le performance di OpenVPN su pfSense

Uno dei servizi più utilizzati su pfSense è sicuramente OpenVPN. Per le aziende è ormai impensabile non poter accedere alla rete aziendale quando si è in viaggio o a casa. Con la crescente diffusione della banda larga diventa sempre più semplice lavorare in remoto, aprendo file direttamente dal server, utilizzando software client server attraverso una VPN, ecc...
In questo scenario è diventato di fondamentale importanza capire se l'hardware che stiamo impiegando è idoneo o se sta rallentando la nostra connessione VPN.

Come fare per misurare le reali capacità di gestire traffico OpenVPN del nostro firewall?


In laboratorio sarebbe molto facile: prendo due firewall identici, creo tra i due un tunnel OpenVPN, metto una macchina da un capo e una dall'altro e con iperf misuro la velocità massima raggiungibile dal mio firewall.

Difficilmente si ha la possibilità di fare test simili, magari su macchine diverse. Anche con una macchina sola c'è la possibilità di effettuare un test che ci restituisce una velocità teorica ma che possiamo ritenere il limite massimo a cui potremo tendere. Ora vedremo come fare.

Per prima cosa occorre accedere alla shell della macchina per eseguire alcuni comandi, qui abbiamo due possibilità:
  1. Accedere alla console o in ssh, selezionare 8) Shell;
  2. Accedere al menù Diagnostics > Command Prompt;
Al prompt dei comandi eseguiamo il seguente comando per generare una chiave di crittografia
openvpn --genkey --secret /tmp/secret


Ora eseguiamo il seguente comando per avviare il test
time openvpn --test-crypto --secret /tmp/secret --verb 0 --tun-mtu 20000 --cipher aes-256-cbc

Il risultato sarà simile al seguente ed è espresso in secondi

47.46 real        47.33 user         0.06 sys 




Ora prendiamo il risultato del campo contrassegnato da real ed utilizzandolo come dividendo del divisore 3200,16 

3200,16 mbit / 47,46 sec = 67,43 Mbps

Il valore risultante è la velocità massima teorica con cui il nostro firewall è in grado di criptare traffico con l'algoritmo aes-256-cbc

Chi non si ferma al semplice utilizzo della formuletta, si sarà chiesto cosa fa il comando e da dove deriva il numero 3200,16

La spiegazione è abbastanza semplice. Il comando non fa altro che eseguire un test di crittografia sfruttando la chiave generata in precedenza e l'algoritmo prescelto. Il test cripta e decripta  un pacchetto di dimensione crescente fino a 20.000 byte

Il 3200,16 non è altro che il valore in mbit processati per il test. Il valore è ottenuto a partire dal parametro --tun-mtu. Si calcola la sommatoria che va da 1 a 20000 (byte) 
Il valore ottenuto va moltiplicato per 2 (cript e decript), 

200.010.000 byte x 2(cript e decrypt) = 40.002.000 byte

lo si trasforma in bit moltiplicandolo per 8 (bit)

40.002.000 byte x 8 bit = 3.200.160.000 bit

lo ritrasformiamo in mbit dividendo per 1.000.000

3.200.160.000 bit / 1.000.000 bit = 3200,16 mbit

Per dare qualche riferimento sulle potenzialità dei diversi processori, ripoto i risultati di alcuni apparati che uso normalmente:

Modello: PF-1120A
Processore: Intel Atom CPU D525 @ 1.80GHz
Performance: 66,67 Mbps

Modello: PF-3130
Processore: Intel Celeron CPU G1620 @ 2.70GHz
Performance: 240,8 Mbps

Modello: PF-5150i
Processore: Intel Core i7-4790 CPU @ 3.60GHz
Performance: 395 Mbps

Cosa fare se ci servono performance migliori anchesolo di qualche punto?


Molto semplice, abbiamo visto che uno dei parametri chiave è l'algoritmo di crittografia, se abbiamo studiato un minimo, dovremmo sapere che gli algoritmi di crittografia impattano in modo diverso sul processore e normalmente abbiamo performance peggiori all'aumentare della sicurezza dell'algoritmo.
Quindi possiamo agire su due fronti:
  1. Cambiare l'algoritmo di crittografia scegliendone uno più performante per la nostra macchina;
  2. Installare o attivare hardware dedicato alla crittografia;
Per approfondire questi due aspetti potete leggere l'articolo: Qual'è l'algoritmo crittografico migliore per le VPN?

Conclusioni


Come detto fin dall'inizio, questo è un buon metodo per testare e conoscere le potenzialità della nostra macchina, tuttavia il risultato ottenuto deve essere considerato come teorico poiché durante la trasmissione entrano in gioco numerosi fattori che non sono presenti durante il test. Difficilmente nella realtà riusciremo a raggiungere il valore rilevato con il test.

Posta un commento