Estou com taxas de transferência OpenVPN extremamente lentas entre dois servidores. Para esta pergunta, chamarei os servidores Servidor A e Servidor B.
O Servidor A e o Servidor B estão executando o CentOS 6.6. Ambos estão localizados em datacenters com uma linha de 100Mbit e as transferências de dados entre os dois servidores fora do OpenVPN são executadas perto de ~ 88Mbps.
No entanto, quando tento transferir arquivos pela conexão OpenVPN que estabeleci entre o Servidor A e o Servidor B, obtive uma taxa de transferência de cerca de 6,5 Mbps.
Resultados do teste do 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
Além desses testes de IPVer OpenVPN, os dois servidores estão praticamente ociosos com carga zero.
O servidor A recebe o IP 10.0.0.1 e é o servidor OpenVPN. O servidor B recebe o IP 10.0.0.2 e é o cliente OpenVPN.
A configuração do OpenVPN para o servidor A é a seguinte:
port 1194
proto tcp-server
dev tun0
ifconfig 10.0.0.1 10.0.0.2
secret static.key
comp-lzo
verb 3
A configuração do OpenVPN para o servidor B é a seguinte:
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
O que eu notei:
1. Meu primeiro pensamento foi que eu estava estrangulando a CPU no servidor. O OpenVPN é de thread único e ambos os servidores executam processadores Intel Xeon L5520, que não são os mais rápidos. No entanto, executei um top
comando durante um dos testes do iperf e pressionei 1
para exibir a utilização da CPU por núcleo e constatei que a carga da CPU era muito baixa em 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. Os tempos de ping aumentam consideravelmente no túnel OpenVPN enquanto o iperf está em execução. Quando o iperf não está em execução, os tempos de ping no túnel são consistentemente de 60ms (normal). Mas quando o iperf está rodando e gerando tráfego intenso, os tempos de ping se tornam irregulares. Você pode ver abaixo como os tempos de ping são estáveis até o 4º ping, quando iniciei o teste 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 mencionado acima, executei o iperf fora do túnel OpenVPN e a taxa de transferência era normal - ~ 88 Mbps de forma consistente.
O que eu tentei:
1. Pensei que a compactação estivesse atrapalhando as coisas, então desativei a compactação removendo as comp-lzo
duas configurações e reiniciando o OpenVPN. Nenhuma melhoria.
2. Embora eu tenha achado anteriormente que a utilização da CPU era baixa, achei que a cifra padrão poderia ser um pouco intensa para o sistema acompanhar. Então, adicionei cipher RC2-40-CBC
às duas configurações (uma cifra muito leve) e reiniciei o OpenVPN. Nenhuma melhoria.
3. Eu li em vários fóruns sobre como ajustar o fragmento, o mssfix e o mtu-tun podem ajudar no desempenho. Joguei com algumas variações, conforme descrito neste artigo , mas, novamente, nenhuma melhoria.
Alguma idéia do que poderia estar causando um desempenho tão ruim do OpenVPN?
cipher none
embora duvide que isso ajude.