Como el título lo indica comenzaremos la tarea de realizar un balanceo de cargas 50-50 (cada una recibirá exactamente la mitad de la carga) entre dos conexiones a Internet. Esta situación es muy habitual en los WISP cuando se desea contratar varias conexiones para crear redundancia y obtener mayor ancho de banda para poder seguir vendiendo.
En principio no voy a tomar credito por nada, toda la configuración está disponible en http://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 (ej: Arnet 1mb – $90).
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.
Buena noche, yo tambien estuve en el MUM de Buenos Aires, me paecio muy bueno, te comento que tengo varios balanceos con PCC incluso he hecho en un 750 de 5 pertos un balanceo de 8 wan, usando ip secundarias en las interfaces, trabaja muy bien igual, el unico problema es el que comentas del failover ya que aca cuando un enlace es suspendido el mismo sigue respondiendo al ping del gateway pero no tiene salida al exterior por lo que el balanceador CREE que esta aun navegando y sigue enviando trafico por esa interfaz, si lograste resolverlo por favor espero lo comentes, muchas gracias
A mi se me cae el gateway junto a la conexión porque tengo IP publico directamente entrando al Mikrotik. Igual creo que te respondí la duda por el foro.
hola: bueno recien comienso en el tema de balanceo de carga quiero hacer esta configuracion ya que me acomoda esta pero estuve leyendo los comentarios de esta veo que tiene falla por este comentario lo digo:
«failover ya que aca cuando un enlace es suspendido el mismo sigue respondiendo al ping del gateway pero no tiene salida al exterior por lo que el balanceador CREE que esta aun navegando y sigue enviando trafico por esa interfaz, si lograste resolverlo por favor espero lo comentes, muchas gracias»
me gustaria saver cual es el arreglo de esta faya o el tip donde esta el arreglo de antemano muchas gracias
saludos
José Ulloa
el failover funciona con ip estático, esa es la solución que le encontré yo.
El problema es que el failover (que lo que hace es si una conexión falla, pasa todo el tráfico por la otra) es que checkea mediante PING contra un gateway. Muchos proveedores de Internet entregan IP dinámico y cuando este cambia muchas veces lo haces también el gateway. En la configuración del RouterOS al cambiar dinamicamente el gateway figurará que está caido por no ser el mismo gateway que se configuró en un principio.
Ahora, al emplear un router previamente a entrar al mikrotik logramos que el gateway no cambie desde la perspectiva del mikrotik. El inconveniente aquí es que el router siempre va a estar funcionando independientemente de que tenga Internet o no.
Te repito, la salida que yo le encontré fue que mi proveedor de Internet me entregue un IP estátito, así nunca me cambia el IP ni el gateway el la configuración funciona como corresponde.
Hola como estas amigo excelente tu post funciona perfecto pero necesito que me ayudes ya tengo el balanceo configurador pero me gustaria que ademas del balanceo tambien pueda redireccionar el trafico del puerto 80 por el proxy en el puerto 3128 del mismo equipo en este caso tengo routeros v4.5 en una pc 86x para ahorar ancho de banda y utilizar un poco mas el procesamiento del equipo ya aveces llega al 4% de carga del procesador
Amigo Tamahome!! felicitaciones, he aqui que presento una pequeña duda, es acerca de las distancias a configurar en los routes respectivos de cada WAN, no me queda claro en que beneficia o perjudica el hecho de configurar con una distancia diferente, y por otro lado como puedo «forzar» a que el balanceo no sea tan «equitativo» sino que tenga como preferencia a una de las dos lineas o 3 lineas.
saludos!
En este caso en particular donde se forzan las rutas la distancia no tiene aplicación. Es solamente una formalidad distanciarlas.
Buenas tardes amigo tamahome, fundamentandome en las wikis de Mikrotik y algunos foros realice una configuracion para 4 wlan, y una Local, la instalo reseteando el mikrotik borrando toda su configuracion y partiendo desde cero por la Terminal, sin embargo hago mis pruebas y al momento de conectarle una conexion de internet la rechaza, la carga un instante y luego deja de recibir datos. te dejo el scrip para ver si me iluminas. muchas gracias.
/ 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=wlan1
add address=10.112.0.2/24 network=10.112.0.0 broadcast=10.112.0.255 interface=wlan2
add address=10.113.0.2/24 network=10.113.0.0 broadcast=10.113.0.255 interface=wlan3
add address=10.114.0.2/24 network=10.114.0.0 broadcast=10.114.0.255 interface=wlan4
/ 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
add chain=input in-interface=wlan3 action=mark-connection new-connection-mark=wlan3_conn
add chain=input in-interface=wlan4 action=mark-connection new-connection-mark=wlan4_conn
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
add chain=output connection-mark=wlan3_conn action=mark-routing new-routing-mark=to_wlan3
add chain=output connection-mark=wlan4_conn action=mark-routing new-routing-mark=to_wlan4
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
add chain=prerouting dst-address=10.113.0.0/24 action=accept in-interface=Local
add chain=prerouting dst-address=10.114.0.0/24 action=accept in-interface=Local
add chain=prerouting dst-address-type=!local in-interface=Local per-connection-classifier=both-addresses:4/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:4/1 \
action=mark-connection new-connection-mark=wlan2_conn passthrough=yes
add chain=prerouting dst-address-type=!local in-interface=Local per-connection-classifier=both-addresses:4/2 \
action=mark-connection new-connection-mark=wlan3_conn passthrough=yes
add chain=prerouting dst-address-type=!local in-interface=Local per-connection-classifier=both-addresses:4/3 \
action=mark-connection new-connection-mark=wlan4_conn passthrough=yes
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
add chain=prerouting connection-mark=wlan3_conn in-interface=Local action=mark-routing new-routing-mark=to_wlan3
add chain=prerouting connection-mark=wlan4_conn in-interface=Local action=mark-routing new-routing-mark=to_wlan4
/ 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
add dst-address=0.0.0.0/0 gateway=10.113.0.1 routing-mark=to_wlan3 check-gateway=ping
add dst-address=0.0.0.0/0 gateway=10.114.0.1 routing-mark=to_wlan4 check-gateway=ping
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
add dst-address=0.0.0.0/0 gateway=10.113.0.1 distance=3 check-gateway=ping
add dst-address=0.0.0.0/0 gateway=10.114.0.1 distance=4 check-gateway=ping
/ ip firewall nat
add chain=srcnat out-interface=wlan1 action=masquerade
add chain=srcnat out-interface=wlan2 action=masquerade
add chain=srcnat out-interface=wlan3 action=masquerade
add chain=srcnat out-interface=wlan4 action=masquerade
El equipo es una RB750, una de mis dudas es si esta linea debe seguir una asendencia desde 2/0 como es el caso de 2 WAN o a partir de 4/0 por ser de 4 WAN
add chain=prerouting dst-address-type=!local in-interface=Local per-connection-classifier=both-addresses:4/0 \
o
2/0 \
Está bien la parte de PCC, fijate que los routers tengan los IPs que vos usaste.
Sino cargalo de cero de nuevo con 2 WAN igual que en el manual a ver si funciona, Después hacé los cambios correspondientes para que sean 4.
Gracias por tu respuesta, ahi puede estar el problema resulta que no he ruteado los modems, todos son Adsl con ips dinamicas; sin embargo conoces alguna regla para que tome directamente las ips de los modems?
Tenés que poner un router en cada modem (si es que el mismo modem no te permite usarlo de router, algunos se pueden configurar), cada router llega el IP que configuraste como GATEWAY en el balanceo y va enchufado al puerto que vos designaste para ese IP.
buen dia hermano tamahome ya he visto que eres muy buen conocedor del Mikrotik, haber si me puedes ayudar me compre un RB750G y supuestamente me lo configuraon para sumar y balancear por pcc 3 adsl y tambien con failover, le coloque los 3 adsl y no me funciona de tal manera, esta funcionando como si tubiera una sola adsl.
los 3 adsl van al 750G y de ahi aun servidor linux… me podrias ayudar con algunos scrip?
No trabajo con scripts. La configuración de balanceo por PCC tiene un costo de U$S 300. Cualquier otra consulta la podés hacer por el foro.
Saludos.
mi hermanaso yo stoy en venezuela, con gusto te los pagaria para q lo configuraras, bueno saludos, gracias por responder….
He seguido los pasos pero no anda.
Te comento… Wan1 IP Fija. Wan2 DHCP. Actualmente tengo sobre la IP Fija Publica creadas reglas de port fwd, para accesos remotos, etc. Ahora tengo Disabled la Wan2, y si la pongo en Enable paso a navegar pero la Wan1 deja de tener trafico y dejan de funcionar las reglas sobre ese enlace… por donde puedo comenzar la busqueda de la solucion?
Gracias