Balanceo de carga
(ISP) por PCC on Mikrotik
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.
No comments:
Post a Comment