Cómo configurar una VPN basada en IPsec con Strongswan en Debian y Ubuntu


strongSwan es una implementación de VPN (red privada virtual) de código abierto, multiplataforma, con todas las funciones y ampliamente utilizada que se ejecuta en Linux, FreeBSD, OS X, Windows, Android e iOS. Es principalmente un demonio de claves que admite los protocolos de intercambio de claves de Internet (IKEv1 e IKEv2) para establecer asociaciones de seguridad (SA) entre dos pares.

Este artículo describe cómo configurar puertas de enlace VPN IPSec de sitio a sitio utilizando strongSwan en servidores Ubuntu y Debian. Por sitio a sitio nos referimos a que cada puerta de enlace de seguridad tiene una subred detrás. Además, los pares se autenticarán entre sí mediante una clave precompartida (PSK).

Recuerde reemplazar las siguientes IP con sus IP del mundo real para configurar su entorno.

Puerta de enlace del sitio 1 (tecmint-devgateway)

OS 1: Debian or Ubuntu
Public IP: 10.20.20.1
Private IP: 192.168.0.101/24
Private Subnet: 192.168.0.0/24

Puerta de enlace del sitio 2 (tecmint-prodgateway)

OS 2: Debian or Ubuntu
Public IP:  10.20.20.3
Private IP: 10.0.2.15/24
Private Subnet: 10.0.2.0/24

Paso 1: Habilitación del reenvío de paquetes del kernel

1. Primero, necesita configurar el kernel para habilitar el reenvío de paquetes agregando las variables de sistema apropiadas en el archivo de configuración /etc/sysctl.conf en ambas puertas de enlace de seguridad.

$ sudo vim /etc/sysctl.conf

Busque las siguientes líneas, descomente y establezca sus valores como se muestra (lea los comentarios en el archivo para obtener más información).

net.ipv4.ip_forward = 1 
net.ipv6.conf.all.forwarding = 1 
net.ipv4.conf.all.accept_redirects = 0 
net.ipv4.conf.all.send_redirects = 0 

2. A continuación, cargue la nueva configuración ejecutando el siguiente comando.

$ sudo sysctl -p

3. Si tiene un servicio de firewall UFW habilitado, debe agregar las siguientes reglas al archivo de configuración /etc/ufw/before.rules justo antes de las reglas de filtro en cualquiera de las puertas de enlace de seguridad.

Puerta de enlace del sitio 1 (tecmint-devgateway)

*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 10.0.2.0/24  -d 192.168.0.0/24 -j MASQUERADE
COMMIT

Puerta de enlace del sitio 2 (tecmint-prodgateway)

*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING  -s 192.168.0.0/24 -d 10.0.2.0/24 -j MASQUERADE
COMMIT

4. Una vez que se hayan agregado las reglas de firewall, aplique los nuevos cambios reiniciando UFW como se muestra.

$ sudo ufw disable 
$ sudo ufw enable

Paso 2: Instalar strongSwan en Debian y Ubuntu

5. Actualice su caché de paquetes en ambas puertas de enlace de seguridad e instale el paquete strongswan usando el administrador de paquetes APT.

$ sudo apt update
$ sudo apt install strongswan 

6. Una vez que se complete la instalación, la secuencia de comandos del instalador iniciará el servicio strongswan y lo habilitará para que se inicie automáticamente al arrancar el sistema. Puede verificar su estado y si está habilitado usando el siguiente comando.

$ sudo systemctl status strongswan.service
$ sudo systemctl is-enabled strongswan.service

Paso 3: configurar pasarelas de seguridad

7. A continuación, debe configurar las puertas de enlace de seguridad mediante el archivo de configuración /etc/ipsec.conf.

Puerta de enlace del sitio 1 (tecmint-devgateway)

$ sudo cp /etc/ipsec.conf /etc/ipsec.conf.orig
$ sudo nano /etc/ipsec.conf 

Copie y pegue la siguiente configuración en el archivo.

config setup
        charondebug="all"
        uniqueids=yes
conn devgateway-to-prodgateway
        type=tunnel
        auto=start
        keyexchange=ikev2
        authby=secret
        left=10.20.20.1
        leftsubnet=192.168.0.101/24
        right=10.20.20.3
        rightsubnet=10.0.2.15/24
        ike=aes256-sha1-modp1024!
        esp=aes256-sha1!
        aggressive=no
        keyingtries=%forever
        ikelifetime=28800s
        lifetime=3600s
        dpddelay=30s
        dpdtimeout=120s
        dpdaction=restart

Puerta de enlace del sitio 2 (tecmint-prodgateway)

$ sudo cp /etc/ipsec.conf /etc/ipsec.conf.orig
$ sudo cp /etc/ipsec.conf 

Copie y pegue la siguiente configuración en el archivo.

config setup
        charondebug="all"
        uniqueids=yes
conn prodgateway-to-devgateway
        type=tunnel
        auto=start
        keyexchange=ikev2
        authby=secret
        left=10.20.20.3
        leftsubnet=10.0.2.15/24
        right=10.20.20.1
        rightsubnet=192.168.0.101/24 
        ike=aes256-sha1-modp1024!
        esp=aes256-sha1!
        aggressive=no
        keyingtries=%forever
        ikelifetime=28800s
        lifetime=3600s
        dpddelay=30s
        dpdtimeout=120s
        dpdaction=restart

Aquí está el significado de cada parámetro de configuración:

  • configuración de configuración: especifica información de configuración general para IPSec que se aplica a todas las conexiones.
  • charondebug: define la cantidad de salida de depuración de Charon que se debe registrar.
  • uniqueids: especifica si una identificación de participante en particular debe mantenerse única.
  • conn prodgateway-to-devgateway: define el nombre de la conexión.
  • tipo: define el tipo de conexión.
  • automático: cómo manejar la conexión cuando se inicia o reinicia IPSec.
  • keyexchange: define la versión del protocolo IKE que se utilizará.
  • authby: define cómo los pares deben autenticarse entre sí.
  • izquierda: define la dirección IP de la interfaz de red pública del participante izquierdo.
  • leftsubnet: indica la subred privada detrás del participante izquierdo.
  • derecha: especifica la dirección IP de la interfaz de red pública del participante correcto.
  • rightsubnet: indica la subred privada detrás del participante izquierdo.
  • ike: define una lista de algoritmos de autenticación/cifrado IKE/ISAKMP SA que se utilizarán. Puede agregar una lista separada por comas.
  • esp: define una lista de algoritmos de autenticación/cifrado ESP que se utilizarán para la conexión. Puede agregar una lista separada por comas.
  • agresivo: indica si se debe utilizar el modo principal o agresivo.
  • keyingtries: indica el número de intentos que se deben realizar para negociar una conexión.
  • ikelifetime: indica cuánto tiempo debe durar el canal de claves de una conexión antes de ser renegociado.
  • vida útil: define cuánto tiempo debe durar una instancia particular de una conexión, desde la negociación exitosa hasta el vencimiento.
  • dpddelay: especifica el intervalo de tiempo con el que los mensajes R_U_THERE/intercambios INFORMACIONALES se envían al par.
  • dpdtimeout: especifica el intervalo de tiempo de espera, después del cual se eliminan todas las conexiones a un par en caso de inactividad.
  • dpdaction: define cómo utilizar el protocolo Dead Peer Detection (DPD) para administrar la conexión.

Para obtener más información sobre los parámetros de configuración anteriores, lea la página de manual de ipsec.conf ejecutando el comando.

$ man ipsec.conf

Paso 4: configuración de PSK para la autenticación de igual a igual

8. Después de configurar ambas puertas de enlace de seguridad, genere un PSK seguro para que lo utilicen los pares mediante el siguiente comando.

$ head -c 24 /dev/urandom | base64

9. A continuación, agregue el PSK en el archivo /etc/ipsec.secrets en ambas puertas de enlace.

$ sudo vim /etc/ipsec.secrets

Copia y pega la siguiente línea.

------- Site 1 Gateway (tecmint-devgateway) ------- 

10.20.20.1 10.20.20.3 : PSK "qLGLTVQOfqvGLsWP75FEtLGtwN3Hu0ku6C5HItKo6ac="

------- Site 2 Gateway (tecmint-prodgateway) -------

10.20.20.3  10.20.20.1 : PSK "qLGLTVQOfqvGLsWP75FEtLGtwN3Hu0ku6C5HItKo6ac="

10. Reinicie el programa IPSec y verifique su estado para ver las conexiones.

$ sudo ipsec restart
$ sudo ipsec status

11. Finalmente, verifique que puede acceder a las subredes privadas desde cualquiera de las puertas de enlace de seguridad ejecutando un comando ping.

$ ping 192.168.0.101
$ ping 10.0.2.15

12. Además, puede detener e iniciar IPSec como se muestra.

$ sudo ipsec stop
$ sudo ipsec start

13. Para obtener más información sobre los comandos IPSec para abrir conexiones manualmente y más, consulte la página de ayuda de IPSec.

$ ipsec --help

¡Eso es todo! En este artículo, hemos descrito cómo configurar una VPN IPSec de sitio a sitio usando strongSwan en servidores Ubuntu y Debian, donde ambas puertas de enlace de seguridad se configuraron para autenticarse entre sí usando un PSK. Si tiene alguna pregunta o pensamiento que compartir, comuníquese con nosotros a través del formulario de comentarios a continuación.