GNU/Linux con 2 enlaces a internet, 2 rutas default gateway y balanceo de rutas

La mayoría de las veces solo requerimos una tabla de rutas en el kernel de un GNU/Linux debido a que con esta se puede solucionar todo, el problema llega cuando se tienen 2 proveedores o mas que dan salida a Internet. Sucede que solo puede existir una sola ruta por omisión y esta es el router / gateway hacia el Internet.

¿ Que se puede hacer en estos casos ?

Hay 2 soluciones rápidas.

1 Crear mas tablas de rutas y cada una con su propio default gateway
2 Crear un pool de gateways sobre la tabla original del kernel.

Una u otra sera seleccionado de acuerdo al criterio del sysadmin.

Crear mas tablas de rutas

Las tablas de ruta son numéricas, pero podrían asignarseles nombre por ejemplo

100 fibraoptica
101 xdsl
102 satelital
103 CualquierNombreDescriptivo

Esas lineas deberían ser colocadas en el archivo /etc/iproute2/rt_tables

No se requiere declararlas en ese archivo pero facilita la administración cuando tienen nombre de lo contrario siempre habrá que referirse a ellas por su numero.

Para este ejemplo tomaremos que la tabla default del kernel y es de fibra óptica de un enlace dedicado y como enlace de secundario a Internet tenemos un dsl por cobre en la tabla 101.

Asumiendo que la ip de gateway de la fibra óptica es 200.34.35.254 y la del DSL es 172.16.0.254

La tabla del kernel es la default no requiere ser declarada es la de toda la vida.

route add default gw 200.34.35.254
o
ip route add default via 200.34.35.254

Creando la segunda tabla

ip route add default via 172.16.0.254 dev eth2 table 101

Si se tiene declarada la tabla e nel archivo rt_tables se puede sustituir el 101 por xdsl

ip route add default via 172.16.0.254 dev enp1s0 table xdsl

En este punto se tiene 2 rutas default cada una en su propia tabla, por default las ips tratan de salir por la tabla del kernel hasta que se asignan reglas, asumiendo que se desea sacar una maquina por la tabla de ruta xdsl, 172.16.0.1. Esta ip por omision o default tratara de irse por la puerta de enlace 200.34.35.254 pues es la ruta default del kernel, para que salga por donde es debido hay que asignar la regla y moverla a la tabla de ruta xdsl o 101

ip rule add from 172.16.0.1 table 101

La ip 172.16.0.1 ahora sabe que debe salir por la tabla 101 que es la del xdsl

las ips 172.16.0/24 no son ruteables en internet , aquí se requiere NAT. Se asume que el lector sabe usar iptables para dar NAT

Crear un pool de rutas sobre la del kernel.

Crear el Pool

ip route add default scope global nexthop via 200.34.35.254 weight 1 nexthop via 172.16.0.254 weight 1

el paramento weight # hace referencia a la calidad del enlace y a su ancho de banda, simplemente es un entero que mientras mas vale mas pesa sobre el otro enlace al tener el mismo valor por ejemplo 1 en ambos casos toma el efecto de 50% a 50% manda paquetes a un enlace o a otro indistintamente. Con el mismo valor se asume que son de la misma calidad y que deben usarse en proporciones igales, es una forma de balanceo de carga.

Aunque las Ips 200.34.35.254 son publicas homologadas, las 172.16.0./24 no lo son, debe considerarse en el NAT, al estar en la tabla de ruta del kernel no requiere reglas adicionales.

Otro ejemplo.

ip route add default scope global nexthop via 200.34.35.254 weight 1 nexthop dev ppp0 weight 1

Para enlaces como dsl en modo bridge se crea una interface ppp0, aquí se le dice que no importa cual sea la ip del gateway, la que sea de la interface ppp0 o su equivalente en normal en

route add default dev ppp0
ip route add default dev ppp0

Add a Comment

Comment spam protected by SpamBam