Tiene un requisito que no se dobla: el lado remoto debe recibir el mismo paquete IP de 1,500 bytes que emite el emisor, encabezados incluidos. Un túnel no puede envolver ese paquete más su propio entramado dentro de un segundo paquete IP de 1,500 bytes, así que algo del diseño tiene que ceder. El orden de abajo es el que uso en una ventana de cambios: escribir el presupuesto de bytes, demostrar qué puede transportar realmente la red subyacente, después elegir exactamente un mecanismo de transporte y confirmar el paquete interno en el lado remoto.

Escriba el presupuesto de bytes antes de editar un perfil

La encapsulación añade bytes en varias capas, y el total es una propiedad de su perfil y no una constante que pueda consultar. La familia de direcciones, la elección de cifrado, el protocolo de transporte y cualquier opción de compresión o entramado mueven la cifra, por eso una resta copiada de otro despliegue no sirve como presupuesto. Empiece por el requisito interno, sume la sobrecarga medida por paquete de su propia configuración y escriba el tamaño externo resultante en el ticket de cambio antes de que nadie edite un archivo.

Dos números deciden el diseño: el paquete externo más grande que la ruta transporta sin fragmentación y los bytes adicionales que necesita su encapsulación. Cuando el primero es menor que el segundo más 1,500, uno de los dos tiene que cambiar. La elección es entonces estrecha y no creativa, por eso anoto ambos números antes de hablar de opciones. Nada en la capa de túnel comprime esos bytes y ningún entero de MTU elimina el requisito que le han dado.

Sondee la red subyacente con pings con el bit de no fragmentar

Mida la ruta en lugar de confiar en la MTU de la interfaz, porque el enlace más pequeño del camino externo es el que importa. En Linux, -M do fija el bit de no fragmentar y -s toma la carga ICMP, así que una trama de 1,500 bytes responde con 1,472 bytes de carga una vez restados la cabecera IP de 20 bytes y la cabecera ICMP de 8 bytes. Suba la carga hasta que la sonda falle y después salte a un tamaño jumbo para ver si la ruta lo transporta.

ping -M do -s 1472 -c 2 198.51.100.10
ping -M do -s 8972 -c 2 198.51.100.10
tracepath -n 198.51.100.10

Una ruta que pasa 1,472 y falla a 8,972 no puede transportar un paquete interno de 1,500 bytes más la sobrecarga en un solo paquete externo. Esa es la respuesta que necesitaba antes de abrir la configuración del VPN. También decide cuál de los dos apartados siguientes se le aplica, así que guarde los dos resultados de la sonda junto al ticket. Adivinar aquí cuesta una ventana de mantenimiento, porque un túnel que se declara activo no dice nada sobre el paquete más grande que aceptará la ruta.

Suba la MTU de la ruta solo donde todos los saltos estén de acuerdo

Las tramas jumbo son una propiedad de extremo a extremo, no un ajuste que active en los dos extremos que controla. Todos los conmutadores, encaminadores y entregas del proveedor en el camino externo deben aceptar el tamaño mayor, y un solo salto de 1,500 bytes descartará en silencio el paquete que acaba de agrandar. Subir solo la interfaz local es el medio cambio clásico que hace que el túnel parezca roto mientras la red subyacente descarta sin avisar.

ip link set dev eth1 mtu 9000
ip link show dev eth1
ping -M do -s 8972 -c 2 198.51.100.10

Cambie la interfaz y vuelva a sondear la misma ruta antes de cambiar cualquier otra cosa. Si la sonda sigue fallando, revierta con ip link set dev eth1 mtu 1500 y pase a la fragmentación en lugar de discutir con un proveedor por un enlace que no posee.

Use la fragmentación del túnel cuando la red subyacente no pueda crecer

Un mecanismo de fragmentación admitido por debajo del paquete interno permite que varios paquetes externos transporten un paquete interno, y el extremo remoto del túnel los reensambla antes de entregar el original a la pila. La opción de fragmentación UDP de Community OpenVPN es una implementación de esa idea y no es lo mismo que la fragmentación IP ordinaria del paquete externo. Ambos pares deben ejecutar una versión que admita el formato, y la ruta de datos debe ser la que usted cree: los clientes de OpenVPN 3 y los canales de datos acelerados en el núcleo tienen límites distintos, así que un perfil que funciona en un cliente puede fallar en otro.

openvpn --config client.ovpn --tun-mtu 1500 --fragment 1400 --verb 4

La fragmentación externa ordinaria es la otra opción y es la más débil. Los encaminadores IPv6 no fragmentan en absoluto un paquete reenviado, así que un paquete externo sobredimensionado simplemente muere y el emisor solo lo sabe si el mensaje ICMPv6 correspondiente sobrevive a la ruta. Los fragmentos también invitan al filtrado y a la amplificación de pérdidas, por eso lo trato como un plan B y no como un plan.

Un portador externo basado en flujo evita la cuestión del tamaño segmentando su propio flujo de bytes, y el paquete interno reconstruido puede seguir siendo de 1,500 bytes. Es una decisión de transporte con su propio coste, incluido el conocido comportamiento de TCP dentro de TCP, así que tómela deliberadamente y no como efecto secundario de una discusión sobre MTU.

Confirme que el paquete interno llega sin cambios

La verificación no es un handshake correcto. Capture en la interfaz del túnel en ambos extremos y compare el tamaño y el contenido del paquete que la aplicación envió realmente con el que recibió el lado remoto.

ip link show dev tun0
ping -M do -s 1472 -c 2 10.8.0.1
tcpdump -ni tun0 -c 5 'icmp and greater 1000'

Si la captura muestra el paquete interno de tamaño completo en el extremo remoto, la elección de transporte funciona y solo queda registrarla. Si no muestra nada mientras el túnel se declara activo, el paquete externo se descarta en algún punto entre los extremos, lo que le devuelve a la sonda y no a los ajustes de cifrado.

Registre tres cosas en el ticket antes de cerrarlo: el presupuesto externo medido, el mecanismo que eligió y el comando que demostró que el paquete interno sobrevivió. La siguiente persona que toque este túnel necesitará las tres, y ninguna puede reconstruirse solo con el archivo de configuración.

Artículos relacionados