Cómo configurar alta disponibilidad con dos WAN (dos ISP)

Hace años realizé estas pruebas pero a patita, usando directamente los comandos de linux (tal y como se indica en el excelente libro de www.lartc.org)

Yo había pensando que había cambiado un poco la idea, pero no, sigue siendo la misma.

El escenario:

Supongamos que tenemos dos proveedores de internet, dos ISP, pueden ser el mismo ISP con dos conexiones o dos muy diferentes ISP.. y que queremos que los usuarios de nuestra red naveguen a través de ambos.

Bueno, pues requeriremos de una máquina con 3 tarjetas de red, una para cada WAN (para cada ISP) y otra para la LAN donde estarían nuestros sistemas.

Este gráfico que mostraré es muy burdo, puede ser mejorado (sobre todo por ejemplo insertando un servidor proxy, correos, control de contenidos, etc detrás de la tarjeta ETH02 del server que aquí muestro).

Esquema planteado para balanceo de carga entre dos conexiones de internet
Esquema planteado para balanceo de carga entre dos conexiones de internet

Este método que usaremos no hace magias, simplemente si un usuario solicita ir a un sitio web, el sistema le saca la petición por uno de los dos ISP. Si otro usuario solicita ir a otro sitio, pues le saca la petición por el otro ISP y así cada petición irá saliendo alternadamente por cada ISP.

No es perfecto: una vez que una petición sale por un ISP, se mantiene esta preferencia hasta que se cierre totalmente. Es por muchas cosas, por ejemplo para evitar que un sitio web sienta que le están jugando sucio si ve que un paquete llega por una IP y luego el siguiente por otra. Entonces se mantiene toda la conexión por un ISP, para que salga por la misma IP siempre.

Lógicamente esto tiene algo malo, si se cae el ISP por donde sale mi conexión, entonces me quedaré colgado un rato, hasta que se reinicialice la conexión por el otro ISP. Por suerte este será el escenario menos frecuente, y no ocurrirá a todas las conexiones, sino solamente a las que estén verdaderamente establecidas en ese momento. Típicamente ni se notará.

Algunas personas piensan que esto se llama Bonding. Bonding es “pegar” y no es la idea esta. Bonding (también conocido como trunking) se hace cuando yo tengo dos tarjetas de red que se van a conectar a un mismo switch (a una misma vlan) y le uso para incrementar el canal hacia mi LAN y para que ante una falla la otra tarjeta siga sirviendo. En el bonding ambas interfaces actúan de común acuerdo, ambas tienen una única IP y se reparten los paquetes desde-hacia esa IP. El bonding se hace en LAN, no se hace en conexiones WAN.

Bueno, veamos el diagrama anterior: tengo dos ruteadores de dos ISP diferentes, ellos me han entregado una IP (192.168.9.1 el uno y 192.168.1.1) que sería el gateway hacia ellos. Ellos no saben y no esperan que tu tengas dos ISP, simplemente ellos esperan que tú configures una IP en tu servidor (192.168.9.3 el uno y 192.168.1.3 el otro) y que le pongas a ese servidor la IP de ellos de gateway (192.168.1.1 el uno y 192.168.9.1 el otro).

Pero nosotros no haremos eso. Nosotros bajaremos ZeroShell del sitio www.zeroshell.net y le pondremos a nuestro servidor 3 tarjetas:

  1. en ETH00 configuraremos la IP que nos dió el ISP1 (192.168.9.3).. y hasta le pondremos su gateway (192.168.9.1). Aquí reiniciamos y probamos ver si nos podemos conectar al zeroshell. Te toca aprender a guardar su “profile” la idea es que la máquina arranque con esta interfaz bien configurada en el profile que guardarás.
  2. En ETH01 configuraremos la IP que nos dió el ISP2 (192.168.1.1), y no le pondremos de momento el gateway de este ISP2.
  3. En ETH02 cofiguraremos la IP que pondremos hacia nuestra LAN, la 10.0.0.1 por ejemplo.

No continuemos hasta que logremos ver esto, las 3 interfaces configuradas como aqui indiqué:

Configuracion de la red en ZS para alta disponibilidad

Si te fijas, eth00 tiene la IP que me asignó el ISP1, y así mismo eth01 y eth02 la de mi lan.

Pondré una PC a mi LAN (eth02) y le pondré de IP 10.0.0.2 y de gateway 10.0.0.1. Lógicamente le pondré los dns que mejor me parezcan.

Ahora configuraré NAT, para que el equipo de mi red LAN (10.0.0.2 le conecté a ETH02) pueda navegar.

Para configurar NAT, mira la imagen anterior. Ves allí arriba un botoncito que dice: NAT. Pues dá click aquí y escoge AMBAS interfaces que están conectadas a los ISP: ETH00 y ETH01 en mi caso.

Probando el NAT:

No sigas si esta prueba no resulta: intenta realizar un ping desde el equipo de tu LAN (10.0.0.2) hacia internet, verás que funciona. Tiene que funcionar, sino revisa que el NAT esté bien definido y que el equipo pueda hacer ping a 10.0.0.1 que es el gateway de él. No sigas hasta que esto no funcione.

Configurando Dual WAN

En el menú de la izquierda escojo: Net Balancer

  • En la sección Gateway List, aparecerá solamente el gateway que se corresponde con la eth00 (la conexión a la que le configuré el gateway anteriormente) Tiene el nombre DEFAULT GATEWAY. Tócale y aprieta el botón Change
  • En el recuadrito que te saldrá, en la parte que dice: IP Address, defínele la IP del gateway de ese ISP1 (192.168.9.1 en mi ejemplo).
  • En el mismo anterior recuadro que te saldrá, escoge Status y ponle en Active
  • Guardo y cierro esta ventana, me regresa a la ventana principal
  • Ahora aprieto el botón Add
  • Aquí En descripción pongo algo que sea referente al ISP2
  • En IP Address pongo la IP del gateway del ISP2
  • En Status, le pongo Active (enable, habilitado, lo que diga)
  • Guardo y cierro.
  • ahora tendré definido dos gateways. El del ISP1 y el del ISP2
  • A la derecha habilito el ICMP Failover checking.
  • Abajo en Failover IP addresses, pongo una o varias IPs hacia las cuales probará el sistema: el sistema cada algunos segundos enviará un ping a esas IPs si no responde, es que está caído ese canal y le deshabilita por un rato. Sugiero pongas por ejemplo 8.8.8.8 que es la IP de un dns de google que nunca se cae.
  • Ah sí, le pongo enable en las Failover IP Addresses que configuré
  • Arriba arriba a la derecha de la ventana principal dice; Mode, le dejé como estaba como Load Balancing and Failover.
  • Arriba arriba a la izquierda de la ventana principal dice: Status, le marco ese checkbox para que se active.
  • Entonces aprieto en Save.

Luego de un ratito ya estará funcionando.

Verificaciones:

Cómo le probé: Bueno, apagué, desconecté uno de los dos ISP mientras hacía ping desde la PC de la red LAN.

Luego reconecté la conexión de ese ISP, y cuando ya estaba activo, desconecté el otro.. y probé, y el ping funcionaba.

Luego le reconecté a este ISP. Para que se mantuvieran los dos canales.

Viendo los logs fíjate cómo el sistema reporta que le apagué una conexión (la default) cómo lo detecta y le desactiva, y luego que se enciende le detecta y activa. Lo mismo con la otra conexión que le llamé Paul (pues iba por la conexión que tiene Paul para su uso) y se nota cómo se detecta la desconexión y la reconexión.

Screenshot from 2013-01-15 14:54:53

En resumen, es factible hacer failover de forma bastante fácil.

Lógicamente esta es una pequeña introducción al tema, pues hay variantes un poco más especializadas (por ejemplo cómo hacer para recibir correos, cómo priorizar un canal sobre el otro, etc). Pero definitivamente con esta introducción seguramente podrás ya seguir investigando las otras variantes.

Todo este experimento lo hice a través de sistemas virtualizados para facilitarme la vida.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.