[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: MTU y DHCP



Hola

El 02/Jan/06 - 16:41, Iñaki dijo:
> El Jueves, 1 de Diciembre de 2005 16:28, Iván Forcada Atienza escribió:
> || > Sabeis si con esta combinación se puede hacer? y con el cliente de
> || > windows XP? Es verdad que en windows XP hay que añadir MTU al registro y
> || > que esos cambios se aplican al reiniciar, pero si en el reinicio coge
> || > los datos de DHCP, ya estaria iniciando con la MTU proporcionada o ¿no?
> ||
> || Parece que no vas a poder. No obstante, si lo consigues cuenta cómo ;-).
> || Yo al final tuve que usar iptables, como te comentaba en el otro correo.
> 
> Iván, ¿podrías mostrarme la regla de Iptables que usas para forzar a los 
> clientes a usar un determinado MTU? Yo he probado algunas pero no logro que 
> funcionen. 

Es una regla en el gateway a inet. No es que obligue a los clientes a
usar un determinado MTU, sino que adapta la conexión TCP para que se
establezca con un MSS apropiado para que, posteriormente, en el nivel 3
se generen datagramas IP con el MTU adecuado.

Os esplico un poco. Hablo de memoria, no es que tenga la teoría de redes
demasiado fresca ;-) así que si meto la gamba con algo, que alguien
grite :-D. Sé que hay un hilo actual sobre esto que no he podido seguir
al 100%, así que espero no repetir cosas que ya se hayan dicho.

Aquí hay dos cosas distintas, el MTU, que depende del nivel 3, y el MSS,
nivel 4(TCP). El MTU es el MTU, y no debería hacer falta cambiarlo ya
que la teoría dice que un router debe ser capaz de fragmentar. Otra cosa
es que interese cambiarlo por cuestiones de pérdidas de rendimiento en
casos de fragmentación. Una opción es activar pmtud (activado por defecto
en debian) lo cual puede ayudar en algunos casos, y otra es poner el mtu
a manopla. La historia es que tengas que cambiarselo a 500 puestos, por
ejemplo... y más aún si son güin2... me entran palpitaciones sólo de
pensarlo!!.

El asunto es que la fragmentación IP debería de funcionar en el
router-gateway que está dando salida a inet con pppoe generalmente, lo
que nos evitaría tener que tocar nada (otra cosa es que quisiéramos
hacerlo para evitar fragmentaciones y pérdidas de rencimiento). Pero...
a mi no me funciona... no soy capaz de que las máquinas dentro de una
LAN pasen paquetes de 1500 bytes a través del router-gateway con pppoe
hacia inet. No tengo ni idea de porqué, le he dado 20000 vueltas sin
éxito. Sé que no es problema de iptables... no sé si será un bug del
kernel (no creo)... seguramente algo se me escape ... pero de momento 
así está la cosa. Creo que el pmtud tampoco funciona correctamente 
puesto que aun estando activado (por defecto) la situación no cambia. 

Lo que hice yo fue digamos una chapucilla. Lo que yo hice es disminuir
el MSS del gateway. La fragmentación IP (MTU) es digamos un método
reactivo: solo ocurre cuando "no cabe". Sin embargo, el MSS podríamos
decir que es algo preventivo. El MSS se establece en los paquetes SYN al
iniciarse la conexión, en un campo variable de la cabecera TCP si no
recuerdo mal. El servidor (al otro lado) cuando recibe un valor de MSS
no devuelve paquetes de MSS mayor. Si calculamos bien el MSS para que el
total, tras pasar por el nivel 3 no sobrepase el MTU, hemos solucionado
parcialmente el problema. Es decir, si el MTU es 1492, el MSS máximo
debería ser de 40 bytes menos.

Lo malo es que los clientes dentro de una ethernet usan un MSS de 1500-40
, al igual que los servidores destino, que muchas veces también están en
una ethernet, por lo que estamos en las mismas: o cambiamos el MSS de
todos los clientes o nada.

Ahi es donde entra en juego iptables. La regla que os voy a poner ahora
lo que hace es coger los paquetes SYN y plantarles un MSS calculado a
partir del MTU de la interfaz de salida, de manera que cuando se
establezca la conexión entre los dos extremos, se haga con segmentos que
quepan en los 1492 bytes de MTU que (generalmente) deberíamos tener con
pppoe.

Digo que es una chapu porque aunque funciona (al menos a mi), no es lo
suyo. Además, es solo para TCP :-(. No obstante, yo lo uso y hasta ahora
no te tenido ningun problema.

La regla es la siguiente:
$IPTABLES -A FORWARD -p tcp --tcp-flags SYN,RST	SYN -j TCPMSS --clamp-mss-to-pmtu

En ella se calcula el MSS en funcion del MTU, pero también se puede
forzar un MSS concreto. La regla va en el gateway-router que da salida a
inet.

No sé si esto es lo mejor, aunque a mi me funciona. Si a alguien se le
ocurre algo más elegante pues guay :-).

Espero que te(os) sirva, y perdón por el rollo que os he metido !!!

Algunos links que info sobre el tema:
- http://www.tcpipguide.com/free/t_TCPMaximumSegmentSizeMSSandRelationshiptoIPDatagra.htm
- http://66.249.93.104/search?q=cache:D73JtsqSIHsJ:www.enterprisenetworksandservers.com/monthly/art.php/120+%22ip+fragmentation%22+linux+mtu&hl=es&ie=UTF-8
(aaarggg... el server está caido... solo en caché de google :-( )
- http://www.akadia.com/services/pppoe_iptables.html

> Gracias y un saludo.

De nada ;-). Saludos!!

> -- 
> y hasta aquí puedo leer...
> 

-- 
___________________________________________________________________
Iván Forcada Atienza:
  correo: ivan@forcada.info
-------------------------------------------------------------------
"Software is like sex: it's better when it's free" (Linus Torvalds)
  

Attachment: pgpnXYqAz9CK9.pgp
Description: PGP signature


Reply to: