tabla mangle y rutas multiples

Miguel Oyarzo admin en aim.cl
Mar Ene 10 16:59:29 CLST 2006


At 15:03 10-01-2006, Jens Hardings wrote:

>Es para que hagas ejemplos. Si piensas que la primera regla que calza
>manda y luego el resto no se ejecuta, intenta con:
>
>iptables -A PREROUTING -t mangle -i eth1 -j MARK --set-mark 1
>iptables -A PREROUTING -t mangle -i eth1 -j MARK --set-mark 2
>
>iptables -A FORWARD -m mark --mark 1/1 -j LOG --log-prefix "mark 1: "
>iptables -A FORWARD -m mark --mark 1 -j LOG --log-prefix "mark solo 1: "
>iptables -A FORWARD -m mark --mark 2/2 -j LOG --log-prefix "mark 2: "
>iptables -A FORWARD -m mark --mark 2 -j LOG --log-prefix "mark solo 2: "
>
>Y verás que se registra la marca 2 y no la 1. Al revés lo mismo, se
>registrará la marca 1 
>
>>la primera coincidencia descarta el resto de las reglas.
>>  
>>
>
>No, eso es sólo para los target ACCEPT, REJECT y DROP. Los demás targets
>pueden retornar, y en particular el MARK y LOG siempre retornan.


Ya veo lo que dices .... eso me aclara el tema

La tabla mangle solo se usa para modificar paquetes y no toma ninguna accion en 
particular como pasa con las reglas en filter.

Es por eso que en tu ejemplo:

===
iptables -A PREROUTING -t mangle -i eth1 -j MARK --set-mark 2
iptables -A PREROUTING -t mangle -i eth1 -j MARK --set-mark 1

iptables -A FORWARD -m mark --mark 1/1 -j LOG --log-prefix "mark 1: "
iptables -A FORWARD -m mark --mark 1 -j LOG --log-prefix "mark solo 1: "
iptables -A FORWARD -m mark --mark 2/2 -j LOG --log-prefix "mark 2: "
iptables -A FORWARD -m mark --mark 2 -j LOG --log-prefix "mark solo 2: "
===

La ultma regla sobreescribe a la anterior (con el mismo peso claro)


Lo mismo paso con el caso que plantie anteriomente (mangke):
===
iptables -A PREROUTING -i eth0 -t mangle -j MARK --set-mark 2
iptables -A PREROUTING -t mangle -i eth0 -p tcp --dport 80   -j MARK --set-mark 1
>>>> Solo el trafico WEB/80 se marcara con 1, el resto llevara la marca 2.
         (es decir, la ultima instruccion sobre escribe)
===

pero en este ejemplo con tabla filter las cadenas estan al reves (regla general abajo):
===
iptables -A FORWARD -i eth0 -p tcp --dport 80 -j ACCEPT
iptables -A FORWARD -i eth0 -j DROP
>>> Solo el trafico WEB/80 es aceptado, el resto se dropea.
==

Pero segun lo que mencionaste antes, entiendo que la tabla filter usa comparaciones (matches)
y no retorna el trafico (por eso necesita las reglas defaul al final)

... en cambio en las tablas mangle la ultima cadena sobreescribe a la primera 
(retorna como tu dices ... aun que te prometo que no te entiendo bien a que te refieres con eso, 
veo q senalaste una diferencia clave)

De alli desprendo que las cadenas deben escribirse necesariamente  AL REVES :)

Concides o me equivoque en alguna parte?

Saludos

Miguel Oyarzo
INALAMBRICA
Punta Arenas





>Con eso verás que efectivamente al saltar a la cadena MARK se ejecuta lo
>que se pide y después se continúa con la siguiente cadena.
>
>>La idea es asociar la marca a una tabla de ruteo especifica-
>>
>>Ej:
>>ip rule add fwmark 2 table tabla1-enlace-hiperveloz
>>ip rule add fwmark 1 table tabla2-enlace-medio
>>ip rule add fwmark 3 table tabla3-enlace-lento
>>  
>>
>
>Ojo entonces con poner una marca 3, porque viendo el mismo ejemplo:
>
>iptables -A PREROUTING -t mangle -i eth1 -j MARK --set-mark 3
>
>iptables -A FORWARD -m mark --mark 1/1 -j LOG --log-prefix "mark 1: "
>iptables -A FORWARD -m mark --mark 1 -j LOG --log-prefix "mark solo 1: "
>iptables -A FORWARD -m mark --mark 2/2 -j LOG --log-prefix "mark 2: "
>iptables -A FORWARD -m mark --mark 2 -j LOG --log-prefix "mark solo 2: "
>
>
>Resulta que tanto el 1 como el 2 están seteados. Sugiero poner múltiplos
>de 2 para las marcas y así te evitas la ambigüedad.
>
>Saludos,
>
>-- 
>Jens. 



Más información sobre la lista de distribución Linux