Enrutamiento Basado en Políticas (Police Based Routing-PBR)

Enrutamiento Basado en Políticas (Police Based Routing-PBR)


Para los WISP (Proveedores de Servicios de Internet Inalámbrico), comprender y aplicar eficazmente el balanceo de carga es crucial para optimizar el uso del ancho de banda, mejorar el rendimiento, reducir la latencia y evitar la sobrecarga de recursos. Existen dos métodos principales: el Balanceo de Carga por Conexión (PCC) y el balanceo de carga con enrutamiento basado en políticas (PBR).

PCC es ideal para mantener la coherencia de las sesiones -crucial para navegación en sitios de bancos-, siendo fácil de implementar y gestionar. Se basa en asignar cada nueva conexión a una línea específica según criterios predefinidos, como direcciones IP y puertos, lo cual asegura que todos los paquetes de una conexión sigan la misma ruta. Sin embargo, no adapta la distribución del tráfico en función de la carga actual de las líneas, lo que puede resultar en desequilibrios.

PBR, por otro lado, ofrece una mayor flexibilidad y permite una gestión del tráfico más sofisticada. Permite definir políticas basadas en múltiples criterios, ajustando dinámicamente el tráfico según las condiciones de la red. Aunque más complejo y posiblemente más costoso debido a la necesidad de equipos avanzados y definición detallada de políticas, es más adecuado para entornos que requieren una distribución de carga dinámica.

PCC funciona bien para escenarios que requieren simplicidad y coherencia de sesión, mientras que PBR es preferible para entornos que demandan una gestión de tráfico más adaptable y detallada.

Tabla de enrutamiento main versus Tabla creadas por el usuario

En RouterOS de MikroTik, la tabla de enrutamiento principal (Main routing table) es la tabla por defecto donde se almacenan las rutas de enrutamiento. Cada ruta que se aprende por los protocolos de enrutamiento, que se configura manualmente, o que se descubre automáticamente (como las rutas conectadas o estáticas), se coloca en esta tabla a menos que se especifique de otra manera. Es la tabla de enrutamiento principal que el router utiliza para tomar decisiones de enrutamiento para dirigir el tráfico a través de la red.

Las tablas de enrutamiento creadas por el usuario son tablas adicionales que pueden ser configuradas para gestionar el tráfico de manera más específica o para implementar políticas de enrutamiento avanzadas. Estas tablas personalizadas permiten a los administradores de red separar el tráfico en diferentes flujos, aplicar distintas reglas o políticas a esos flujos, o incluso realizar pruebas sin afectar la tabla de enrutamiento principal. Cuando un paquete coincide con una regla de enrutamiento que apunta a una tabla creada por el usuario, el router consultará esa tabla específica para tomar decisiones de enrutamiento para ese paquete en lugar de la tabla principal.

Caso práctico de PBR para el balanceo de carga con dos proveedores de internet (ISP) usando IP Route Rules

En este post vamos a mostrar una manera muy simple de balancear entre dos líneas WAN, indicando cuál red local sale por un proveedor ISP específico. El procedimiento se hace en dos etapas:

Procedimiento para el enrutamiento basado en políticas (PBR)

Escenario: Se tiene una red segmentada en dos redes de área local (LAN1 y LAN2) y se contratan dos proveedores de servicios de internet (ISP1 y ISP2), por lo tanto se tiene WAN1 y WAN2. El objetivo es que todos los equipos de la LAN1 naveguen en internet a través del ISP1, y los usuarios de la LAN2 lo hagan usando el ISP2. Este escenario implica que los usuarios deben estar en segmentos de red diferente.

Diagrama de red para dos LAN y dos proveedores ISP.
ID LAN Gateway Tabla de enrutamiento
10.1.1.0/24 172.16.1.1 LAN1-to-ISP1
10.2.2.0/24 192.168.1.1 LAN2-to-ISP2

Para aplicar el enrutamiento basado en políticas, vamos a crear una tabla de enrutamiento específica. Todo el tráfico que tenga origen en la LAN1 (10.1.1.0/24) y que vaya dirigido a internet lo manejará la tabla LAN1-to-ISP1.

Nota: Cuando se asigna una IP a un puerto en RouterOS se debe agregar la máscara de red. Si pasamos el mouse sobre la IP, como en la figura, nos da el rango. En el ejemplo:

  • ID red: 10.2.2.0
  • Rango IP usable: 10.2.2.1 - 10.2.2.254
  • Broadcast: 10.2.2.255
    En el ejemplo, asignamos la IP 10.2.2.2/24 al puerto llamado ether2-WAN2.

Asignación de una dirección IP a un puerto en RouterOS.

En este ejemplo, partimos del hecho de que los equipos ya están configurados conforme al Diagrama de Red. Si se tiene duda de cómo configurar un router, revisar el post Configuración Básica de un Router RB750Gr3

Paso 1. Crear tabla de enrutamiento específica

Agregamos la Tabla de enrutamiento específica en RouterOS, de acuerdo al Diagrama de Red.

  1. Click en el menú IP
  2. click en la opción Routes
  3. Seleccionamos la pestaña Rules
  4. Click en "+" para agregar una nueva regla de Política de Enrutamiento
  5. Vamos a marcar todo el tráfico que venga de la LAN1, 10.1.1.0/24
    Observar que el router tiene una IP 10.1.1.1/24 que pertenece a la LAN1, ver Digrama de Red.
  6. Ahora todo el tráfico lo mandamos a la Tabla LAN1-to-ISP1, esta tabla es diferente a la Tabla main que es la que maneja el tráfico normal.
  7. Aceptamos los cambios.
Cómo agregar una Regla de Política de Enrutamiento para la LAN1.

Desde la línea de comandos se hace lo siguiente

/ip route rule
add src-address=10.1.1.0/24 table=LAN1-to-ISP1

Ahora, agregamos la Tabla LAN2-to-ISP2 de la misma manera para todo el tráfico que viene de la LAN2 10.2.2.0/24.

Cómo agregar una Regla de Política de Enrutamiento para la LAN2.

Desde línea de comandos

/ip route rule
add src-address=10.2.2.0/24 table=LAN2-to-ISP2

Ahora tenemos dos tablas de enrutamiento para manejar el tráfico que provienen de LAN1 y LAN2. Ahora vamos a crear las rutas que dirija el tráfico hacia cada ISP.

Paso 2. Crear rutas para manejar el tráfico de la Tabla específica.

  1. Click en el menú IP
  2. Seleccionar la opción Route
  3. Elegimos la pestaña Routes
  4. "+" agregamos nueva ruta
  5. Seleccionamos la ruta de destino por defecto 0.0.0.0/0, todo el tráfico que va hacia internet va a esta dirección.
  6. En el Gateway elegimos el del ISP1, en el ejemplo 172.16.1.1. Este equipo es el que nos da salida a internet.
  7. Habilitamos la opción de ping para monitorear el gateway.
  8. En la opción Routing Mark, elegimos el nombre de la Tabla de enrutamiento del paso anterior LAN1-to-ISP1. Significa que el tráfico de esta tabla va a salir por el Gateway 172.16.1.1
  9. Aplicamos los cambios.
Cómo agregar la ruta por defecto para la Tabla de enrutamiento LAN1-to-ISP1.

Desde línea de comandos

/ip route
add check-gateway=ping distance=1 gateway=172.16.1.1 routing-mark=LAN1-to-ISP1

Para la red LAN2, hacemos algo similar pero ahora elegimos el gateway del ISP2 192.168.1.1, y la Tabla LAN2-to-ISP2 de acuerdo a nuestro diagrama.

Cómo agregar la ruta por defecto para la Tabla de enrutamiento LAN2-to-ISP2.

Desde línea de comandos

/ip route
add check-gateway=ping distance=1 gateway=192.168.1.1 routing-mark=LAN2-to-ISP2

Cuando el tráfico vaya de LAN1 a LAN2, ese tráfico lo debe manejar la Tabla principal (Table main). Se debe agregar una política similar para el tráfico de LAN2 a LAN1.

Política de enrutamiento para el tráfico entre la LAN1 y LAN2.

Estas reglas son importantes porque permiten la comunicación entre las redes locales y deben colocarse hasta arriba en la pestaña de Rules, porque una vez que hace match una regla, ya no se evalúan las demás. Primero deben ir las reglas que permiten la comunicación entre LANs y que usan la Tabla main, después las reglas que usan las Tablas LAN-to-ISP. Las reglas una vez que hace match ya no se evalúan las de abajo, como en el Firewall.

Desde la línea de comandos

/ip route rule
add dst-address=10.2.2.0/24 src-address=10.1.1.0/24 table=main
add dst-address=10.1.1.0/24 src-address=10.2.2.0/24 table=main
add src-address=10.1.1.0/24 table=LAN1-to-ISP1
add src-address=10.2.2.0/24 table=LAN2-to-ISP2

Es importante recordar que debe haber una ruta por defecto (0.0.0.0/0) que maneje la marca de enrutamiento main para dirigir todo el tráfico que no tenga la marca LAN1-to-ISP1 o LAN2-to-ISP2.

En este caso, el Gateway 172.16.1.1 controla el tráfico por defecto y como tiene distancia 1 es el prioritario. El Gateway 192.168.1.1 es el respaldo (distancia 2) y puede manejar el tráfico que no tenga marca de enrutamiento.

/ip route
add check-gateway=ping distance=1 gateway=172.16.1.1
add check-gateway=ping distance=2 gateway=192.168.1.1
add check-gateway=ping distance=1 gateway=172.16.1.1 routing-mark=LAN1-to-ISP1
add check-gateway=ping distance=1 gateway=192.168.1.1 routing-mark=LAN2-to-ISP2

De esta manera hemos especificado el enrutamiento basado en políticas.

¿Cómo hacer que un cliente salga por un ISP específico si se tienen dos proveedores de servicios de internet?

¿Qué pasa si solo tengo una LAN, es decir, no está segmentada pues el número de usuarios es muy pequeño pero quiero seleccionar que IP sale por un ISP específico? Se puede aplicar el mismo procedimiento, solo que habrá que hacerlo para cada una de las IP específica.

Escenario. Se tiene un cliente (10.1.1.5/24) que consume mucho ancho de banda y queremos que salga por el ISP2.

Diagrama de red para que un usuario específico navegue por un ISP específico.

Desde línea de comandos:

/ip route
add check-gateway=ping distance=1 gateway=192.168.1.1 routing-mark=Cliente-to-ISP2

/ip route rule
add src-address=10.1.1.5/24 table=Cliente-to-ISP2

Con PBR se tiene mucha flexibilidad y es posible elegir qué servicios salen por cada ISP, aunque eso se verá en otro post.