Sto riscontrando velocità di trasferimento OpenVPN estremamente lente tra due server. Per questa domanda, chiamerò i server Server A e Server B.
Sia il server A che il server B eseguono CentOS 6.6. Entrambi si trovano in datacenter con una linea da 100 Mbit e i trasferimenti di dati tra i due server al di fuori di OpenVPN vengono eseguiti vicino a ~ 88 Mbps.
Tuttavia, quando provo a trasferire qualsiasi file tramite la connessione OpenVPN che ho stabilito tra il server A e il server B, ottengo una velocità effettiva di circa 6,5 Mbps.
Risultati dei test da iperf:
[ 4] local 10.0.0.1 port 5001 connected with 10.0.0.2 port 49184
[ 4] 0.0-10.0 sec 7.38 MBytes 6.19 Mbits/sec
[ 4] 0.0-10.5 sec 7.75 MBytes 6.21 Mbits/sec
[ 5] local 10.0.0.1 port 5001 connected with 10.0.0.2 port 49185
[ 5] 0.0-10.0 sec 7.40 MBytes 6.21 Mbits/sec
[ 5] 0.0-10.4 sec 7.75 MBytes 6.26 Mbits/sec
A parte questi test iperf OpenVPN, entrambi i server sono praticamente completamente inattivi con carico zero.
Al server A è assegnato l'IP 10.0.0.1 ed è il server OpenVPN. Al server B è assegnato l'IP 10.0.0.2 ed è il client OpenVPN.
La configurazione OpenVPN per il server A è la seguente:
port 1194
proto tcp-server
dev tun0
ifconfig 10.0.0.1 10.0.0.2
secret static.key
comp-lzo
verb 3
La configurazione OpenVPN per il server B è la seguente:
port 1194
proto tcp-client
dev tun0
remote 204.11.60.69
ifconfig 10.0.0.2 10.0.0.1
secret static.key
comp-lzo
verb 3
Quello che ho notato:
1. Il mio primo pensiero è stato che stavo strozzando la CPU sul server. OpenVPN è a thread singolo ed entrambi questi server eseguono processori Intel Xeon L5520 che non sono i più veloci. Tuttavia, ho eseguito un top
comando durante uno dei test iperf e ho premuto 1
per visualizzare l'utilizzo della CPU da parte del core e ho scoperto che il carico della CPU era molto basso su ciascun core:
top - 14:32:51 up 13:56, 2 users, load average: 0.22, 0.08, 0.06
Tasks: 257 total, 1 running, 256 sleeping, 0 stopped, 0 zombie
Cpu0 : 2.4%us, 1.4%sy, 0.0%ni, 94.8%id, 0.3%wa, 0.0%hi, 1.0%si, 0.0%st
Cpu1 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu2 : 0.0%us, 0.0%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.3%st
Cpu3 : 0.3%us, 0.0%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu4 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu5 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu6 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu7 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu8 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu9 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu10 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu11 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu12 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu13 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu14 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu15 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 946768k total, 633640k used, 313128k free, 68168k buffers
Swap: 4192188k total, 0k used, 4192188k free, 361572k cached
2. I tempi di ping aumentano considerevolmente sul tunnel OpenVPN mentre iperf è in esecuzione. Quando iperf non è in esecuzione, i tempi di ping sul tunnel sono costantemente 60 ms (normale). Ma quando iperf è in esecuzione e spinge traffico intenso, i tempi di ping diventano irregolari. Di seguito puoi vedere come i tempi di ping sono stabili fino al 4 ° ping quando ho iniziato il test iperf:
PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
64 bytes from 10.0.0.2: icmp_seq=1 ttl=64 time=60.1 ms
64 bytes from 10.0.0.2: icmp_seq=2 ttl=64 time=60.1 ms
64 bytes from 10.0.0.2: icmp_seq=3 ttl=64 time=60.2 ms
** iperf test begins **
64 bytes from 10.0.0.2: icmp_seq=4 ttl=64 time=146 ms
64 bytes from 10.0.0.2: icmp_seq=5 ttl=64 time=114 ms
64 bytes from 10.0.0.2: icmp_seq=6 ttl=64 time=85.6 ms
64 bytes from 10.0.0.2: icmp_seq=7 ttl=64 time=176 ms
64 bytes from 10.0.0.2: icmp_seq=8 ttl=64 time=204 ms
64 bytes from 10.0.0.2: icmp_seq=9 ttl=64 time=231 ms
64 bytes from 10.0.0.2: icmp_seq=10 ttl=64 time=197 ms
64 bytes from 10.0.0.2: icmp_seq=11 ttl=64 time=233 ms
64 bytes from 10.0.0.2: icmp_seq=12 ttl=64 time=152 ms
64 bytes from 10.0.0.2: icmp_seq=13 ttl=64 time=216 ms
3. Come accennato in precedenza, ho eseguito iperf al di fuori del tunnel OpenVPN e il throughput era normale - ~ 88 Mbps in modo coerente.
Cosa ho provato:
1. Pensavo che la compressione potesse sporcare le cose, quindi ho disattivato la compressione rimuovendo comp-lzo
da entrambe le configurazioni e riavviando OpenVPN. Nessun miglioramento.
2. Anche se in precedenza avevo riscontrato che l'utilizzo della CPU era basso, pensavo che la cifra predefinita potesse essere un po 'troppo intensa per il sistema. Quindi ho aggiunto cipher RC2-40-CBC
a entrambe le configurazioni (un codice molto leggero) e ho riavviato OpenVPN. Nessun miglioramento.
3. Ho letto su vari forum su come ottimizzare il frammento, mssfix e mtu-tun potrebbero aiutare con le prestazioni. Ho giocato con alcune varianti come descritto in questo articolo , ma ancora una volta, nessun miglioramento.
Qualche idea su cosa potrebbe causare prestazioni OpenVPN così scarse?
cipher none
anche se dubito che possa aiutare.