balanceo de cargas 2 rutas

Forums: 

Hola, de antemano gracias por su ayuda. Tengo un servidor con el que comparto el internet a 70 computadoras, con la siguiente configuración:

modem adsl (192.168.1.254) -> Servidor eth0 (192.168.1.66) -> servidor eth1 (172.16.0.1) - red lan (172.16.0.0/16)

como deben suponer, dentro de este servidor tengo los servicios de dhcp, dns, ipforward, nateo, squid, dansguardian, etc. Es decir, lo razonable para compartir el internet.

Todo hasta el momento funciona bien.

recientemente instalé otro modem adsl y le puse una ip fija: 172.16.1.113, este último modem está conectado a la red lan.

Quiero saber si es posible, añadir este nuevo modem y balancear las cargas para que el internet sea un poco más rápido.

El acertijo es que no quiero instalar otra tarjeta de red, sino simplemente añadir otro gw (con route) o via (con ip route).

Ya probé lo siguiente:

sudo route add default gw 172.16.1.113 eth0

y efectivamente me añade la ruta pero no me hace balanceo de cargas y se cae la red.

bueno, para ustedes expertos supongo que son dos o tres lineas de comandos, pero yo estoy perdido, he leido mucho pero no encuentro una forma simple de hacerlo.

ni modo

Gracias, ya me lo suponía, pero bueno, voy a echarle un vistazo al link y luego sigo posteando...

Aquí te dejo el script que te

Imagen de Jonas

Aquí te dejo el script que te permitirá hacerlo -al menos en teoria- te recomiendo que esten ambas en la misma subred:


#!/bin/sh

# Se definen las nuevas variables variables para el balance de carga

EXTERNALIF1IP="192.168.0.2"
EXTERNALIF1NET="192.168.0.0/24"
EXTERNALIF1GW="192.168.0.2"
EXTERNALIF1WEIGHT="2"

EXTERNALIF2IP="192.168.0.1"
EXTERNALIF2NET="192.168.0.0/24"
EXTERNALIF2GW="192.168.0.1"
EXTERNALIF2WEIGHT="1"

# Nombres para las tablas de ruteo iproute2
T1=adsl1
T2=adsl2

# Crear tablas de ruteo para las conexiones adsl

if [ `cat /etc/iproute2/rt_tables |grep 200 | wc -l` -eq 0 ]; then
echo 200 $T1 >> /etc/iproute2/rt_tables
fi
if [ `cat /etc/iproute2/rt_tables |grep 201 | wc -l` -eq 0 ]; then
echo 201 $T2 >> /etc/iproute2/rt_tables
fi

ip route flush 200
ip route flush 201

# Eliminar los gateways asignados por el sistema
## (si las direcciones se asignan por dhcp)
route del default gw $EXTERNALIF1GW
route del default gw $EXTERNALIF2GW

# Definiciones de enrutamiento
ip route add $EXTERNALIF1NET src $EXTERNALIF1IP table $T1
ip route add default via $EXTERNALIF1GW table $T1

ip route add $EXTERNALIF2NET src $EXTERNALIF2IP table $T2
ip route add default via $EXTERNALIF2GW table $T2

# Rutas principales
ip route add $EXTERNALIF1NET src $EXTERNALIF1IP
ip route add $EXTERNALIF2NET src $EXTERNALIF2IP

# Reglas
ip rule add from $EXTERNALIF1IP table $T1
ip rule add from $EXTERNALIF2IP table $T2

# Definicion del balance de carga
ip route add default scope global nexthop via $EXTERNALIF1GW weight $EXTERNALIF1WEIGHT \
nexthop via $EXTERNALIF2GW weight $EXTERNALIF2WEIGHT

ip route flush cache

exit 0

Las variables EXTERNALIF1WEIGHT y EXTERNALIF2WEIGHT son los pesos para cada linea adsl y dice que de cada tres 2 vayan por EXTERNALIF1WEIGHT y 1 vaya por EXTERNALIF2WEIGHT si quieres dividir 50/50 pones el mismo peso a ambos 1 y 1.

Luego para verificar ejecuta:


ip route show

Con la salida sabras si funciono o no, existe un inconveniente que si una de las rutas se guardan en sus respectivas tabals así que si una de las lineas se cae y por esa via accedias a google por ejemplo no se resuelve así que tendrás que vaciar las rutas.


ip route flush cache

o


ip route flush 200
ip route flush 201

Cuenta como te va.

script

Se ve muy completo. Déjame estudiarlo antes de... porque si la "riego" (que aqui en México significa "que si me sale mal") me van a crucificar los usuarios. Te agradezco la información y en cuanto lo haga seguiré posteando...

Hola puedes comentar como te

Imagen de plcabgut

Hola puedes comentar como te fue con ese script ??? yo tengo exactamente el mismo problema y ademas como tu me la juego si los usuarios pierden internet así que no quiero hacer inventos sin saber seguro que funciona.

un saludo

script

A decir verdad no he probado el script, la solución temporal que utilicé es configurar gateways específicos por medio de dhcp, es decir, dentro del archivo de configuración del servidor dhcp, establezco que para algunos hosts reciban el gw 172.16.0.1 y para otros 172.16.1.113... sé que es una distribución poco elegante pero hasta el momento me funciona...

El script funciona, yo lo

Imagen de Jonas

El script funciona, yo lo tengo instalado en el proxy de la oficina ademas uso un demonio que cree en C para monitorear la disponibilidad de servicio en las 2 adsl y si una de las dos lineas se cae el demonio vuelve a ejecutar el script para limpiar las tablas de ruteo con lo que todo el trafico se redirige a la linea que esta funcionando, al volver el servicio se restablece el balanceo.
Si no quieren probar el script otra de hacer esto es mediante bonding, a nivel de kernel crean una nueva interfaz maestra que controla los dispositivos.

Hola jodomaq la verdad es que

Imagen de plcabgut

Hola jodomaq la verdad es que me gusta mas la solución usando ese script que la solución de indicar los gateways a través del DHCP que aunque podría hacerlo son demasiados equipos y hace que si todos los equipos conectados usan solo uno de los gateways el otro estaría desocupado. es la pega que le veo.
pero como dice Jonas si a el le ha funcionado me voy a tirar a probarlo pero me temo que sera haciendo horas extra cuando no haya usuarios en el sistema.

Si que me interesaría saber como es el demonio que hiciste en C para monitorizar el servicio de adsl. si me lo puedes mandar bien y sino pues con que me orientes como hacerlo y ya me busco la vida.

El bonding también lo he estudiado para intentar resolver mi problema y si lo he entendido bien trata de a dos tarjetas de red darles la misma ip y que salga el trafico por ambas de forma indiferente no??? pero me gusta mas la otra opción.
Lo que hace tu script es balancear la carga entre las dos tarjetas que tendrían 2 ip diferentes mediante los pesos en la tabla de rutas por defecto no?

Un cosa que había mirado y que me gustó es lo que leí en el libro "Enrutamiento avanzado y control de redes en linux.pdf" de Bert Hubert entre otros. Pero este script es mas completo y con muchas mas cosas de las que ahí se comentan.

Lo que comentas del demonio en c se podría hacer también con cron cada 5 minutos que ejecute un script y si detecta que una línea esta caída, que reconfigure el script de balanceo de carga para modificar los pesos. que te parece Jonas un demonio o un cron?

De bien nacido es ser agradecido y de verdad muchas gracias a ambos por la ayuda.

Pedro