[Manual] MWAN3 proyecto alternativo a MULTIWAN (HG556a) - Introducción
- Idea básica sobre un sistema de múltiples wan
- Preparación del material que brinda las WAN
- Requisitos para mwan3
- Configuración del switch del router
- Configuración de las interfaces
- Configuración del firewall
- Comprobar que todo está bien
- Instalar el MWAN3
- Configurar el MWAN3
- INTERFACES
- MIEMBROS
- POLÍTICAS
- REGLAS
- Pruebas de funcionamiento
- Configuración de led´s del router hg556a
IntroducciónEl primero punto a aclarar, el proyecto MWAN3 no es el mismo proyecto multiwan (paquete) ni está basado en él, pero logra los mismos resultados y algunos más, se tiene más control sobre el proceso pero es más complejo de manejar.
El proyecto multiwan al parecer está en sus últimos estertores, pues su creador no responde a las consultas por el foro ni actualiza el paquete desde hace 2 años, por lo que se explica los problemas que causa el programa cuando se ejecuta en compilaciones actuales de openwrt. En compilaciones antiguas aún funcionan bien, pero con los peligros de no tener actualizaciones que corrijan los problemas de seguridad, y en especial el bug Heartbleed.
Buscando alternativas encontré el proyecto MWAN3 con su wiki (
http://wiki.openwrt.org/doc/howto/mwan3) y su foro de desarrollo (
https://forum.openwrt.org/viewtopic.php?id=39052). El paquete debe ser instalado durante la configuración del router, por lo tanto no debe estar compilado en la imagen openwrt.
Idea básica sobre un sistema de múltiples wanEn definición, un multiwan es útil cuando tenemos 2 o más entradas wan (internet o enrutado a otras redes) y queremos que una única red utilice las 2 o más salidas wan de una manera determinada. Podemos configurarlo para que al caer una de las wan la otra empiece a trabajar. O podemos configurarlo para que se repartan el trabajo entre ellas.
OJO esto no aumentará el ancho de banda. Si tenemos una entrada de Internet de 10 Mbps y otra de 6 Mbps
NO tendremos un ancho de banda de 16 Mbps. Me explico, sí quieres bajar un archivo ISO de una distribución Linux por descarga directa (única fuente) solo podrás bajarlo por una sola wan, ya sea por la de 10 o por la de 6, depende de como lo tengas configurado. Pero si quieres bajar el mismo archivo por un enlace torrents (muchas fuentes) podrás utilizar las 2 wan al tiempo porque se reparten las fuentes, dando como resultado una descarga que se acerca mucho a los 16 Mbps (esto tiene muchas variables).
Preparación del material que brinda las WANUna wan puede ser cualquier interfaz del router, como alguno de los puertos Lan, las entradas PPPoE, dispositivos 3G (por usb) o el mismo wifi trabajando como cliente.
Los nombres que tienen las interfaces pueden ser cualquiera mientras que no sean muy grandes, ni tengan espacios o caracteres especiales, deberían ser descriptivos de su uso.
Cualquier interfaz puede ser wan o lan, todo depende de en que zona del fireware sea argumentado.
Requisitos para mwan3El hardware debe tener apoyo VLAN (que soporte conmutación de puertos) y por lo menos 3 interfaces activas (2 para wan y un lan).
Se necesita OpenWrt 12.09 o posterior, y los siguientes paquetes instalados, que si no están en la compilación se instalaran automáticamente como dependencias.
- ip
- iptables
- iptables-mod-conntrack
- iptables-mod-conntrack-extra
- iptables-mod-ipopt
Configuración del switch del routerDesde luci podemos dividir cada entrada lanX (puerto) del router individualmente, para manejarla como una lan virtual.
En nuestro ejemplo tendremos un puerto lan (conector Lan1 o puerto 0), tres puertos wan (los otros 3 conectores del router, lan2, lan3 y lan4). Antes de guardar la configuración en el router, no te equivoques, tu pc debe estar conectado al puerto 0 del router, porque los demás puertos serán wan y no te darán acceso al router.
Date cuenta, el cuadro de cpu debe estar en “marcado” para todas las VLAN, y solo un puerto debe estar seleccionado para cada interfaz vlan. El penúltimo puerto, mejor déjalo “parado” en todos los vlan (éste puede variar según el router, porque es un puerto interno del router).
Ejemplo parte del archivo /etc/config/network
config switch
option name 'eth0'
option reset '1'
option enable_vlan '1'
config switch_vlan
option device 'eth0'
option vlan '1'
option ports '0 5t'
config switch_vlan
option device 'eth0'
option vlan '2'
option ports '1 5t'
config switch_vlan
option device 'eth0'
option vlan '3'
option ports '2 5t'
config switch_vlan
option device 'eth0'
option vlan '4'
option ports '3 5t'
Configuración de las interfaces Red>Interface>añadir nueva interfaz…
Debes colocar un nombre que describa la wan y ponerlo como cliente DHCP, esto es solo al principio, después si quieres puedes cambiarlo a ip fija, identificación por mac, o dejarlo así. Por último, elegir la interfaz física que le toque. En este caso una interfaz vlan, pero podría ser una wifi, el 3G o pppoe (este router no lo soporta).
En configuración avanzada, debe estar seleccionado la opción “usar pasarela por defecto” y coloque una métrica diferente en cada interfaz WAN, puede ir ascendiendo de 10 en 10. Wan = métrica 10, wan2 = métrica 20, wan3 = métrica 30….
En la pestaña “configuración de cortafuegos” deja todas las interfaces wan en una misma zona del firewall, en este caso la zona wan.
Ejemplo de una parte del archivo /etc/config/network
config interface 'lan'
option ifname 'eth0.1'
option force_link '1'
option type 'bridge'
option proto 'static'
option netmask '255.255.255.0'
option ip6assign '60'
option ipaddr '192.168.30.1'
config interface 'wan'
option proto 'dhcp'
option ifname 'eth0.2'
option metric '10'
config interface 'wan2'
option proto 'dhcp'
option ifname 'eth0.3'
option metric '20'
config interface 'wan3'
option proto 'dhcp'
option ifname 'eth0.4'
option metric '30'
Observa que la interfaz lan no tienga asociado ningún servidor DNS, ni puerta de entrada. Además, debes quitar estas líneas de la configuración lan que se crean algunas veces y pueden dar problemas con el mwan3:
option _orig_ifname 'eth0.x'
option _orig_bridge 'false'
Por otro lado, es conveniente utilizar diferentes subredes en cada interfaz wan y lan.
Aunque en mis pruebas a funcionado con subredes repetidas en las wan, es mejor no arriesgarse a colisiones innecesarias.
Configuración del firewallLos apartados a configurar en este archivo son muy pocos, se basan en agrupar las interfaces en dos grupos o zonas. Una zona lan donde se refiere a la interfaz lan, y una zona wan donde se gestionan las interfaces wwan, wan, wan2, wan3, que hemos creado en el archivo network. Es posible colocar cada interfaz wan en una zona diferente, pero solo conseguiremos un aumento de gasto en la CPU.
Un detalle importante que debemos colocar en el archivo firewall es: tener en cada zona del firewall la opción “opción conntrack '1'” para activar el nat entre las zonas. Esta opción no tiene un modo grafico en luci para seleccionarla (por lo menos yo no la he encontrado). Por lo tanto, no queda otra que utilizar los comandos uci o editar el archivo de firewall directamente:
Modo uci:
uci set firewall.@zone[0].conntrack=1
uci set firewall.@zone[1].conntrack=1
uci commit
Configuración de archivo /etc/config/firewall
config defaults
option syn_flood '1'
option input 'ACCEPT'
option output 'ACCEPT'
option forward 'REJECT'
config zone
option name 'lan'
option input 'ACCEPT'
option output 'ACCEPT'
option forward 'ACCEPT'
option network 'lan'
option conntrack '1'
config zone
option name 'wan'
option input 'REJECT'
option output 'ACCEPT'
option forward 'REJECT'
option masq '1'
option mtu_fix '1'
option network 'wan wan6 wan2 wan3'
option conntrack '1'
config forwarding
option src 'lan'
option dest 'wan'
Comprobar que todo está bienCuando tienes listas todas las interfaces, ya sean wan por Switch, la o las wifi, el 3G o PPPoE (no soportado por este router), conectamos las interfaces a Internet e intentamos conseguir ping de google, para comprobar el funcionamiento de cada interfaz. Si existe algún problema antes de instalar mwan3, este no lo arreglará y posiblemente tendrás que empezar de nuevo.
Ejemplo de comandos para realizar la prueba de ping a google, no debería perderse ningún paquete.
ping -c 1 -I eth0.2 www.google.com
ping -c 1 -I eth0.3 www.google.com
ping -c 1 -I eth0.4 www.google.com
ping -c 1 -I wwan www.google.com
Resultado esperado para cada interfaz:
root@OpenWrt:/etc/config# ping -c 1 -I eth0.2 www.google.com
PING www.google.com (173.194.41.242): 56 data bytes
64 bytes from 173.194.41.242: seq=0 ttl=54 time=57.888 ms
--- www.google.com ping statistics ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 57.888/57.888/57.888 ms
Instalar el MWAN3Antes de instalar el paquete, deben asegurarse de que todas sus interfaces WAN están configuradas y funcionan correctamente, según lo explicado anteriormente. Y reinicia el router antes de la instalación.
Dejo aquí mis compilaciones, no tienen instaladas el paquete MWAN3, pero las he compilado con él, y está listo para instalarlas. Son para la versión A y B del hg556a, debes instalarlo con Internet, porque tiene dependencias. Instala primero el paquete mwan3 y luego el de luci.
compilación Chaos Calmer r42261 versión A compilación Chaos Calmer r42261 versión B Si utilizas otro tipo de router también puedes instalarlo desde la instalación de programas de luci. Cuando te dispongas a instalarlo solo deja una interfaz con Internet porque sino te dará errores de instalación.
También puedes descargar primero el paquete y después instalarlo con la ayuda de los siguientes comandos:
cd /tmp
wget http://213.136.13.52/mwan3_1.5-4_all.ipk
wget http://213.136.13.52/luci-app-mwan3_1.3-1_all.ipk
opkg update
opkg install mwan3_*.ipk
opkg install luci-app-mwan3_*.ipk
NOTA: Es muy importante reiniciar el router después de la instalación de MWAN3.
Configurar el MWAN3 Mwan3 no es un demonio que se ejecuta en segundo plano, por tanto cualquier alteración que hagamos en la configuración no tendrá efecto, hasta que ocurra un reinicio del router o una desconexión y/o conexión en caliente de una interfaz (hotplug).
La configuración de mwan3 se divide en 4 partes, con las que se puede entrelazar opciones más complejas que con el proyecto multiwan.
INTERFACES: En esta parte del archivo de configuración MWAN3 declaramos las wan que existen y que queremos tener activas, para el sistema de múltiples wan.
Mwan3 realiza ping cíclicos a un servidor (list track ip). En este caso a un servidor dns de google, pero podría ser cualquier dns para saber si tenemos salida a Internet. O podría hacer ping a la puerta de entrada del siguiente router a que esté conectado, si solo queremos saber si se conectó físicamente el cable. No hay cantidad límite de direcciones para hacer ping, todas se realizan al mismo tiempo y pueden estar repetidas en diferentes interfaces wan. Sí no se declara una dirección para hacer ping, la interfaz aparece siempre como conectada.
La opción “count” es el número de ping enviado a cada dirección; “timeout” es el tiempo de espera para recibir la respuesta del servidor, que no debería ser menor a 2 seg; “reliability” es la cantidad mínima de direcciones que deben responder al ping, para que se considere una prueba exitosa; “interval” es el tiempo en segundos que se espera entre las pruebas de ping; “down y up” es la cantidad de pruebas exitosas o fracasadas para considerar la interfaz conectada o desconectada.
# Interfaz
config interface 'wan'
option enabled '1'
list track_ip '8.8.4.4'
list track_ip '8.8.8.8'
option reliability '1'
option count '1'
option timeout '3'
option interval '5'
option down '5'
option up '5'
config interface 'wan2'
option enabled '1'
list track_ip '8.8.4.4'
list track_ip '8.8.8.8'
option reliability '1'
option count '1'
option timeout '3'
option interval '5'
option down '5'
option up '5'
config interface 'wan3'
option enabled '1'
list track_ip '8.8.4.4'
list track_ip '8.8.8.8'
option reliability '1'
option count '1'
option timeout '3'
option interval '5'
option down '5'
option up '5'
MIEMBROS: Cada interfaz se divide en varios miembros, cada uno con una prioridad (métrica) y un peso (weight), la prioridad es mayor entre más bajo el número, el peso puede tener cualquier valor. Solo se tiene en cuenta el peso cuando las métricas son iguales.
# Miembros
config member 'wan_m1_w3'
option interface 'wan'
option metric '1'
option weight '3'
config member 'wan_m2_w3'
option interface 'wan'
option metric '2'
option weight '3'
config member 'wan_m3_w3'
option interface 'wan'
option metric '3'
option weight '3'
config member 'wan2_m1_w3'
option interface 'wan2'
option metric '1'
option weight '3'
config member 'wan2_m2_w3'
option interface 'wan2'
option metric '2'
option weight '3'
config member 'wan2_m3_w3'
option interface 'wan2'
option metric '3'
option weight '3'
config member 'wan3_m1_w3'
option interface 'wan3'
option metric '1'
option weight '3'
config member 'wan3_m2_w3'
option interface 'wan3'
option metric '2'
option weight '3'
config member 'wan3_m3_w3'
option interface 'wan3'
option metric '3'
option weight '3'
POLÍTICAS: En ellas se agrupan los miembros para establecer el comportamiento de estos en el mwan3. Cuando hay miembros con diferente métrica, solo se tendrá en cuenta al de menor número que esté activo, no se tiene en cuenta el peso del miembro.
Pero si tenemos 3 miembros con la misma métrica, se realizará un balance de la carga entre los miembros. Este balance se realiza dependiendo del peso de cada uno, si todos tienen el mismo número estará equilibrada la carga (33% para cada uno).
Se tiene que sumar todos los pesos de la política, y con éste dividir el peso de cada miembro para saber la proporción que le tocará en el balance de la carga. Por ejemplo, en el caso de tener dos miembros de peso 3 y uno de peso 2, el balance de carga es: 37.5% +37.5%+25%.
En el ejemplo hay una política llamada conmutador, cada uno de sus miembros tiene diferente métrica. Por lo tanto, cuando se use esta política, se utilizará la interfaz wan al 100%. Pero, sí se desconecta la interfaz wan, esta utilizará a wan2 al 100%, lo mismo para la wan3, cuando vuelva a aparecer la interfaz wan ella tendrá la prioridad. Esta es una configuración en conmutador de error.
En el caso de la política llamada balance, todos los miembros tienen la misma métrica, por lo tanto, se dividen la carga al 33% para cada miembro. Cuando se desconecta un miembro la carga se divide en los miembros que quedan, y cuando este regrese se vuelve a repartir.
Se pueden crear políticas muy complejas a partir de entrelazar miembros, jugando con el balance y la conmutación. Tanto las políticas como los miembros pueden estar en la configuración sin que realicen una tarea concreta en las reglas, las que sobren no es necesario borrarlas.
# Políticas
config policy 'conmutador'
list use_member 'wan_m1_w3'
list use_member 'wan2_m2_w3'
list use_member 'wan3_m3_w3'
config policy 'balance'
list use_member 'wan_m1_w3'
list use_member 'wan2_m1_w3'
list use_member 'wan3_m1_w3'
config policy 'wan_only'
list use_member 'wan_m1_w3'
config policy 'wan2_only'
list use_member 'wan2_m1_w3'
config policy 'wan3_only'
list use_member 'wan3_m1_w3'
REGLAS: En ellas se describe cuando se seguirá una política dada. En las reglas, es importante el orden en que se encuentran. Por lo que, deben colocarse las reglas más especificas al comienzo de la lista y las más generales al final. Debería existir por lo menos una regla configurada.
En el ejemplo existe una regla llamada voip que utiliza la política de conmutador para el servicio de llamadas voip, que van hacia la dirección ip 77.72.169.x por cualquier puerto UDP.
Si esto no se cumple para la conexión, la siguiente regla dice que todas las conexiones a cualquier destino utilizarán la política balance, que en este caso balancea la carga entre sus wan.
# Reglas
config rule 'voip'
option dest_port '1024:65535'
option proto 'udp'
option dest_ip '77.72.169.0/24'
option use_policy 'conmutador'
config rule 'default_rule'
option dest_ip '0.0.0.0/0'
option use_policy 'balance'
Pruebas de funcionamiento La interfaz de luci nos entrega muchísima información sobre el funcionamiento del entorno de múltiples wan. Además, podemos editar el archivo de configuración de MWAN3 y el de red (network). En el apartado avanzado > troubleshooting encontramos los resultados de todas las pruebas necesarias para evaluar la salud de nuestro sistema de múltiples wan.
Configuración de led´s del router hg556a Dejo la configuración de los led´s que tengo, para que sea más vistoso el flujo en cada interfaz: led rojo trasmisión y led verde recepción.
/etc/config/system
config led 'led_lan'
option name 'LAN'
option sysfs 'HW556:red:dsl'
option trigger 'netdev'
option mode 'link tx rx'
option default '0'
option dev 'eth0'
config led 'led_usb'
option name 'USB'
option sysfs 'HW556:red:hspa'
option trigger 'usbdev'
option dev '1-2'
option interval '50'
option default '0'
config led
option default '0'
option sysfs 'HW556:red:lan4'
option trigger 'netdev'
option dev 'eth0.4'
option name 'wan3-t'
option mode 'tx'
config led
option default '0'
option name 'wan3-r'
option sysfs 'HW556:green:lan4'
option trigger 'netdev'
option dev 'eth0.4'
option mode 'rx'
config led
option default '0'
option name 'wan2-t'
option sysfs 'HW556:red:lan3'
option trigger 'netdev'
option dev 'eth0.3'
option mode 'tx'
config led
option default '0'
option name 'wan2-r'
option sysfs 'HW556:green:lan3'
option trigger 'netdev'
option dev 'eth0.3'
option mode 'rx'
config led
option default '0'
option name 'wan-t'
option sysfs 'HW556:red:lan2'
option trigger 'netdev'
option dev 'eth0.2'
option mode 'tx'
config led
option default '0'
option name 'wan-r'
option sysfs 'HW556:green:lan2'
option trigger 'netdev'
option dev 'eth0.2'
option mode 'rx'
config led
option default '0'
option name 'lan-t'
option sysfs 'HW556:red:lan1'
option trigger 'netdev'
option dev 'eth0.1'
option mode 'tx'
config led
option default '0'
option name 'lan-r'
option sysfs 'HW556:green:lan1'
option trigger 'netdev'
option dev 'eth0.1'
option mode 'rx'