Balanceo de carga con Mikrotik

El balanceo de carga es un concepto usado en informática que se refiere a la técnica utilizada para compartir el trabajo entre varios procesos y así evitar lo denominado cuello de botella.

En nuestro caso, la idea se basa en utilizar un routerboard mikrotik y dos proveedores de internet (isp) para dividir 50/50 la carga de conexiones de la red hacia internet.

En principio no voy a tomar credito por nada, toda la configuración está disponible enhttp://wiki.mikrotik.com/wiki/PCC y la copiaré solo para explicarla con mis palabras.

Explicación

Asumimos que tenemos la siguiente configuración.

Direcciones IP

/ ip address
add address=192.168.0.1/24 network=192.168.0.0 broadcast=192.168.0.255 interface=Local
add address=10.111.0.2/24 network=10.111.0.0 broadcast=10.111.0.255 interface=wlan2
add address=10.112.0.2/24 network=10.112.0.0 broadcast=10.112.0.255 interface=wlan1

El router tiene tres interfaces:

La primera es la que utilizaremos como LAN/Local a la cual se conectan todos nuestros clientes para obtener acceso al servicio.

La segunda es el primer proveedor a Internet o wlan1 en donde tenemos una configuración IP estática que es lo mas conveniente a la hora de configurar este tipo de servicios.

La tercera (wlan2) es nuestro segundo proveedor de servicio de Internet.

Es importante que ambas conexiones tengan IPs estáticos porque sino, el cambio de Gateway (Puerta de Enlace) nos traerá problemas mas adelante en la configuración.

Politicas de routeo

/ ip firewall mangle
add chain=input in-interface=wlan1 action=mark-connection new-connection-mark=wlan1_conn
add chain=input in-interface=wlan2 action=mark-connection new-connection-mark=wlan2_conn

Empezamos marcando los paquetes para separar las conexiones.

En esta parte nos encargamos de establecer que cada conexión que entra por un WLAN sale por el mismo (un problema común anteriormente era que una conexión podía entrar por wlan1 y salir por wlan2 ocasionando intermitencia del servicio y problemas de conectividad para el usuario). Marcaremos las conexiones para recordar mas adelante las interfaces (wlan1 y wlan2).

add chain=output connection-mark=wlan1_conn action=mark-routing new-routing-mark=to_wlan1
add chain=output connection-mark=wlan2_conn action=mark-routing new-routing-mark=to_wlan2

Las lineas de comando superior asegurarán que el tráfico salga por el mismo lugar por donde entró.

add chain=prerouting dst-address=10.111.0.0/24 action=accept in-interface=Local
add chain=prerouting dst-address=10.112.0.0/24 action=accept in-interface=Local

Las políticas de routeo nos permiten forzar el tráfico a que salga por un determinado Gateway (o puerta de enlace, en este caso wlan1 o wlan2), aunque el mismo se encuentre destinado a otra dirección (distinta al Gateway). Esto prevendrá la generación de Loops y problemas de conexión para el usuario. Para evitar que esto suceda tendremos que hacer uso de la routing table.

add chain=prerouting dst-address-type=!local in-interface=Local per-connection-classifier=both-addresses:2/0 \
action=mark-connection new-connection-mark=wlan1_conn passthrough=yes
add chain=prerouting dst-address-type=!local in-interface=Local per-connection-classifier=both-addresses:2/1 \
action=mark-connection new-connection-mark=wlan2_conn passthrough=yes

Mark-routing puede ser usando solo en mangle bajo las cadenas output and prerouting, pero la cadena prerouting está capturando todo el tráfico incluso el que está dirigido al mismo router. Para evitar este problema, en dst-address-type seleccionaremos Local, inverted.

Con la ayuda de PCC (per connection clasiffier) dividiremos el tráfico en dos ramas o flujos iguales basados en el origen y destino de las direcciones.

add chain=prerouting connection-mark=wlan1_conn in-interface=Local action=mark-routing new-routing-mark=to_wlan1
add chain=prerouting connection-mark=wlan2_conn in-interface=Local action=mark-routing new-routing-mark=to_wlan2

Luego marcamos todos los paquetes de esas conexiones con una marca. Se marcará todo el tráfico que sale hacia Internet, no olvidemos que se utiliza una interfaz específica de salida pensando siempre que debe ser la misma por la cual entró.

/ ip route
add dst-address=0.0.0.0/0 gateway=10.111.0.1 routing-mark=to_wlan1 check-gateway=ping
add dst-address=0.0.0.0/0 gateway=10.112.0.1 routing-mark=to_wlan2 check-gateway=ping

Llegando al final, crearemos rutas, establecemos que todo el tráfico puede salir por cualquiera de las dos conexiones.

add dst-address=0.0.0.0/0 gateway=10.111.0.1 distance=1 check-gateway=ping
add dst-address=0.0.0.0/0 gateway=10.112.0.1 distance=2 check-gateway=ping

Para activar la opción de failover(en caso de que una conexión caiga, la siguiente asumirá toda la carga) es necesario que la ruta previa se desactive automáticamente tan pronto como sea posible. Esto se logra configurando check-gateway=ping. Esta opción censará constantemente si hay respuesta del router para pasar el tráfico, en caso de no responder, deshabilitará una de las routas hasta que el Gateway vuelva a su normalidad.

En esta parte es importante tener en cuenta que al checkear el gateway en una dirección estática previamente configurada por nosotros, es indispensable tener una dirección de IP estática para poder lograrlo. Uno de los inconvenientes que tuve personalmente con una conexión de Fibertel fue que para lograr que el IP sea fijo, previamente al entrar el Mikrotik lo pasé por un router externo, de esta manera el gateway sería la dirección de mi router.

El inconveniente aquí surge para la opción de failover. Si la conexión a Internet dejaba de responder, el Mikrotik igual seguiría teniendo conexión al Gateway porque a menos que el router se encuentre desenchufado este siempre va a responder. Esto ocacionaba que cuando se caía la conexión a Internet, el Mikrotik fuera incapaz de reconocer que estaba caída y seguía mandando tráfico por esta ruta imposibilitando la navegación.

NAT

/ ip firewall nat
add chain=srcnat out-interface=wlan1 action=masquerade
add chain=srcnat out-interface=wlan2 action=masquerade

Esta parte es muy común para todos, se debe configurar un NAT con out-interface para cada una de las conexiones que se desee balancear. Todo el tráfico que pase por nuestra red tiene la posibilidad de salir por cualquiera de las dos interface wlan.

Balanceo de ocho conexiones…

Finalmente cierro con esta parte. Balancear ocho conexiones es tan simple como hacerlo con dos. En la parte de direcciones IP solo tendremos que levantar y configurar 6 interfaces mas, en la parte mangle marcaremos desde wlan1 hasta wlan8, en la parte de pcc (ramas/strems) configuraremos el pcc desde 8/0 hasta 8/7 de manera que cada conexión recibirá una carga del 12.5%, se crearán ocho rutas junto con ocho gateways y finalmente ocho nats. No es ninguna ciencia hacerlo, solo hay que tener cuidado de ingresar bien todas las direcciones y nombres, de lo contrario tendremos un comportamiento erradico y nos tomará bastante tiempo ubicar que parte configuramos mal.

Conclusión:

Mikrotik nos permite con la ayuda de un RB493AH hacer un balanceo de hasta ocho conexiones de la misma manera que lo haría otro equipo de varios miles le dólares. Es una excelente alternativa para la los pequeños WISP que usualmente tienen problemas al ofrecer iguales anchos de banda a precios competitivos.
Espero haber ayudado y animado a alguno para probar esta configuración. La misma se puede realizar en un RB433 (por sus tres puertos ether) en el que solo podremos balancear dos conexiones.

Saludos y nos volvemos a leer!

 

 

  12 comments for “Balanceo de carga con Mikrotik

  1. 6 Marzo, 2016 at 12:59 pm

    Excelente tu explicacion , lo probare en laboratorio y te avisare el resultado
    Gracias
    Agustin

  2. nicolas
    14 Junio, 2016 at 12:23 am

    Hola, si yo hago esto con dos lineas asimetricas de de 50 mb cada una, pero mas adelanto decido agregar 20 mb simetricos (porque maximo me dan dos lineas de las anteriores), pero sin eliminar las dos lineas por tema economico…..como seria?

    • Luis Zambrana
      14 Junio, 2016 at 2:58 am

      En primer lugar gracias por pasar. Segundo, si las lineas son asimetricas seguramente son con marcado ppoe y los modem deben tener algun tipo de bridge para que el marcado lo haga el mk.
      Si agregas una linea simetrica, cuyos servicio puede ser un fibertel al cual te conectas con un dhcp client, me imagino (no lo hice) que debes probar marcar los paquetes, pero de todos modos en vez de hacer eso yo implementaria calidad de servicio por que un servicio de 20 mb simetrico te rinde mucho mas que uno de 50 asimetrico.

  3. Bartolome
    7 Abril, 2017 at 4:01 am

    Que tal, actualmente tengo un balanceo por pcc con 6 adsl.
    Puedo hacer un tunel L2TP para cada una de ellas?

    • Luis Zambrana
      11 Abril, 2017 at 7:39 pm

      SI que exista un balanceo no impide tuneles a mi entender.

  4. Ana Aranda
    22 Mayo, 2017 at 7:46 pm

    Hola Buenas tardes!
    Se que quizá mi duda no es relacionada con lo que explicas en tu post, pero ya no se donde encontrar la solución y espero tú me puedas ayudar.

    Mi problema es que en un determinado tiempo, mi balanceo se vuelve simetrico y por lo tanto se vuelve un caos la Red; me pudieras indicar a que se debe éste problema, ya que cuando esta de manera normal, es decir; asimétrico, la red funciona muy bien. Pero quiero solucionar éste problema y que ya no pase ésta situación.

    Espero haberme explicado.

    Espero tu respuesta.

    Muchas gracias de ante mano.

    • Luis Zambrana
      24 Mayo, 2017 at 1:36 am

      Wow es muy raro lo que me indicas. No entiendo por que el balanceo se vuelve simtrico (subida y bajada iguales) y luego asimetrico.
      El balanceo lo hiciste con el paso a paso que indico en este post?
      Podes pasarme un txt con la config como para que te pueda dar una mano? o bien un video armado por lo menos para ver que sucede?
      Defini caos. El cpu se va al diablo? se cuelga el mk? que mk tenes?
      En fin tal vez te pueda ayudar pero necesito mas de tu ayuda….

  5. Jhohan
    18 Agosto, 2017 at 3:09 pm

    Hola, estoy en el proyecto de iniciar una isp wish y si hay algo que me freno mucho es no saber que tipo de servicio me conviene contratar para revender, una compañía me ofrece un servicio asimétrico de 100 megas de descarga y 10 de bajada con prioridad de descarga, y el otro es un servicio simétrico dedicado de 1 mega. Lo que me tiene confundido es que los dos servicios cuestan casi lo mismo, que decisión tomo?

    • Luis Zambrana
      19 Agosto, 2017 at 11:33 am

      Yo veria el contrato. Los 100 megas son tentadores pero es asimetrico, o sea HASTA 100 megas. Pueden ser 50 tambien.
      Otra cosa que es muy importante es el soporte de un simetrico que generalmente es mucho mejor que el del asimetrico.
      Lo que tienes que tener es una velocidad constante y si pasa algo un buen soporte tecnico 24x7x365 y resolucion rapida, por ejemplo una vez que llamas por un inconveniente se genera ticket y como maximo a las 3 horas esta solucionado… esas cosas son muy importantes.

  6. Juan Pablo
    27 Octubre, 2017 at 12:09 am

    Hola! tengo el mismo problema con fibertel, solo que yo necesito que me entregue la ip externa al mikrotik, pero cuando cambia, me cambia la ruta y deja de responder hasta que lo corrijo manualmente. Lo resolviste con algun script?

  7. Jesus
    31 Octubre, 2017 at 9:15 am

    Hola:

    He aplicado las reglas y funciona perfectamente. Quería preguntarte que si tenemos 2 ADSL, con velocidades diferentes, si se puede priorizar de alguna manera, dando mayor peso a la línea más rápida.

    Gracias por el artículo.

    • Luis Zambrana
      6 Noviembre, 2017 at 9:09 pm

      Hola jesus como estas? SCreo que por ahi te conviene priorizar el trafico y el ancho por ip. Voy a hacer un tutorial al respecto ya que algunos amigos/colegas/lectores tuvieron la misma duda.
      Abrazo

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *