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