«Me lo contaron y lo olvidé; lo vi y lo entendí; lo hice y lo aprendí».

— Confucio

Balanceo de carga con dos WAN en MikroTik RouterOS 7 – WISP/ISP desde cero

Cómo usar una WAN principal y enviar tráfico específico por una segunda conexión

En muchas redes profesionales como ISP/WISP es habitual disponer de más de una conexión a Internet. Esto puede hacerse por distintos motivos: tener una línea de respaldo, repartir tráfico entre varias conexiones, separar servicios críticos o forzar que determinados equipos o dominios salgan por una WAN concreta.

En MikroTik RouterOS 7 esto se puede hacer de varias formas, pero una de las más flexibles es mediante Policy Based Routing, también conocido como enrutamiento por políticas. Este sistema permite decidir por qué conexión WAN debe salir un tráfico concreto, en función de su origen, destino, puerto, protocolo o lista de direcciones.

En este artículo vamos a ver una configuración práctica con dos WAN:

  • WAN1: conexión principal.
  • WAN2: conexión secundaria (Con una IP publica fija).
  • LAN: red interna de los usuarios.
  • Algunos equipos o destinos concretos saldrán por WAN2.
  • El resto del tráfico saldrá por WAN1.
  • Las dos WAN están por el mismo puerto de ethernet, con dos usuarios PPPoE.

Según la documentación oficial de MikroTik, RouterOS 7 permite hacer Policy Routing usando tablas de rutas, routing rules y marcas mediante mangle.

Escenario de red

Vamos a utilizar el siguiente ejemplo:

WAN1: ether1
WAN2: ether2
LAN:  bridge
Red LAN: 192.168.8.0/24

Gateway WAN1: 10.70.0.1
Gateway WAN2: IP Publica Fija

La idea será:

Todo el tráfico normal  ----------> WAN1
Equipos seleccionados -----------> WAN2
Dominios seleccionados ----------> WAN2

Importante: esto no es exactamente balanceo de carga

Antes de empezar conviene aclarar algo importante, no es lo mismo balanceo de carga, que elegir por qué WAN sale cada tráfico. El balanceo de carga reparte conexiones entre varias WAN de forma automática. En MikroTik suele hacerse con métodos como PCC o ECMP.

En este artículo vamos a hacer algo más controlado, mantener una WAN principal y enviar tráfico concreto por la segunda WAN, ya sea un rango de IP o una lista.

Esto es muy útil cuando queremos, por ejemplo:

  • Que un equipo concreto salga por la WAN secundaria.
  • Que un servicio concreto salga por otra línea.
  • Que un dominio determinado use una conexión específica.
  • Separar tráfico de oficina y tráfico especial.
  • Usar una WAN secundaria sin balancear todo el tráfico.
  • Balancear la carga para no sobrecargar la WAN principal

Configurar las rutas principales

La ruta principal será la de WAN1.

/ip route
add dst-address=0.0.0.0/0 gateway=192.168.8.1 distance=1 comment="Salida principal por WAN1"

También podemos añadir WAN2 como respaldo:

/ip route
add dst-address=0.0.0.0/0 gateway=IP-publica distance=2 comment="Backup por WAN2"

Con esto, si WAN1 está activa, todo saldrá por WAN1. Si WAN1 cae, MikroTik podrá usar WAN2.

Crear una tabla de rutas para WAN2

En RouterOS 7 no basta con escribir una marca nueva directamente en mangle. Primero hay que crear la tabla de rutas. Esto es importante porque, si no existe la tabla, en el campo new-routing-mark puede aparecer únicamente main.

Creamos la tabla:

/routing table
add name=to_WAN2 fib

La opción fib es importante porque permite que esa tabla se use para el reenvío real del tráfico. MikroTik documenta que RouterOS utiliza tablas de routing y que, por defecto, todas las rutas están en la tabla main.

Añadir la ruta por defecto en la tabla WAN2

Ahora añadimos una ruta por defecto dentro de la tabla to_WAN2:

/ip route
add dst-address=0.0.0.0/0 gateway=IP-Publica routing-table=to_WAN2 comment="Salida forzada por WAN2"

Con esto, todo tráfico que sea marcado con to_WAN2 saldrá por el gateway de WAN2.

Configurar NAT para las dos WAN

Para que los equipos de la LAN puedan navegar por Internet, necesitamos NAT en ambas WAN.

/ip firewall nat
add chain=srcnat out-interface=WAN1 action=masquerade comment="NAT salida WAN1"
add chain=srcnat out-interface=WAN2 action=masquerade comment="NAT salida WAN2"

En este caso como están las dos en una lista se lo hacemos a la lista:

Crear una lista de equipos que saldrán por WAN2

Ahora vamos a crear una address-list con los equipos que queremos sacar por WAN2.

Por ejemplo, si queremos que el equipo 192.168.1.50 salga por WAN2:

/ip firewall address-list
add list=LAN_SALE_WAN2 address=192.168.1.50 comment="Equipo que sale por WAN2"

También podemos añadir más equipos:

/ip firewall address-list
add list=LAN_SALE_WAN2 address=192.168.1.51 comment="Otro equipo por WAN2"
add list=LAN_SALE_WAN2 address=192.168.1.52 comment="Otro equipo por WAN2"

Incluso podríamos añadir una red completa:

/ip firewall address-list
add list=LAN_SALE_WAN2 address=192.168.1.100-192.168.1.150 comment="Rango por WAN2"

Marcar el tráfico con mangle

Ahora usamos mangle para marcar el tráfico que venga desde esos equipos. Mangle sirve para marcar paquetes o conexiones para que otros procesos de RouterOS puedan tratarlos de forma especial. La documentación oficial de MikroTik explica que mangle se utiliza, entre otras cosas, para routing, colas y NAT.

Creamos la regla:

/ip firewall mangle
add chain=prerouting src-address-list=LAN_SALE_WAN2 action=mark-routing new-routing-mark=to_WAN2 passthrough=no comment="Enviar equipos seleccionados por WAN2"

Explicación:

chain=prerouting

La regla se aplica antes de que el router decida por dónde enviar el paquete.

src-address-list=LAN_SALE_WAN2

Sólo afecta a los equipos incluidos en esa lista.

action=mark-routing

Marca el tráfico para usar otra tabla de rutas.

new-routing-mark=to_WAN2

Usa la tabla de rutas que hemos creado antes.

passthrough=no

Una vez aplicada la marca, no sigue evaluando más reglas de mangle.

Enviar un dominio concreto por WAN2

En algunos casos no queremos sacar un equipo completo por WAN2, sino sólo determinados destinos.

Por ejemplo:

dominio-ejemplo.com
servicio-ejemplo.com

Para esto podemos usar listas de direcciones.

En RouterOS se puede añadir un dominio a una address-list. MikroTik resolverá ese dominio y añadirá sus IP a la lista.

Ejemplo:

/ip firewall address-list
add list=DOMINIOS_WAN2 address=dominio-ejemplo.com comment="Dominio que saldrá por WAN2"
add list=DOMINIOS_WAN2 address=servicio-ejemplo.com comment="Servicio que saldrá por WAN2"

Después creamos una regla mangle para enviar esos destinos por WAN2:

/ip firewall mangle
add chain=prerouting dst-address-list=DOMINIOS_WAN2 action=mark-routing new-routing-mark=to_WAN2 passthrough=no comment="Enviar dominios seleccionados por WAN2"

Con esto, cualquier equipo de la LAN que acceda a esos destinos saldrá por WAN2.

Con esta configuración podemos mantener una salida principal por WAN1 y, al mismo tiempo, decidir qué equipos o servicios concretos saldrán por WAN2. Esto ofrece una solución muy flexible para empresas, oficinas, redes con varias conexiones o instalaciones donde se necesita controlar el tráfico de forma precisa.