Pregunta

I se preguntaba si hay alguna manera de sintonizar (en un sistema Linux), la MTU para una toma de corriente dado. (Para hacer fragmentación capa IP en trozos más pequeños que la MTU dispositivo real).

Cuando digo por basa dado, no me refiero a programáticamente en el código de la aplicación propietaria de la toma, sino más bien externamente, por ejemplo a través de una entrada de sysfs.

Si actualmente no hay manera de hacer eso, ¿tiene alguna idea acerca de dónde enganchar / parche del kernel de Linux para poner en práctica esta posibilidad?

Gracias.

EDIT: ¿por qué demonios es lo que quiero hacer eso

Estoy haciendo un poco de capa 3-en-Layer4 (por ejemplo: túnel túneles IP y arriba a través de TCP) de túneles. A diferencia de VPN-como soluciones, no estoy usando una interfaz virtual para lograrlo. Estoy captura de paquetes utilizando iptables, cayendo por su forma normal y escribirlos en la toma de túnel.

Piense en el caso de una transferencia de archivos grandes, todos los paquetes se llenan hasta el tamaño de MTU. Cuando túnel ellos, añado algo de sobrecarga, lo que lleva en cada paquete original para producir dos paquetes tunelizados, es bajo-óptimo.

¿Fue útil?

Solución

Si se crea el conector de manera que DF conjunto de paquetes de salida que podría tener un poco de suerte en el spoofing (inyectar) una fragmentación es necesario volver mensaje ICMP a sí mismo hasta que se termina con la MTU deseada. Más bien feo, pero dependiendo de lo desesperado que está podría ser apropiado.

Por ejemplo, podría generar estos paquetes con reglas de iptables, por lo que el juego y el envío es simple y externo a su aplicación. Parece que el objetivo de rechazo para iptables no tiene una rechazo, con la fragmentación necesaria, sin embargo, es probable que no sería demasiado complicado para agregar uno.

El otro enfoque, si es sólo TCP paquetes que importa es que pueda tener un poco de suerte con la opción de conector TCP_MAXSEG o el objetivo TCPMSS si eso es adecuado para su problema.

Para UDP o primas Eres libre de send() paquetes tan pequeños como te apetezca!

Actualización:

Con base en el "por qué iba a querer hacer eso?" respuesta, parece que la fragmentación de los paquetes si no se establece DF o elevar ICMP "fragmentación necesaria" y colocar en realidad sería la solución correcta.

Es lo que un router más "normal" haría y proporcionadas cortafuegos no comen el paquete ICMP a continuación, se comportará con cordura en todos los escenarios, mientras que retrospectivamente cambiar las cosas es una receta para un comportamiento extraño.

El pinza mss es absolutamente una buena solución para TCP a través de este " VPN" sin embargo, especialmente en lo que ya está haciendo un amplio uso de iptables que parece.

Otros consejos

MTU es una propiedad de un enlace, no se toma. Pertenecen a diferentes capas de la pila. Dicho descubrimiento de MTU de ruta TCP realiza durante el enlace de tres vías y se esforzaba mucho para evitar la fragmentación. Vas a tener tiempo para preparar fragmentos de envío TCP duros. Con UDP es el más fácil de forzar alguna MTU más bien pequeña en una interfaz con el ifconfig(8) y luego enviar paquetes más grande, entonces ese valor.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top