Balanceo de carga en un router MikroTik con líneas asimétricas
Cuando se tiene más de un proveedor de servicios de internet (ISP) y se quiere aprovechar todos los servicios, se pueden balancear las líneas para repartir el uso de las líneas. Un método para balanceo de carga es el Per Connection Classifier (PCC), el cual es propietario de MikroTik.
En un post anterior se revisó Cómo balancear la carga con el método PCC y servicios con el mismo ancho de banda.
PCC toma los campos seleccionados (direcciones IP) del encabezado del paquete y con la ayuda de un algoritmo Hashing convierte los campos elegidos en un valor de 32-bits. Este valor es dividido por un denominador y el resto es comparado con un valor específico, entonces si son iguales el paquete será capturado. Se puede elegir la dirección IP origen o destino, el puerto origen o destino (o combinaciones de estos valores) del encabezado para usarse en la operación Hashing, tal como se muestra en la Figura 1. De manera que se tiene un procedimiento para la captura de paquetes.

Los detalles de PCC se declaran en Firewall-> Mangle -> Advanced -> Per Connection Classifier, como se muestra en la Figura 2.

a) Proveedores de Internet con la misma velocidad
Por ejemplo, en el caso de que se tengan 5 líneas simétricas, Fig. 3.

Proveedor | PCC | Velocidad (Mbps) | Marca de conexión |
---|---|---|---|
1 | 5/0 | 100 | ISP1-Conn |
2 | 5/1 | 100 | ISP2-Conn |
3 | 5/2 | 100 | ISP3-Conn |
4 | 5/3 | 100 | ISP4-Conn |
5 | 5/4 | 100 | ISP5-Conn |
Primero aceptamos todo el tráfico que tiene como destino los segmentos de red de los proveedores de servicios de internet (192.168.X.0/24) y la red local (172.16.1.0/24)
/ip firewall mangle
add action=accept chain=prerouting dst-address=192.168.10.0/24
add action=accept chain=prerouting dst-address=192.168.20.0/24
add action=accept chain=prerouting dst-address=192.168.30.0/24
add action=accept chain=prerouting dst-address=192.168.40.0/24
add action=accept chain=prerouting dst-address=192.168.50.0/24
add action=accept chain=prerouting dst-address=172.16.1.0/24
Ahora clasificamos las conexiones y les ponemos una marca de conexión:
/ip firewall mangle
add action=mark-connection chain=prerouting in-interface=br-LAN new-connection-mark=ISP1-Conn passthrough=yes per-connection-classifier=both-addresses:5/0
add action=mark-connection chain=prerouting in-interface=br-LAN new-connection-mark=ISP2-Conn passthrough=yes per-connection-classifier=both-addresses:5/1
add action=mark-connection chain=prerouting in-interface=br-LAN new-connection-mark=ISP3-Conn passthrough=yes per-connection-classifier=both-addresses:5/2
add action=mark-connection chain=prerouting in-interface=br-LAN new-connection-mark=ISP4-Conn passthrough=yes per-connection-classifier=both-addresses:5/3
add action=mark-connection chain=prerouting in-interface=br-LAN new-connection-mark=ISP5-Conn passthrough=yes per-connection-classifier=both-addresses:5/4
En el caso de que fueran 8 proveedores de servicio de internet, cada uno de los paquetes podría tener cualquiera de las 8 marcas de conexión, de acuerdo a la siguiente tabla.
Proveedor | PCC | Velocidad (Mbps) | Marca de conexión |
---|---|---|---|
1 | 8/0 | 100 | ISP1-Conn |
2 | 8/1 | 100 | ISP2-Conn |
3 | 8/2 | 100 | ISP3-Conn |
4 | 8/3 | 100 | ISP4-Conn |
5 | 8/4 | 100 | ISP5-Conn |
6 | 8/5 | 100 | ISP6-Conn |
7 | 8/6 | 100 | ISP7-Conn |
8 | 8/7 | 100 | ISP8-Conn |
a) Proveedores de Internet con diferente velocidad
En las reglas anteriores cada paquete se le asigna una marca de un proveedor diferente, de manera que todos los ISP traficarán la misma cantidad de paquetes con el tiempo. Sin embargo, si los ISP proporcionan un ancho de banda diferente, entonces se espera que los de mayor capacidad tengan más paquetes con su marca:

Una manera de resolver el problema es dividiendo todas las velocidades entre el menor ancho de banda y luego aproximar al valor entero más bajo.
Proveedor | Velocidad (Mbps) | Mbps/menor | Paquetes | Marca |
---|---|---|---|---|
1 | 50 | 50/50 = 1 | 1 | ISP1-Conn |
2 | 100 | 100/50 =2 | 2 | ISP2-Conn |
3 | 100 | 100/50 =2 | 2 | ISP3-Conn |
4 | 75 | 75/50=1.5 | 1 | ISP4-Conn |
5 | 50 | 50/50=1 | 1 | ISP5-Conn |
Total | 7 |
Eso significa que de cada 7 paquetes, tres de ellos llevarán las marcas ISP1, ISP4 y ISP5, mientras que dos paquetes tendrán marcas ISP2 y otros dos ISP3.
Las reglas quedarían así, aceptamos el tráfico de los proveedores y de la LAN.
/ip firewall mangle
add action=accept chain=prerouting dst-address=192.168.10.0/24
add action=accept chain=prerouting dst-address=192.168.20.0/24
add action=accept chain=prerouting dst-address=192.168.30.0/24
add action=accept chain=prerouting dst-address=192.168.40.0/24
add action=accept chain=prerouting dst-address=192.168.50.0/24
add action=accept chain=prerouting dst-address=172.16.1.0/24
Los paquetes se marcan de acuerdo a la siguientes reglas:
/ip firewall mangle
add action=mark-connection chain=prerouting in-interface=br-LAN new-connection-mark=ISP1-Conn passthrough=yes per-connection-classifier=both-addresses:7/0
add action=mark-connection chain=prerouting in-interface=br-LAN new-connection-mark=ISP2-Conn passthrough=yes per-connection-classifier=both-addresses:7/1
add action=mark-connection chain=prerouting in-interface=br-LAN new-connection-mark=ISP2-Conn passthrough=yes per-connection-classifier=both-addresses:7/2
add action=mark-connection chain=prerouting in-interface=br-LAN new-connection-mark=ISP3-Conn passthrough=yes per-connection-classifier=both-addresses:7/3
add action=mark-connection chain=prerouting in-interface=br-LAN new-connection-mark=ISP3-Conn passthrough=yes per-connection-classifier=both-addresses:7/4
add action=mark-connection chain=prerouting in-interface=br-LAN new-connection-mark=ISP4-Conn passthrough=yes per-connection-classifier=both-addresses:7/5
add action=mark-connection chain=prerouting in-interface=br-LAN new-connection-mark=ISP5-Conn passthrough=yes per-connection-classifier=both-addresses:7/6
c) Caso de tres proveedores con velocidad diferente
Proveedor | Velocidad (Mbps) | Mbps/menor | Paquetes | Marca |
---|---|---|---|---|
1 | 100 | 100/100 = 1 | 1 | ISP1-Conn |
2 | 100 | 100/100 = 1 | 1 | ISP2-Conn |
3 | 200 | 200/100 = 2 | 2 | ISP3-Conn |
Total | 4 |
El número de paquetes nos indican cuántos divisores (D) tendremos, recordando que el resto siempre va desde 0 hasta (D-1). En este caso tendremos D=4 y R=0,1,2 y 3.
/ip firewall mangle
add action=accept chain=prerouting dst-address=192.168.10.0/24
add action=accept chain=prerouting dst-address=192.168.20.0/24
add action=accept chain=prerouting dst-address=192.168.30.0/24
add action=accept chain=prerouting dst-address=172.16.1.0/24
add action=mark-connection chain=prerouting in-interface=br-LAN new-connection-mark=ISP1-Conn passthrough=yes per-connection-classifier=both-addresses:4/0
add action=mark-connection chain=prerouting in-interface=br-LAN new-connection-mark=ISP2-Conn passthrough=yes per-connection-classifier=both-addresses:4/1
add action=mark-connection chain=prerouting in-interface=br-LAN new-connection-mark=ISP3-Conn passthrough=yes per-connection-classifier=both-addresses:4/2
add action=mark-connection chain=prerouting in-interface=br-LAN new-connection-mark=ISP3-Conn passthrough=yes per-connection-classifier=both-addresses:4/3
El resto de la configuración se puede revisar en Cómo balancear la carga con el método PCC y servicios con el mismo ancho de banda.
¿Necesitas ayuda?
E-mail: oon@mikronet.mx
Whatsapp: https://wa.link/mikronet
Comments ()