Balanceo de carga utilizando un router Linux


Podemos utilizar el balanceo de carga cuando podamos repartir una salida a Internet mediante dos conexiones diferentes.
De esta forma liberamos un posible cuello de botella donde una conexión no podría con todo el tráfico de Internet.


En este caso voy a suponer una red sencilla para que se entienda fácilmente:

- Tenemos una red única con todos los PCs, routers y nuestro servidor (192.168.0.0 / 24)
- Nuestro servidor (192.168.0.1 / 24) estará configurado en los PCs de los usuarios como puerta de enlace
- Ambos routers deberán estar correctamente configurados para acceder a Internet, sus direcciones serán 192.168.0.2 / 24 y 192.168.0.3 / 24
- Las direcciones de los PCs empezarán a partir de la 192.68.0.10, reservándonos alguna dirección para posibles ampliaciones.

En primer paso activar el enrutamiento en el servidor mediante el comando:
$ echo 1 > /proc/sys/net/ipv4/ip_forward
En primer lugar limpiaremos la caché para eliminar posibles rutas existentes:
$ ip route fflush cache
Ahora es cuando configuramos el balanceo de carga con los distintos enlaces:
# ip route add default scope global nexthop via 192.168.0.2 dev eth0 weight 1 nexthop via 192.168.0.3 dev eth0 weight 1
Hemos definido una ruta con un enlace para cada router, en este caso el servidor está conectado a la red a través de eth0, pero podéis modificarlo para vuestro caso.
En cuanto a los pesos, he configurado ambos con 1, esto significa que ambos tienen la mismas posibilidades de ser elegidos. Si nos interesa darle prioridad a uno, deberemos incrementarle el peso para que aumente la probabilidad de ser elegido.

Enlaces de interés:
  1. Definición Wikipedia: Máscara de red

3 comentarios:

  1. Hola sabes llevo un tiempo estudiando esto del balanceo de cargas, pero aun no he logrado nada bueno. Pero tengo algunas consultas respecto a lo que he visto en tu publicación, primero estas seguro que en la linea del balanceo se hace referencia como dev la eth0(ethernet de la red local) o es la interfaces donde esta conectado cada uno de los routers? y la otra las peticiones se van indistintamente por uno u otro router, es decir que si realizó una solicitud de una pagina a través de un router, puede que parte de los contenidos sean cargados a través del otro router?

    Pregunto esto por que he visto algunos ejemplos que utilizan tablas de ruta para cada uno de los enlaces o routers con el fin de mantener las peticiones a través de una sola salida, pero a mi ni siquiera me ha resultado levantar las interfaces por lineas de comando XD, menos asignar tablas de ruta y ni hablar de balanceo de carga.

    Espero me puedas ayudar a resolver estas dudas, pues no he tenido a quien consultar. Gracias.

    ResponderEliminar
  2. Efectivamente, eth0 y eth1 serían las interfaces de nuestro servidor donde estarían conectados ambos routers.
    En cuanto a la otra duda, las peticiones salen indistintamente por uno u otro router, aunque se podría afinar muchíiiisimo más, pero es un tema muy complejo.
    El tema de la carga de la web es imposible, porque actualmente con HTTP1.1 el documento HTML y los archivos relacionados se descargan por la misma conexión TCP

    ResponderEliminar
  3. Anónimo9/7/11 16:09

    A mi forma de ver ,segun la imagen planteada la imagen dicta que no hay nada que rutear o es imposible, ya que todo el diagrama es bajo un mismo segmento de RED. 192.168.O.X/24,

    Lo que creo estas intentado hacer es un BONDING mezclado con un Balance de Carga

    ResponderEliminar