Los ping funcionan, las transferencias grandes se cuelgan y el túnel se declara sano. Alguien baja la MTU de la interfaz, otro ajusta la MSS y, de vez en cuando, el problema desaparece por motivos que nadie anota. Los dos números describen objetos distintos, así que cambiar el equivocado produce una solución que parece suerte. Este es el procedimiento: identifique la capa, aplique el ajuste correspondiente y luego pruebe en una conexión nueva.

Dos números, dos objetos

La MTU pertenece a un enlace o a una interfaz: es el paquete más grande que se puede entregar sin dividirlo. La MSS pertenece a TCP: es la mayor cantidad de carga TCP que puede llevar un segmento, y excluye tanto las cabeceras TCP como las IP. En un enlace Ethernet normal con IPv4, una MTU de 1500 bytes da la conocida MSS de 1460 bytes. Esos números describen capas distintas y se intercambian mediante mecanismos distintos. Confundirlos es fácil porque ambos se miden en bytes y ambos rondan 1500.

Uno llega como ajuste de la interfaz. El otro llega como opción dentro de un segmento SYN, negociada entre extremos que nunca ven su interfaz.

Dónde acaba la sobrecarga exterior

Una VPN mete el paquete interior dentro de otro, y el paquete exterior tiene que caber en la ruta física. Las cabeceras de encapsulación, la cabecera IP exterior, la cabecera de transporte y cualquier etiqueta de autenticación consumen bytes que el paquete interior no puede usar. Deje la interfaz del túnel en 1500 y el paquete exterior superará habitualmente lo que la ruta puede transportar. Con el bit 'no fragmentar' activado, el enrutador lo descarta y debería devolver un error ICMP; si ese error se filtra, el emisor nunca se entera.

Por eso el fallo parece selectivo. Las peticiones pequeñas se completan y todo lo que llena un segmento se atasca, porque solo se descartan los paquetes grandes. Un túnel que pasa un ping no es un túnel que transporta datos.

Ajustar la MSS y dónde se aplica

El ajuste de MSS reescribe el valor del segmento SYN cuando cruza un punto elegido, lo que hace que ambos extremos elijan una carga menor sin que ninguno sepa por qué. En Linux es un objetivo de la tabla mangle que aplica una regla explícita, y debe afectar a los paquetes SYN en la dirección que usted quiere. Limítelo a la interfaz del túnel y al rango de direcciones, porque una regla amplia cambia el comportamiento de tráfico que nunca entra en el túnel.

El efecto es solo para TCP. Una aplicación UDP, una sesión QUIC y cualquier protocolo que construya sus propios datagramas no se ven afectados.

Diagnostique con una ruta fija

Mantenga una variable a la vez. Pruebe con un paquete cuyo tamaño elija usted, y active el indicador 'no fragmentar' para que el núcleo informe del resultado en lugar de ocultarlo.

Anote dónde empieza el fallo: dentro del túnel, en la interfaz del túnel o en la ruta física después de la encapsulación. Luego cambie un número y repita la misma prueba, no otra. Las conexiones existentes conservan la MSS que negociaron, así que un cambio de política solo se ve en una conexión nueva, y por eso una página en caché no demuestra nada en ningún sentido. Si una carga grande empieza a funcionar, ha aprendido sobre esa ruta y no sobre cada protocolo que pasa por ella.

Qué no arregla cada cambio

Bajar la MTU de la interfaz no altera la MSS de una sesión ya establecida. Ajustar la MSS no ayuda a un flujo UDP y no repara una ruta en la que los errores ICMP se filtran en una sola dirección. Cada cambio arregla una clase de problema y deja el resto exactamente como estaba.

Anote qué ajuste aplicó, dónde y qué prueba mostró la diferencia, porque si no el siguiente ingeniero aplica ambos y pierde la capacidad de decir cuál importaba. Si la restricción es real y permanente, prefiera una MTU de túnel que la refleje antes que un ajuste que la oculte. Si tiene que ajustar, deje la regla acotada y comentada, ya que una regla mangle sin explicación se vuelve permanente por defecto.

Artículos relacionados