Mejora del rendimiento de OpenVPN

10

He estado tratando de mejorar mi rendimiento OpenVPN y esta es mi configuración actual:

 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

Hice algunos cambios en MTU y MSSFIX de lo que encontré en la web.

¿Hay algún cambio en el kernel que pueda hacer? Esta es una caja de CentOS 6.x. Encontré algunas cosas para BSD pero nada que funcionó para Linux.

Sé que TCP es más lento que UDP, pero necesito poder parecer tráfico SSL para atravesar un firewall en la red.

¿Otras ideas?

PING a otro cliente en la red en la que realizo 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

¿Hay alguna forma de mejorar el rendimiento o dejar de hacer ping?

EDITAR: ¿Le ayudaría establecer la configuración de fragmentación?


fuente
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 qué no le pide a su administrador de red que abra el puerto openvpn en el trabajo? En una nota relacionada, esta pregunta tal como está puede violar los términos de las preguntas frecuentes Licensing, legal advice, and *circumvention of security or policy*que aclararía.
prateek61
1
No hay nada ilegal al respecto. Es solo la única forma de acceder a mis propios sistemas de forma remota. :)
2
Estaba hablando más sobre eludir la política de firewall en donde quiera que estés. ¿Por qué no puede pedirle al administrador de red que abra el puerto? Realmente no estaba hablando sobre la legalidad, más sobre eludir la política de seguridad.
prateek61
Quizás sshuttle funcionaría mejor para tpp -over-tcp vpn
ptman

Respuestas:

13

Respuesta corta: deshabilitar comp-lzo.

Me doy cuenta de que esta es una publicación antigua, pero también estaba sufriendo un bajo rendimiento de OpenVPN. Lo había intentado todo, ajustando la MTU, cambiando los búferes snd y rcv, sujeción mss, lo que sea. La carga de la CPU fue insignificante.

Por capricho, deshabilité la compresión (eliminada comp-lzodel cliente y del servidor) y el rendimiento aumentó 2-4x.

Entonces, con comp-lzohabilitado mi rendimiento máximo fue de alrededor de 25-30 Mbit / s, y sin él alcancé 120 Mbit / s (mi velocidad de conexión a Internet).

El servidor es un Xeon E5-2650, el cliente es Core i5-3320M. Ambos ejecutan OpenVPN 2.3.10, AES-256-CBC, SHA512. Mi Intel Chromebook también maximizó mi velocidad de internet. El rendimiento se duplicó en mis clientes Android (14 Mbit / s -> 30 Mbit / s), igualando la velocidad del túnel IKEv2.

Ingenium
fuente
6

TCP va a ser / mucho / más lento que UDP, causado por el problema de TCP sobre TCP . Básicamente, TCP se basa en la caída / congestión de paquetes para identificar los parámetros de conexión, y sus conexiones TCP sobre OpenVPN no experimentan ninguno de esos. Pero has dicho que no es una opción.

También puede probar la mtu-discopción de descubrir automáticamente la configuración óptima de MTU para su conexión. Hay ligeros desajustes en diferentes lugares, como la configuración MTU de OpenVPN, incluido el tamaño del encabezado Ethernet. [ 1 ]

Su tun-mtuconfiguración es enorme, ya que un paquete de 65 KB tendrá muchos problemas de latencia a través de Internet (los paquetes jumbo IPv4 tienen un tamaño de alrededor de 9000 bytes y funcionan principalmente en redes locales). Pruebe algo inferior a 1460, como 1300, para ver si MTU es su problema.

cronospoon
fuente
2
Gracias, eso resolvió mi problema al hacer que una consulta postgresql funcionara sobre OpenVPN. Funcionó al consultar sobre una sola columna, pero no para toda la columna. Aparentemente eso fue causado por el tamaño de MTU predeterminado de 1500. ¡Establecerlo en 1300 ayudó!
Christian Benke
2

Aunque esto puede ser un poco tarde, puede intentar lo que hice:

eliminar todas las opciones relacionadas con mss, mtu, etc.

haga un escaneo de puertos en su institución y seleccione un puerto UDP, generalmente deben abrirse 53 puertos GRE / 123 NDP:

Agregue estas líneas a la configuración de su servidor (ref aquí )

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

No entiendo completamente estas configuraciones, pero seguramente ayudaron, algunos dicen que ayuda mucho, en mi experiencia, aumentó mi rendimiento en +/- 30%

Inicie el servidor en uno de esos puertos y debería estar listo: P

¡Espero que esto ayude!

Cybex
fuente
99
-1 por demasiado vudú y no entender lo que realmente hacen las cosas. Me parece irresponsable recomendar algo, honestamente.
Preexo
0

sndbuf y rcvbuf corrigen una configuración ANTIGUA en linux / unix / openvpn de los días de acceso telefónico para optimizar las configuraciones más lentas aunque el sistema operativo esté optimizado para las más rápidas

sndbuf / rcvbuf configurado en 0 simplemente usará la configuración del sistema operativo

push se usa para asegurarse de que el cliente esté configurado correctamente, pero allí necesita un valor.

Jack
fuente