ip nos permite trabajar con tablas de routing m�ltiples, una gran novedad en la gesti�n de tr�fico IP. �De qu� se trata ? Hasta ahora hab�amos tenido, por cada sistema, una tabla de routing �nica, que define a qu� interfaz esta conectada una red, donde se encuentra el gateway, etc ... Gracias a iproute, podemos trabajar con varias tablas de routing a la vez y elegir que tabla usar seg�n las caracter�sticas del paquete IP.
Imaginemos por ejemplo que tenemos un router con dos interfaces de conexi�n a Internet. Una interfaz RDSI m�s lenta pero barata y una interfaz ADSL r�pida, pero m�s cara. La ventaja es que se puede decidir, gracias a iproute, que interfaz ser� usada, seg�n los paquetes que hay que mandar. Por ejemplo podemos decidir que los paquetes SMTP saldr�n por la interfaz RDSI lenta (no hay prisa). A rev�s, si tenemos aplicaciones de videoconferencia, queremos que vayan por la interfaz ADSL r�pida. En este caso, la pol�tica de routing se basa en el puerto de destino de los paquetes IP.
Tambi�n podemos imaginar basar la pol�tica de routing sobre la direcci�n IP de origen de los paquetes. Ser�a el caso si queremos dar prioridad a determinados servicios de una empresa. Por ejemplo, la direcci�n de la empresa usar� la conexi�n ADSL r�pida, mientras el servicio de mecanograf�a vera su tr�fico dirigido por la interfaz lenta.
En realidad, podemos basarnos en muchos par�metros para establecer nuestra pol�tica de routing: IP de origen, IP de destino, puerto de origen, puerto de destino, protocolo usado, TOS e interfaz de llegada.
Hay que destacar que para hacer comprobaciones sobre protocolos IP y puertos de transporte, hay que usar el sistema conjuntamente con ipchains que nos provee fwmark, un sistema para marcar paquetes, los cuales veremos m�s adelante. Por defecto, hay 3 tablas de routing en la base de datos 'routing policy database':
[eric@mrmime:~]$ ip ru l 0: from all lookup local 32766: from all lookup main 32767: from all lookup default [eric@mrmime:~]$ |
El antiguo comando 'route' nos ense�a la tabla 'main'. Las dos otras son nuevas.
La tabla 'local' es especial, no puede ser borrada y tiene la prioridad m�s alta (0). Se usa para direcciones locales y de broadcast.
La tabla 'main' es la tabla cl�sica que nos devuelve el antiguo comando 'route'. Se puede borrar o cambiar.
La tabla 'default' esta vac�a y se reserva para procesos de post-routing (si las reglas anteriores no coinciden). Tambi�n se puede borrar.
[eric@mrmime:~]$ ip r l table main 195.96.98.253 dev ppp2 proto kernel scope link src 212.64.78.148 212.64.94.1 dev ppp0 proto kernel scope link src 212.64.94.251 192.168.2.0/24 dev eth0 proto kernel scope link src 192.168.2.71 127.0.0.0/8 dev lo scope link default via 212.64.94.1 dev ppp0 [eric@mrmime:~]$ |
Imaginamos que las dos interfaces de red que hemos mencionado antes son: 212.64.94.1 para el tr�fico de alta velocidad 195.96.98.253 para el tr�fico lento.
Pedro no se ha portado bien esta semana as� que le vamos a redireccionar a trav�s de la conexi�n lenta. Generamos una regla que se llama 'Pedro':
# echo 200 Pedro >> /etc/iproute2/rt_tables # ip rule add from 192.168.2.35 table Pedro # ip rule ls 0: from all lookup local 32765: from 192.168.2.35 lookup Pedro 32766: from all lookup main 32767: from all lookup default |
# ip route add default via 195.96.98.253 dev ppp2 table Pedro # ip route flush cache |
A continuaci�n vemos los identificadores que se pueden usar en la base de datos:
from: determina la origen del paquete
to: determina el destino del paquete
iis: determina la interfaz de llegada
tos: determina el valor de TOS
fwmark: determina el valor de 'marca' del paquete (puesto por iptables por ej., ver el ejemplo siguiente)
Es importante no confundir 'tablas de routing' y 'reglas'. Las reglas apuntan a tablas de routing, varias reglas pueden apuntar a la misma tabla de routing. De la misma manera, una tabla de routing puede no tener ninguna regla apuntando a ella sin dejar de existir.
En el ejemplo previo, hemos dirigido nuestros paquetes seg�n su direcci�n IP de origen. Si queremos, por otra parte, basar nuestra pol�tica sobre el tipo de tr�fico (correo, web, v�deo), usaremos la herramienta de marcaci�n de paquetes prove�da por netfilter (iptables).
Siguiendo con los datos previos, vemos ahora como desviar nuestro tr�fico de web saliente hacia la interfaz r�pida (212.64.94.1, ver arriba).
Marcamos los paquetes que tienen como destino el puerto 25 (SMTP) con un n�mero '1':
# iptables -A PREROUTING -i eth0 -t mangle -p tcp --dport 25 \ -j MARK --set-mark 1 |
Ahora dirigimos los paquetes marcados '1' a una tabla de routing especifica, en este caso, la llamamos web.out:
# echo 201 mail.out >> /etc/iproute2/rt_tables # ip rule add fwmark 1 table web.out # ip rule ls 0: from all lookup local 32764: from all fwmark 1 lookup web.out 32765: from 192.168.2.35 lookup Pedro 32766: from all lookup main 32767: from all lookup default |
S�lo nos hace falta ahora crear la tabla de routing:
#ip route add default via 195.96.98.253 dev ppp0 table web.out |
Ya lo tenemos todo. La regla de marca que usamos es muy simple, s�lo se basa en el puerto de destino del paquete. Obviamente, con la flexibilidad que nos ofrece iptables, podemos hacerlo mucho m�s complejo, a�adiendo excepciones, etc.