Melhorando o desempenho do OpenVPN

10

Eu tenho tentado melhorar meu desempenho OpenVPN e esta é minha configuração atual:

 cat /etc/openvpn/server.conf
port 443 #- port
proto tcp #- protocol
dev tun
#tun-mtu 1500
tun-mtu-extra 32 
#mssfix 1450
tun-mtu 64800
mssfix 1440
reneg-sec 0
ca /etc/openvpn/easy-rsa/2.0/keys/ca.crt
cert /etc/openvpn/easy-rsa/2.0/keys/server.crt
key /etc/openvpn/easy-rsa/2.0/keys/server.key
dh /etc/openvpn/easy-rsa/2.0/keys/dh1024.pem
plugin /etc/openvpn/openvpn-auth-pam.so /etc/pam.d/login
#plugin /usr/share/openvpn/plugin/lib/openvpn-auth-pam.so /etc/pam.d/login #- Comment this line if you are using FreeRADIUS
#plugin /etc/openvpn/radiusplugin.so /etc/openvpn/radiusplugin.cnf #- Uncomment this line if you are using FreeRADIUS
client-to-client
client-cert-not-required
username-as-common-name
server 10.8.0.0 255.255.255.0
push "redirect-gateway def1"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
keepalive 5 30
comp-lzo
persist-key
persist-tun
status 1194.log
verb 3

CLIENTE:

client
dev tun
proto tcp
remote 18.4.26.8 443
resolv-retry infinite
nobind
tun-mtu 64800
tun-mtu-extra 32
mssfix 1440
persist-key
persist-tun
auth-user-pass
comp-lzo
verb 3

Fiz algumas alterações no MTU e no MSSFIX a partir do que encontrei na web.

Há alguma alteração no kernel que eu possa fazer? Esta é uma caixa do CentOS 6.x. Encontrei algumas coisas para o BSD, mas nada funcionou no Linux.

Sei que o TCP é mais lento que o UDP, mas preciso ser parecido com o tráfego SSL para passar por um firewall na rede.

Outras idéias?

PING para outro cliente na rede na qual eu RDP.

Pinging 10.8.0.6 with 32 bytes of data:
Reply from 10.8.0.6: bytes=32 time=152ms TTL=128
Reply from 10.8.0.6: bytes=32 time=565ms TTL=128
Reply from 10.8.0.6: bytes=32 time=152ms TTL=128
Reply from 10.8.0.6: bytes=32 time=782ms TTL=128

Ping statistics for 10.8.0.6:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 152ms, Maximum = 782ms, Average = 412ms

Existem maneiras de melhorar o desempenho ou eliminar alguns ping?

EDIT: Definir a configuração de fragmentação ajudaria alguns?


fonte
I know TCP is slower then UDP but I need to be able to look like SSL traffic to get thru a firewall on the network.Por que não pedir ao administrador da rede que abra a porta openvpn no trabalho? Em uma nota relacionada, esta questão como está pode violar os termos das Perguntas frequentes que Licensing, legal advice, and *circumvention of security or policy*eu esclareceria.
prateek61
1
Não há nada de ilegal nisso. É apenas a única maneira de acessar meus próprios sistemas remotamente. :)
2
Eu estava falando mais sobre ignorar a política de firewall onde quer que você esteja. Por que você não pode pedir ao administrador da rede para abrir a porta? Eu realmente não estava falando sobre a legalidade, mais sobre contornar a política de segurança.
Prateek61 # 13/13
Talvez sshuttle iria funcionar melhor para você para tcp-over-tcp vpn
ptman

Respostas:

13

Resposta curta: desativar comp-lzo.

Percebo que este é um post antigo, mas também sofria com o fraco desempenho do OpenVPN. Eu tinha tentado de tudo, ajustando o MTU, mudando os buffers snd e rcv, mss clamping, o que você quiser. A carga da CPU era insignificante.

Por capricho, desabilitei a compactação (removida comp-lzodo cliente e do servidor) e o desempenho aumentou 2-4x.

Assim, com comp-lzoativado, meu desempenho máximo foi em torno de 25-30 Mbit / s, e sem ele atingi 120 Mbit / s (velocidade da minha conexão com a Internet).

O servidor é um Xeon E5-2650, o cliente é o Core i5-3320M. Ambos executando o OpenVPN 2.3.10, AES-256-CBC, SHA512. Meu Chromebook Intel também aumentou a velocidade da Internet. O desempenho dobrou nos meus clientes Android (14 Mbit / s -> 30 Mbit / s), correspondendo à velocidade do túnel IKEv2.

Ingenium
fonte
6

O TCP será / muito / mais lento que o UDP, causado pelo problema de TCP sobre TCP . Basicamente, o TCP depende de quedas / congestionamento de pacotes para identificar parâmetros de conexão, e suas conexões TCP-sobre-OpenVPN não apresentam nenhuma delas. Mas você disse que não é uma opção.

Você também pode tentar a mtu-discopção de descobrir automaticamente as configurações ideais da MTU para sua conexão. Existem pequenas diferenças em locais diferentes, como a configuração MTU do OpenVPN, incluindo o tamanho do cabeçalho Ethernet. [ 1 ]

Sua tun-mtuconfiguração é enorme, pois um pacote de 65 KB terá muitos problemas de latência na Internet (os pacotes IPv4 jumbo têm cerca de 9000 bytes de tamanho e funcionam principalmente em redes locais). Tente algo abaixo de 1460, como 1300, para ver se o problema é MTU.

chronospoon
fonte
2
Obrigado, isso resolveu meu problema ao fazer com que uma consulta postgresql funcionasse no OpenVPN. Funcionou ao consultar sobre uma única coluna, mas não para toda a coluna. Aparentemente, isso foi causado pelo tamanho padrão da MTU de 1500. A configuração para 1300 ajudou!
Christian Benke
2

Mesmo que isso seja um pouco tarde, você pode tentar o que eu fiz:

remova todas as opções relacionadas a mss, mtu etc.

faça uma varredura de porta em sua instituição e selecione uma porta UDP, geralmente 53 portas GRE / 123 NDP devem estar abertas:

Adicione estas linhas à sua configuração de servidor (ref aqui )

#possible bandwidth increase
sndbuf 393216
rcvbuf 393216
push "sndbuf 393216"
push "rcvbuf 393216"

Eu não entendo completamente essas configurações, mas elas certamente ajudaram, alguns dizem que ajuda muito, na minha experiência, aumentou minha taxa de transferência em +/- 30%

Inicie o servidor em uma dessas portas e você deve estar pronto: P

Espero que isto ajude!

Cybex
fonte
9
-1 por muito vodoo e sem entender o que as coisas realmente fazem. Acho irresponsável recomendar algo então, honestamente.
Preexo
0

sndbuf e rcvbuf corrigem uma configuração ANTIGA no linux / unix / openvpn desde os dias de discagem para otimizar as configurações mais lentas, mesmo que o sistema operacional seja otimizado para as mais rápidas

sndbuf / rcvbuf definido como 0 simplesmente usará as configurações do sistema operacional

push é usado para garantir que o cliente esteja definido corretamente, mas é necessário um valor.

jack
fonte