¿Cómo mejoro la confiabilidad de OpenVPN sobre un enlace de alta latencia?

11

Estamos ejecutando una VPN OpenVPN sobre un enlace satelital BGAN donde los tiempos de ping son de aproximadamente 3 segundos. Lo usamos en una configuración tun y estamos ejecutando en Linux (CentOS). Principalmente se enviará un correo electrónico a través del enlace, pero tan pronto como el correo contenga archivos adjuntos grandes, la VPN parece detenerse.

El "Puedo hacer ping a través del túnel, pero cualquier trabajo real hace que se bloquee. ¿Es este un problema de MTU?" La pregunta en las preguntas frecuentes de OpenVPN parece describir exactamente mi problema, pero usar mssfixy fragmenttodavía no parece hacer mucho para mejorar la situación.

Mi prueba principal es copiar un archivo de 2 MB a través de la VPN con scp . Copiará aproximadamente 192kbytes, y luego informará un estado - estancado - . Si espero un par de segundos, comenzará a copiarse nuevamente y luego se detendrá nuevamente después de otro par de kbytes.

Este bloqueo se produce independientemente de si configuré las opciones fragmento mssfixen mi configuración de OpenVPN (aunque la configuración fragment 1000pareció reducir el bloqueo, pero no lo eliminó). OpenVPN mtu-testinformó 1542 como el tamaño de MTU.

He buscado en Internet más consejos sobre cómo y cuándo usar mssfixy fragment, pero solo encuentro páginas que dicen lo mismo que las Preguntas frecuentes, y no dan detalles sobre cómo y cuándo usar qué parámetros.

Mi pregunta entonces es:

  • ¿Cuándo uso mssfixy fragment?
  • ¿Utilizo mssfixy fragmenten combinación?
  • Si mssfixy fragmentson la solución, lo que son los tun-mtu, link-mtuy mtu-discparámetros para?

Además, he estado usando la herramienta iperf para medir el ancho de banda. Sin la VPN, mide constantemente en el orden de 210Kbits / seg.

Cuando se usa iperf sobre la VPN ( $ iperf -c remoteserver -t60 -i5), comenzaría a 10Kbits / seg, luego subiría constantemente hasta que reportara 1.2Mbits / seg, y luego parecería detenerse, donde informa 0kbits / seg por varias iteraciones (I piensa que los 1.2Mbits / seg pueden deberse a algún búfer de OpenVPN, etc.)

¿Es iperf la mejor forma de medir el ancho de banda?

Cualquier ayuda con esta situación será muy apreciada.

iWerner
fuente
¿Openvpn está utilizando TCP o UDP en este momento?
pjc50
Actualmente está utilizando UDP
iWerner el
Gracias por todas las respuestas, pero tuve que parar temporalmente porque la unidad BGAN se quedó sin tiempo aire. Espero acuñar hoy más tarde. Debo mencionar que preferimos permanecer con UDP, como el uso de TCP duplicaría los datos enviados a través de la red (y por lo tanto el costo, por lo que nuestro cliente ya es muy sensible)
iWerner

Respuestas:

5

1542 como una MTU? Nunca he oído hablar de eso para un enlace WAN. Por lo general, MTU es la carga útil máxima, el tamaño del paquete ip menos el encabezado para IP (20 bytes) e ICMP (8 bytes). Eso significa MTU = 1500 para una LAN Ethernet tradicional. Además, la mayoría de las VPN introducen una sobrecarga para su encapsulación de paquetes. Una VPN MTU típica es 1400.

En las redes modernas, es difícil concluir cuál será la MTU en cualquier momento, ya que las rutas de entrada y salida pueden ser diferentes, y también pueden cambiar debido al enrutamiento automático de la ruta. Para una red como esta, puede ser más efectivo establecer la MTU baja en sus hosts que están a ambos lados del enlace VPN, como 576.

MSS (tamaño máximo de segmento) es MTU menos los encabezados IP + TCP (40 bytes). Esto normalmente es negociado por la pila de red, y generalmente no tiene los mismos problemas de negociación que MTU, a menos que MTU esté equivocado. (La negociación de MTU generalmente se ve afectada por ICMP bloqueado o enrutadores de agujeros negros).

Lo primero que haría es hacer una captura de paquetes de red en el extremo de envío y ordenar la pantalla por tamaño de trama (es posible que deba agregar esta columna en Wireshark). Debe verificar que no está enviando ningún marco que sea de gran tamaño, lo que esperaría que fueran. No es inusual que las tarjetas de red modernas envíen marcos de gran tamaño si se habilitan opciones como Descarga de envío grande o Marcos jumbo. He visto más de 30,000 marcos de bytes cuando estas opciones están habilitadas.

Greg Askew
fuente
+1 para la captura de paquetes antes de cambiar cualquier cosa. incluso si no encuentra ningún marco enorme, es posible que vea paquetes 'normales' fragmentados en alguna parte.
Javier
1
Por defecto, OpenVPN establece la MTU del dispositivo tun en 1500 (que es la misma que la MTU en los dispositivos ethernet de nuestras máquinas). Todavía no estoy seguro de si la fragmentación de los paquetes VPN es algo bueno o malo. Las respuestas en este hilo parecen implicar que es malo, mientras que las otras referencias que encontré en la web implican que es bueno.
iWerner el
2
@ iwerner: ¿has intentado determinar el tamaño de mtu con ping? Si ICMP no está deshabilitado en alguna parte, puede usar lo siguiente en Windows: ping -f -l 1372 <destination ip>. Sigue reduciendo el número hasta que tenga éxito. En Linux, ping -s 1372 -M do <IP de destino>. Para su información, las preguntas frecuentes de OpenVPN recomiendan usar mssfix 1200, pero eso no aborda la causa raíz. El uso de soluciones VPN para fragmentar siempre tiene el potencial de afectar el rendimiento. Si tiene una configuración VPN grande, no podrá utilizar la fragmentación en el extremo del concentrador central, solo en el extremo de la oficina remota.
Greg Askew el
2

Solo por curiosidad, ¿ha intentado reducir la MTU de la interfaz de red? Quizás el enlace satelital arruina mal la fragmentación. Como una nota contra intuitiva, es posible que desee probar openvpn sobre TCP para cambiar. Sé que debería disminuir el rendimiento, pero si no tienes control sobre la fragmentación a lo largo de la línea, podría ayudarte.

lorenzog
fuente
Iba a sugerir lo contrario :): este caso de alta latencia es aquel en el que aparecen los problemas de TCP en TCP y UDP lo evitará.
pjc50
Supuse que estaba usando el puerto UDP predeterminado para openvpn, y por lo tanto sugerí lo contrario ... sí, normalmente estaría de acuerdo con usted. Pero bueno, todos sabemos que es administrador de sistemas de ensayo y error, y por lo general 'try-haciendo-el-frente-ver-si-it-works' :)
lorenzog
Gracias. En este momento estamos usando UDP, y nunca se me ocurrió intentar TCP. (Si tuviera más rep te habría upvoted)
iWerner
@iWerner: gracias :) también, intente reducir MTU progresivamente en el iface, y vea cuándo se detiene (si lo hace).
lorenzog
2

Cuando use TCP, aumente el tamaño de la ventana de TCP; esto ayudará con el "número de paquetes en el aire".

Ha pasado un tiempo desde que tuve que jugar con estas cosas, pero aquí hay un enlace que Google encontró para mí.

Después de volver a leer su pregunta, veo que está ejecutando BGAN. Le echaría un buen vistazo a esto (o simplemente busque en Google: "BGAN spoofing").

En cuanto a la medición del ancho de banda, he encontrado que iperf es bastante decente siempre que use tamaños de paquete razonables.

Remolino
fuente
Esto es interesante: menciona que el acelerador TCP está disponible para Redhat, mientras que las personas de Inmarsat con las que hablamos dijeron que solo estaba disponible para Windows y OS X (y esto es lo que dice el sitio web de Inmarsat / BGAN)
iWerner
Puede que no lo tengan ahora; Veo que la fecha del documento es 07. Si presiona lo suficiente y habla con suficiente gente; puede encontrar a alguien con una copia anterior. En general, cuando llama por teléfono, recibe soporte de primer nivel. Probaré algunos de mis contactos pero no hay garantías.
Eddy
Obtuve la carrera de nuestro proveedor de satélite; Es difícil encontrar a alguien que sepa de qué están hablando. Seguiré intentándolo, mientras tanto aquí hay algo que probar: sourceforge.net/projects/pepsal De la descripción del proyecto está haciendo más o menos lo que está haciendo el software de Inmarsat: PEPsal es un TCP integrado, multicapa y transparente mejora del rendimiento del Proxy que se divide la conexión en dos partes, haciendo uso de las mejoras Linux TCP cuando se envían datos, y mejorar en gran medida el rendimiento de enlaces con diferentes características
Eddy
2

Creo que podrías estar ladrando al árbol equivocado. Cada vez que he tenido problemas de MTU incorrectos, el tráfico se detuvo mucho antes de 192 KB. Creo que está más relacionado con algunos en la ventana de "paquetes en vuelo", ya sea la ventana TCP, o tal vez algunos buffers en el enlace ascendente del satélite.

Definitivamente haga algunas capturas de paquetes largas (tanto 'dentro' como 'fuera' de la VPN) y vea si está obteniendo todos los ACK's

Javier
fuente