Cómo establecer un túnel IPsec site-to-site mediante software en un extremo a un cortafuegos o router. Establecer el túnel en el cortafuegos y en el equipo Linux Ubuntu con Docker.

Estudio de caso, datos iniciales

Partimos de una situación hipotética de necesidad de conexión entre dos sedes, la de trabajo y la de casa. La sede de trabajo cuenta con un cortafuegos con soporte para crear túneles IPsec. La sede de casa, al tener un router simple que no tiene opción de establecer túnel IPsec, se opta por montar una máquina virtual Linux Ubuntu y establecer el túnel por software.

La red de la sede de casa tiene el siguiente direccionamiento:192.168.1.0/24. Con la IP pública de salida a internet 145.145.112.112. Esta IP pública debe ser fija/estática, si varía, habría que reconfigurar el túnel.

La red de la sede de trabajo tiene el siguiente direccionamiento:192.168.100.0/24. Con la IP pública de salida a internet 175.175.120.120. Al igual que en la sede de casa, esta IP pública debe ser fija/estática, si varía, habría que reconfigurar el túnel.

Pretendemos levantar un túnel IPsec entre ambas sedes, de forma que los equipos de la red de trabajo «vean» a los de la red de casa y viceversa, con el mismo direccionamiento, como si todos estuvieran en la misma red.

Requisitos para montar un túnel IPsec

En la sede de casa necesitaremos:

  • Una máquina virtual o física con Linux Ubuntu Server 24. Este equipo será el que establezca el túnel. En este caso tendrá la IP 192.168.1.115. En el siguiente enlace explicamos cómo montar un equipo virtual Linux Ubuntu:
  • El equipo Linux debe tener instalado Docker Desktop y Docker Compose, en el siguiente enlace explicamos cómo instalarlos:

En la sede de trabajo necesitaremos:

  • Acceso al cortafuegos perimetral o router para crear el túnel IPsec.
  • Acceso a un PC de la red para comprobar las comunicaciones.

Sede local de trabajo: configurar túnel IPsec y reglas de acceso en cortafuegos

En la sede de trabajo accederemos al cortafuegos o router perimetral para establecer el túnel y las políticas de seguridad. A modo de ejemplo, explicamos cómo crear un túnel IPsec en un cortafuegos Fortigate. El procedimiento es similar para cualquier otro cortafuegos: Palo Alto, Check Point, Huawei, Cisco, Juniper, Sophos, Barracuda, SonicWall, etc. Algunos routers admiten establecer túneles IPsec, por lo que no tiene por qué ser un cortafuegos.

Establecer túnel en el cortafuegos de la sede de trabajo

En primer lugar, crearemos el túnel IPsec en el cortafuegos, para ello, desde la consola de gestión, accederemos a VPN – IPsec y pulsaremos en «Create new» – «IPsec Tunnel»:

Podremos crear el túnel usando el asistente, marcando «Site to Site»:

Indicaremos la IP remota (la IP pública de salida a Internet de la sede de casa), la interfaz de salida y la clave (contraseña segura). La clave debe ser de fortaleza alta y será la misma que establezcamos en la parte del túnel de la sede de casa:

Indicaremos la red local (de la sede de trabajo) que queramos que sea accesible desde la sede de casa e indicaremos el direccionamiento de red de la sede local (la sede de trabajo), en este caso 192.168.100.0/24 y de la sede remota (la sede de casa), en este caso 192.168.1.0/24:

Si queremos crear el túnel sin asistente, podemos establecer todas las configuraciones directamente, eligiendo «Custom»:

En este caso, deberemos indicar todas las opciones del túnel IPsec (puerto, IP remota, IP local, clave, tipo de cifrado, etc.):

Y también las fases de conexión, donde estableceremos el direccionamiento local y el remoto:

Reglas de acceso en cortafuegos de la sede de trabajo

Tras crear el túnel en el cortafuegos, definiremos las políticas de cortafuegos (reglas de acceso), crearemos dos reglas, una para el tráfico desde la sede de casa (remota) a la de trabajo (local) y viceversa.

Estas reglas ya estarán creadas si hemos usado el asistente para desplegar el túnel IPsec.

Para la regla del tráfico de la sede remota de casa a la sede local de trabajo:

Y la inversa, para el tráfico desde la sede local de trabajo a la sede remota de casa:

En estas reglas delimitaremos qué objetos (dispositivos, equipos o redes) tendrán conectividad y visibilidad entre una sede y la otra. Para nuestro caso, permitiremos el acceso solo al equipo Ubuntu Server de la sede de casa con la IP 192.168.1.115, que es el que levantará el túnel. En este ejemplo, el equipo Linux Ubuntu podrá «ver» todos los equipos de la red LAN de la sede de trabajo y por cualquier puerto/servicio.

Rutas en cortafuegos de la sede de trabajo

Si hemos usado el asistente para crear el túnel IPsec nos habrá creado las rutas necesarias, si no lo hemos hecho, deberemos crear las rutas estáticas correspondientes:

Rutas en cortafuegos de la sede de trabajo

Sede remota de casa: configurar túnel IPsec por software con Docker en Linux Ubuntu

En la sede remota de casa accederemos al equipo Linux Ubuntu Server y crearemos los siguientes ficheros en una carpeta: ipsec.conf, ipsec.secrets, Dockerfile y docker-compose.yml. A continuación indicamos el contenido de cada uno de estos ficheros.

Fichero ipsec.conf

Desde una carpeta, por ejemplo desde /home/ipsec, crearemos el fichero ipsec.conf, con el comando:

Pegaremos el siguiente contenido, cambiando la IP pública de la sede de casa, la de la sede de trabajo y los direccionamientos por lo que tengamos en cada caso:

Guardaremos los cambios pulsando Control + O y cerraremos la edición pulsando Control + X.

Fichero ipsec.secrets

En la misma carpeta que para el fichero anterior, crearemos el fichero ipsec.secrets, con el comando:

Este fichero contendrá una línea con la IP pública de la sede de casa, la ip pública de la sede de trabajo y la clave secreta establecida al crear el túnel IPsec en el cortafuegos de la sede de trabajo:

Fichero docker-compose.yml

En la misma carpeta que para el fichero anterior, crearemos el fichero docker-compose.yml, con el comando:

Con el siguiente contenido:

Fichero Dockerfile

En la misma carpeta que para el fichero anterior, crearemos el fichero Dockerfile, con el comando:

Con el siguiente contenido (cambiando lógicamente los direccionamientos por los de cada caso):

Fichero configurar_red.sh

El fichero configurar_red.sh no suele ser necesario, lo incluimos como ejemplo para una posible configuración de red en el equipo Linux Ubuntu:

Estableceremos este fichero como ejecutable, con el comando:

Los ficheros que debemos tener en la carpeta:

Desplegar contenedor Docker y levantar túnel software IPsec

Desde la carpeta con todos los ficheros, ejecutaremos el siguiente comando para componer el contenedor Docker:

Si no hay errores, ejecutaremos el siguiente comando para iniciar el contenedor y levantar el túnel IPsec:

Para comprobar que el túnel se ha levantado podemos ejecutar el comando:

Si el túnel se ha establecido, nos mostrara «ESTABLISHED» y «INSTALLED»:

Desde el cortafuegos de la sede de trabajo también podemos consultar el estado del túnel (en «VPN» – «IPsec Tunnels»):

Comprobaremos conectividad desde equipo de casa a trabajo haciendo un ping desde el equipo Linux Ubuntu a algún equipo de la red del trabajo:

Y al revés, desde algún equipo de la red de trabajo al equipo Linux Ubuntu de la sede de casa:

De esta forma, mientras el túnel esté levantado, tendremos los equipos de la sede remota de casa como si estuvieran en la misma red de los equipos de trabajo.

Detener el contenedor y limpiar restos, desconectar el túnel IPsec

Si necesitamos «eliminar» el contenedor y detener el túnel, por ejemplo para cuando tengamos que hacer algún cambio en la configuración del túnel, podemos usar los comandos:

Cuando hayamos cambiado la configuración en los ficheros anteriores, podremos recomponer el túnel lanzando:

Se puede detener el túnel sin necesidad de detener el contenedor, ejecutando:

O detener una conexión concreta, ejecutando:

Si quisiéramos iniciarlo, podemos ejecutar:

O bien, una conexión específica:

También se puede reiniciar el túnel completo (detener e iniciar), con:

Incluso podemos detener el contenedor, manteniéndolo, con:

Del lado de la sede de trabajo, por supuesto, también se puede detener el túnel, desde el cortafuegos, seleccionando el túnel levantado y pulsando en «Bring Down» – «Entire Tunnel»: