Estoy experimentando tasas de transferencia de OpenVPN extremadamente lentas entre dos servidores. Para esta pregunta, llamaré a los servidores Servidor A y Servidor B.
Tanto el servidor A como el servidor B ejecutan CentOS 6.6. Ambos se encuentran en centros de datos con una línea de 100Mbit y las transferencias de datos entre los dos servidores fuera de OpenVPN se ejecutan cerca de ~ 88Mbps.
Sin embargo, cuando intento transferir cualquier archivo a través de la conexión OpenVPN que he establecido entre el Servidor A y el Servidor B, obtengo un rendimiento de alrededor de 6.5Mbps.
Resultados de la prueba de 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
Además de estas pruebas iperf de OpenVPN, ambos servidores están prácticamente completamente inactivos con carga cero.
El servidor A tiene asignada la IP 10.0.0.1 y es el servidor OpenVPN. El servidor B tiene asignada la IP 10.0.0.2 y es el cliente OpenVPN.
La configuración de OpenVPN para el Servidor A es la siguiente:
port 1194
proto tcp-server
dev tun0
ifconfig 10.0.0.1 10.0.0.2
secret static.key
comp-lzo
verb 3
La configuración de OpenVPN para el Servidor B es la siguiente:
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
Lo que he notado:
1. Mi primer pensamiento fue que estaba bloqueando la CPU en el servidor. OpenVPN es de un solo subproceso y ambos servidores ejecutan procesadores Intel Xeon L5520 que no son los más rápidos. Sin embargo, ejecuté un top
comando durante una de las pruebas de iperf y presioné 1
para ver la utilización de la CPU por núcleo y descubrí que la carga de la CPU era muy baja en cada núcleo:
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. Los tiempos de ping aumentan considerablemente sobre el túnel OpenVPN mientras se ejecuta iperf. Cuando iperf no se está ejecutando, los tiempos de ping sobre el túnel son consistentemente de 60 ms (normal). Pero cuando iperf se está ejecutando y empujando mucho tráfico, los tiempos de ping se vuelven erráticos. Puede ver a continuación cómo los tiempos de ping son estables hasta el cuarto ping cuando comencé la prueba de 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. Como se mencionó anteriormente, ejecuté iperf fuera del túnel OpenVPN y el rendimiento fue normal - ~ 88Mbps consistentemente.
Lo que probé:
1. Pensé que la compresión podría estar ensuciando las cosas, así que apagué la compresión al eliminar comp-lzo
ambas configuraciones y reiniciar OpenVPN. Sin mejora.
2. Aunque anteriormente descubrí que la utilización de la CPU era baja, pensé que el cifrado predeterminado podría ser demasiado intenso para que el sistema lo mantuviera. Así que agregué cipher RC2-40-CBC
a ambas configuraciones (un cifrado muy liviano) y reinicié OpenVPN. Sin mejora.
3. Leí en varios foros acerca de cómo ajustar el fragmento, mssfix y mtu-tun podría ayudar con el rendimiento. Jugué con algunas variaciones como se describe en este artículo , pero de nuevo, no hay mejora.
¿Alguna idea sobre lo que podría estar causando un rendimiento tan pobre de OpenVPN?
cipher none
aunque dudo que ayude.