mayo 12, 2006

Enrutar mediante reglas a través de varias salidas a Internet

Resulta interesante el caso de tener varias lineas de conexión a Internet e intentar sacarles el máximo rendimiento a través de un router montado en linux. En el manual de Linux Advanced Routing se dan múltiples ideas, usar reglas, filtros mediante marcado de paquetes o balanceo de carga.

Remitiéndonos al uso mas simple, el de reglas:
# ip rule help
Usage: ip rule [ list | add | del | flush ] SELECTOR ACTION
SELECTOR := [ from PREFIX ] [ to PREFIX ] [ tos TOS ] [ fwmark FWMARK ]
[ dev STRING ] [ pref NUMBER ]
ACTION := [ table TABLE_ID ]
[ prohibit | reject | unreachable ]
[ realms [SRCREALM/]DSTREALM ]
TABLE_ID := [ local | main | default | NUMBER ]

Podemos rutar los paquetes por los diferentes interfaces según configuremos nuestro "SELECTOR", siguiendo el caso más simple, que se relata en enrutado simple por origen direccionamos los paquetes provinientes de una ip a través de la línea secundaria:

# ip rule
0: from all lookup local
32766: from all lookup main
32767: from all lookup default

Añadimos un nombre a la tabla de rutas por no trabajar con números:
# echo 200 Ruta-Coleguita >> /etc/iproute2/rt_tables

Metemos la regla de la que hablábamos antes, todo lo que provenga de la 10.0.0.10 mirará la tabla "Ruta-Coleguita" que vamos a crear:
# ip rule add from 10.0.0.10 table Ruta-Coleguita

Creamos la ruta:
# ip route add default via x.x.x.x dev ppp2 table Ruta-Coleguita
# ip route add 10.0.0.0/24 dev eth0 table Ruta-Coleguita
# ip route flush cache

A partir de este momento todos los paquetes que vengan de la 10.0.0.10 saldrán por el enlace ppp2. Esta función es completamente compatible con hacer SNAT sobre el interfaz de salida.

Es necesario añadir la ruta local "ip route add 10.0.0.0/24" a la tabla si queremos que todo funcione correctamente, durante unas pruebas he podido comprobar la pérdida de paquetes ARP si se carece de rutas locales.

Por último, un enlace a la newsletter de gentoo donde nos explican como configurar el archivo net con iproute2

Tags:

comentarios: