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


strongSwan es una implementación de VPN (red privada virtual) basada en IPsec, 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 gateway 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: habilitar el 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 permitirá 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:

  • config setup – specifies general configuration information for IPSec which applies to all connections.
  • charondebug – defines how much Charon debugging output should be logged.
  • uniqueids – specifies whether a particular participant ID should be kept unique.
  • conn prodgateway-to-devgateway – defines connection name.
  • type – defines connection type.
  • auto – how to handle connection when IPSec is started or restarted.
  • keyexchange – defines the version of the IKE protocol to use.
  • authby – defines how peers should authenticate each other.
  • left – defines the IP address of the left participant’s public-network interface.
  • leftsubnet – states the private subnet behind the left participant.
  • right – specifies the IP address of the right participant’s public-network interface.
  • rightsubnet – states the private subnet behind the left participant.
  • ike – defines a list of IKE/ISAKMP SA encryption/authentication algorithms to be used. You can add a comma-separated list.
  • esp – defines a list of ESP encryption/authentication algorithms to be used for the connection. You can add a comma-separated list.
  • aggressive – states whether to use Aggressive or Main Mode.
  • keyingtries – states the number of attempts that should be made to negotiate a connection.
  • ikelifetime – states how long the keying channel of a connection should last before being renegotiated.
  • lifetime – defines how long a particular instance of a connection should last, from successful negotiation to expiry.
  • dpddelay – specifies the time interval with which R_U_THERE messages/INFORMATIONAL exchanges are sent to the peer.
  • dpdtimeout – specifies the timeout interval, after which all connections to a peer are deleted in case of inactivity.
  • dpdaction – defines how to use the Dead Peer Detection(DPD) protocol to manage the connection.

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

Copie y pegue 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 idea para compartir, comuníquese con nosotros a través del formulario de comentarios a continuación.