Balanceo de carga con routers neutro Este es el típico balanceo de carga que todas las guías explican, lo usaré para comenzar ya que es el más fácil de entender. Tener en cuenta que estas IP's y nombres de las interfaces de red son relativos, ya cada uno lo tendría que adaptar a lo que tienen y a lo que necesitan, no es obligatorio hacerlo tal como está aquí. Este es un balanceo estandar, sin soporte de webproxy, ni hotspot, ya pueden utilizar un PC ó RB que se dedique únicamente a la administración (core router). 1. Asignando IP's a las interfaces de red /ip address add address=10.0.1.2/24 interface=ether1 add address=10.0.2.2/24 interface=ether2 add address=192.168.5.1/24 interface=ether5 Ciertamente los IP's asignados a las interfaces WAN deben de corresponder a los gateway de los routers que tengan; osea, si tengo conectado un router con IP 10.0.1.1 al ether1, NO le voy a colocar 10.0.2.2 a esta interfaz de red, ya que NO van a estar en el mismo rango. Ya más obvio vemos que ether5 será la nueva puerta de enlace o gateway que tendrá ambos links de internet balanceados. 2. Configurando enmascarado de las interfaces de red WAN Como estamos viendo en la imágen, en este ejemplo contamos con 2 interfaces de red WAN, que son ether1 y ether2, entonces tocará enmascarar cada una de ellas. CODE, HTML o PHP Insertado: /ip firewall nat add chain=srcnat out-interface=ether1 action=masquerade add chain=srcnat out-interface=ether2 action=masquerade Si tuviéramos más interfaces de red WAN, entonces tocaría enmascarar TODAS y cada una de estas interfaces. 3. Configurando las rutas, parte 1 Voy a separar la configuración de IP -> Route en 2 partes, una antes del balanceo, y otra cuando ya empezaremos a balancear, esta primera parte no debe de ser nada nuevo ni especial para nosotros, ya que se configura siempre hasta en lo más básico. Para hacerles recordar, aquí es donde configuramos las puertas de enlace o gateways (GW) de los routers que tenemos. /ip route add gateway=10.0.1.1 check-gateway=ping distance=1 add gateway=10.0.2.1 check-gateway=ping distance=2 Bueno, sí hay algo nuevo, estas son los distance, y check-gateway, vamos a explicarlo desde lo más fácil. No olvidar que si tenemos más gateways de otros routers, tenemos que agregarlos uno a uno, de preferencia con distance distintos. check-gateway, tal como su nombre lo indica, revisará el gateway que hemos configurado, ya sea por ping o por ARP; en este caso está configurado con ping, así que hará un ping 'constante' al gateway configurado y si no tiene respuesta, esta ruta se "desactivará" automáticamente. Si el ping vuelve a tener respuesta, la ruta se volverá a "activar". Esto sirve como un tipo de failover muy básico, ya que sólo responderá su apagamos o desconectamos el router con el IP al que apunta el ping. distance, es la distancia de la ruta, "la ruta de menor distancia será la ruta predeterminada o ruta activa". Es muy fácil de explicar con un ejemplo: En realidad hasta aquí ya deberíamos de tener internet, no necesariamente balanceado ya que aún no hemos hecho la configuración del balanceo, pero sí tendremos internet, entonces ¿Qué linea de internet se estará usando? como el gateway 10.0.1.1 tiene la menor distancia, es por ahí donde saldrá el internet, entonces podemos decir que es la ruta activa o ruta predeterminada. Si hacemos que el gateway 10.0.2.1 tenga una distancia menor, entonces ya será por aquí por donde saldremos a internet, ya que la ruta activa cambiará. Nota: Las rutas NO activas normalmente se tornan de un color azul, esto es absolutamente normal, en realidad hacer el balanceo de carga sirve para poder utilizar las rutas no activas, y así aprovechar todos los links de internet que tengamos. Posiblemente aprenderse todo esto de las distancias no sea muy necesario para aquellos que trabajan siempre desde el interior de su red, pero para los que trabajan desde internet, o sea, remotamente, tomar en cuenta las distancias es muy importante. 4. Configurando mangle, empieza la magia o los problemas para el que no pone atención Como acabo de decir, hasta este momento nosotros YA contamos con internet del mismo balanceador, pero como aún no hemos hecho la configuración del balanceo, pues sólo tendremos internet de un solo router. El principal objetivo de esta parte de la guía es aprender a partir conexiones en grupos y agregarles una marca, ya con esa marca podremos enrutar esas conexiones entre los routers que tengamos, logrando por fin el deseado balanceo... aunque esto último lo haremos más adelante en IP -> Route. Para poder entender mejor cómo será llevado este balanceo, dividiremos la configuración de mangle en 2 subpartes y un opcional: 4.1 Primera parte, todo lo que entre por un WAN, debe salir por el mismo WAN /ip firewall mangle add chain=prerouting in-interface=ether1 connection-state=new new-connection-mark=ether1_conn action=mark-connection passthrough=yes add chain=prerouting in-interface=ether2 connection-state=new new-connection-mark=ether2_conn action=mark-connection passthrough=yes add chain=output connection-mark=ether1_conn new-routing-mark=to_ether1 action=mark-routing passthrough=yes add chain=output connection-mark=ether2_conn new-routing-mark=to_ether2 action=mark-routing passthrough=yes En realidad vemos 2 partes más, las 2 primeras reglas marcan las nuevas conexiones que ingresan por cada WAN: ether1 y ether2, los nombres de estas marcas de conexión son ether1_conn y ether2_conn. Las 2 siguientes reglas marcan la ruta de esas conexiones, los nombre de estas marcas de routeo son to_ether1 y to_ether2. Ya debemos de saber que cuando tenemos una marca de routeo, esta se termina sacando por IP -> Route, que veremos más adelante. Esta configuración es necesaria para las conexiones que entran desde internet. Por ejemplo, si me conecto desde mi casa utilizando winbox al balanceador de un cliente en Japón, puedo ingresar por su router B y de ahí al balanceador, y ciertamente debería de tener la respuesta por el mismo router B, pero si no tuviera estas reglas, las conexiones saldrían por la ruta predeterminada, que podría ser el router A, lo trae muchos problemas. 4.2 Segunda parte, dividiendo las conexiones de los clientes y formando grupos /ip firewall mangle #Parte A add chain=prerouting in-interface=ether5 connection-state=new dst-address-type=!local per-connection-classifier=both-addresses:2/0 action=mark-connection new-connection-mark=ether1_conn passthrough=yes add chain=prerouting in-interface=ether5 connection-state=new dst-address-type=!local per-connection-classifier=both-addresses:2/1 action=mark-connection new-connection-mark=ether2_conn passthrough=yes #Parte B add chain=prerouting in-interface=ether5 connection-mark=ether1_conn action=mark-routing new-routing-mark=to_ether1 passthrough=yes add chain=prerouting in-interface=ether5 connection-mark=ether2_conn action=mark-routing new-routing-mark=to_ether2 passthrough=yes Una vez más tenemos 2 partes; las 2 primeras líneas (que hacen la Parte A) son marcas de conexión, y las 2 siguientes líneas (que hacen la Parte B) marcan la ruta de esas conexiones; los nombres de las marcas de conexión y routeo son los mismos que vimos previamente. Vemos también que en las 2 primeras reglas lo que se marca son las conexiones "de los clientes" que ingresan por ether5, que es la interfaz de red LAN, y que son divididas utilizando per-connection-classifier o también llamado PCC. Para dividir 50 y 50 (por ciento), hemos utilizado 2/0 y 2/1, si se diera el caso que fueran 3 links de internet de igual velocidad, cada marca de conexión debería de tener un per-connection-classifier de 3/0, 3/1, y 3/2 respectivamente. Sí, parece una explicación barata, después de todo parte del "secreto" para balancear varios links de internet y links de distinta velocidad se hace en esta segunda parte de Mangle, pero ya lo veremos con más detalle dentro de nada. 4.3 [Opcional] Tercera parte, accediendo a nuestros routers desde la red balanceada Ya que estamos marcando todas las conexiones de nuestros clientes para llevarlas a uno y otro link de internet, cuando queramos ingresar a cualquiera de nuestros routers no nos será posible, ya que estamos obligados a salir a internet. La solución sería que las conexiones que tengan como destino nuestros routers no sean marcados, en realidad es bastante simple, sólo debemos aceptar sus conexiones. /ip firewall mangle add chain=prerouting dst-address=10.0.1.0/24 action=accept in-interface=ether5 add chain=prerouting dst-address=10.0.2.0/24 action=accept in-interface=ether5 Nota: Estas reglas 2 reglas aceptando las conexiones con destino a nuestros routers deberían de estar por encima de las demás reglas de Mangle, en especial las de la "Segunda parte". 5. Configurando las rutas, parte 2 El resultado de marcado de rutas en Mangle fue obtener 2 marcas de routeo, una para cada router o link de internet, en este caso tenemos a to_ether1 y to_ether2, ambas rutas las tenemos que sacar por IP -> Routes en un proceso parecido al que hicimos en la parte1 de "Configurando las rutas". /ip route add gateway=10.0.1.1 routing-mark=to_ether1 check-gateway=ping add gateway=10.0.2.1 routing-mark=to_ether2 check-gateway=ping La explicación es la misma que con la parte1, la diferencia aquí es que no se usan distancias ya que no son necesarias, y se agrega la marca de routeo to_ether1 y to_ether2 en cada regla. Entonces, todo lo que tenga marca to_ether1 saldrá por el router con GW 10.0.1.1 y todo lo que tenga marca to_ether2 saldrá por el router con GW 10.0.2.1 Con esto ya tenemos nuestro balanceo funcionando.