¿Problemas con conexiones seguras? Puede ser el MTU

¿Has cambiado de router y las conexiones https te fallan de una manera misteriosa? ¿Se te interrumpe una conexion segura ssh cuando intentas copiar un fichero grande a través de ella? Estos y otros son síntomas de que tienes problemas con el valor de tu MTU.

Sí, sí, has leído bien. No te estoy vacilando. Es un error conocido, pero difícil de diagnosticar (porque no es obvio), y los que lo padecen no siempre se les da la solución correcta (o solución alguna).

El problema parece surgir cuando en una de las subredes por las que pasan nuestros paquetes, el router decide fragmentarlos porque su tamaño es mayor que la MTU que admite dicha subred. Por ejemplo, nuestro router ADSL cuando va a enviar nuestros paquetes por la conexión PPPoE a nuestro ISP. Nuestra MTU en la red local hasta el router seguramente está configurada para un tamaño de 1500, y la del interfaz PPPoE también. Pero PPPoE introduce una sobrecarga por las cabeceras adicionales del protocolo, lo que provoca que los paquetes a enviar superen los 1500 y el router los fragmente. Con la mala suerte que a algunos protocolos cifrados —como SSL— no les gusta eso y dejan de funcionar.

Por eso, en una conexión ssh donde estamos enviando comandos (paquetes pequeños) funciona sin problemas... hasta que intentamos enviar un fichero lo suficientemente grande como para generar paquetes del tamaño de la MTU, momento en el que la conexión se va a hacer gárgaras.

En el caso de los navegadores, vemos sin problemas las páginas http, pero cuando intentamos acceder a una página https (gmail, etc), el navegador empieza a comportarse de una manera extraña, que depende del navegador en cuestión. En el caso de Firefox, por ejemplo, aparece el mensaje de "This connection is untrusted" ("Esta conexión no está verificada" en español), pero no aparece la opción para añadir la excepción para continuar. El comportamiento es variable porque depende de cómo se maneje el error que provoca la fragmentación en el protocolo cifrado y éste en la aplicación.

¿Y cómo se soluciona? Puede tratarse de solucionar en el router, o puede tratarse de reducir la MTU en nuestro sistema linux de forma que los paquetes nunca se lleguen a fragmentar en el router.

Para cambiar la MTU de un interfaz basta con hacer:

ifconfig eth0 mtu 1454

En este caso eth0 es el interfaz por donde salen los paquetes hacia el router, y 1454 es un valor de MTU que aparece en muchas soluciones1.

Pero claro, esta es una solución temporal hasta que se reinicie el interfaz u ordenador. Para una solución permanente necesitamos poner el nuevo MTU del interfaz en los ficheros de configuración de la red, y eso varía de distribución a distribución. En Debian y derivados puedes guiarte por estas instrucciones y cambiar el MTU bien en el /etc/network/interfaces o en un nuevo fichero /etc/network/if-pre-up.d/mtu. Para otras distribuciones, sabiendo lo que se tiene que cambiar, debería ser fácil encontrar cómo hacerlo (y será en todo caso similar).

:wq


  1. podría necesitarse un valor todavía más pequeño, ya que depende del overhead concreto de las cabeceras del protocolo o protocolos que provocan la fragmentación. Pero si no funciona con 1400... malo. Tal vez no sea ese el problema. 

blogroll

social