Microsoft Azure Site to Site cross-premises usando GNU/Linux (Ubuntu 12.04 LTS) y StrongSwan

27/07/2014 5 Comments

Siempre comento en los eventos y charlas que la realidad de las empresas y organizaciones no son escenarios donde puedan afrontar un cambio total de infraestructuras a la nube. Normalmente, tendremos una serie de servidores y un espacio habilitado como nuestro CPD que no pueden ser descartados de forma inmediata. Es por ello que si bien la nube puede ser el futuro, los escenarios híbridos son el presente. Un escenario híbrido en Microsoft Azure es aquel que nos permite utilizar las capacidades de la plataforma de Microsoft como si se tratase de una red que forma parte de la nuestra, de forma transparente.

Los más aventajados en redes entenderéis perfectamente de qué estoy hablado. Si es posible conectar múltiples sucursales con una oficina central a través de túneles site to site entre ellos, ¿por qué no íbamos a poder hacer lo mismo con una red virtual de Azure?

Escenario tipo de VPN site to site con Azure, usado en este caso para hospedar servidores de identidad para Office 365
Escenario tipo de VPN site to site con Azure, usado en este caso para hospedar servidores de identidad para Office 365

Microsoft Azure nos permite realizar conexiones site to site a sus redes virtuales a través de túneles IPsec, utilizando IKEv1 (enrutado estático) ó IKEv2 (enrutado dinámico) con -en teoría- cualquier dispositivo que cumpla con las especificaciones. Este un listado de dispositivos soportados y sus respectivos scripts de configuración. Veréis que es posible usar una máquina genérica con GNU/Linux y openSwan, sin embargo, este sólo soporta enrutamiento estático y en mi experiencia, el enrutamiento dinámico propicia enlaces más estables con Azure. Que un dispositivo o software no esté en esta lista no implica que no funcione, sino que Microsoft no ha certificado ni da soporte al mismo.

Por diversos motivos de redes que explicaré en otro post, en Plain Concepts utilizamos GNU/Linux como router y servidor de perímetro, por lo que necesitábamos un stack IPsec que funcionase bien con Microsoft Azure y soportase enrutamiento dinámico. strongSwan parecía la solución más obvia y… ¡acertamos de pleno! Tanto openSwan como strongSwan son forks del descontinuado freeSwan. No voy a entrar a valorar cual de las dos implementaciones es mejor, así que sólo comentaré que openSwan funcionó bien con enrutamiento estático y strongSwan con dinámico.

Requerimientos

  • Una máquina GNU/Linux con el kernel 2.6 o superior.
  • Al menos dos interfaces físicas ethernet.
  • Conectividad directa a Internet sin NAT. Una de las interfaces debe recibir directamente la IP pública de nuestro proveedor.

Como soy muy de Debian y distribuciones basadas en el mismo, como Ubuntu, vamos a hacer la instalación y configuración en esta última, concretamente en Ubuntu 12.04 LTS.

Configurar Microsoft Azure

  1. Configurar una nueva red virtual de Azure preparada para la conexión VPN site to site. Hay un artículo detallado aquí; pero también podéis ver el video de la charla que Alberto y servidor dimos en el TechDays 2014 de Microsoft.
  2. Crear una puerta de enlace. Basta con hacer clic en la opción correspondiente. Recordad que utilizaremos enrutamiento dinámico. Este proceso es simple pero a Azure le llevará entre 15-30 minutos en completarlo. Tenemos la excusa perfecta para un café 🙂

    Botón de selección de tipo de gateway en el momento de su creación.
    Botón de selección de tipo de gateway en el momento de su creación.
  3. Tomar nota de la IP de gateway y de la pre-shared key. Las necesitaremos para configurar strongSwan en Linux.

    Pre-Shared Key del gateway de Azure
    Pre-Shared Key del gateway de Azure

Configuración de Ubuntu con strongSwan

  1. En primer lugar instalamos strongSwan:

  2. Editamos el archivo de configuración /etc/ipsec.conf:

  3. Ahora debemos editar /etc/ipsec.secrets para establecer nuestra pre-shared key:

  4. Para finalizar, debemos instruir a iptables qué trafico es el que debe direccionar a través del túnel que hemos establecido:

Si todo ha ido bien, deberíamos ver la siguiente pantalla en el portal de Azure:

Pantalla de estado de nuestra conexión VPN site to site con Microsoft Azure
Pantalla de estado de nuestra conexión VPN site to site con Microsoft Azure

No hay que olvidar también que para que el kernel de Linux haga forwarding de nuestros paquetes es necesario habilitar dicha característica:

Si queremos que este cambio sea permanente hay que eliminar la marca de comentario (#) en la línea net.ipv4.ip_forward=1 en el archivo /etc/sysctl.conf.

Hecho esto, nuestras máquinas on-premises deberían ver perfectamente las que se encuentran en nuestra red virtual de Azure y viceversa.

Os dejo por último con la charla que Alberto y servidor dimos sobre estos temas, que aunque hablábamos de openSwan, la configuración y el trabajo para ponerlo a punto era muy análogo, por lo que lo podéis ver todo de forma muy gráfica.

Happy networking!

5 thoughts on “Microsoft Azure Site to Site cross-premises usando GNU/Linux (Ubuntu 12.04 LTS) y StrongSwan”

  1. Hola estoy intentado recrear tu instalación pero mi stronswan ruter si bien tiene ip fija, lo tengo detras de un nat.

     

    Estoy teniendo problemas de enrutado y eso que no tengo nada de firewall en la red (principalmente cuando habilito en Nat ) desde azure si puedo hacer ping a la red interna pero desde la red interna a Azure no.
    iptables A POSTROUTING t nat d REDAZURE m policy dir out pol ipsec j ACCEPT

    Hay que hacer alguna regla para que los paquetes vuelvan??

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *