Cómo configurar una VPN basada en IPsec con Strongswan en CentOS / RHEL 8


strongSwan es una solución VPN de código abierto, multiplataforma, moderna y completa basada en IPsec para Linux que brinda soporte completo para el intercambio de claves de Internet (tanto IKEv1 como IKEv2) para establecer asociaciones de seguridad (SA) entre dos pares. Tiene todas las funciones, es modular por diseño y ofrece docenas de complementos que mejoran la funcionalidad principal.

Artículo relacionado: Cómo configurar una VPN basada en IPsec con Strongswan en Debian y Ubuntu

En este artículo, aprenderá a configurar puertas de enlace VPN IPsec de sitio a sitio utilizando strongSwan en servidores CentOS/RHEL 8. Esto permite a los pares autenticarse entre sí mediante una clave precompartida sólida (PSK). Una configuración de sitio a sitio significa que cada puerta de enlace de seguridad tiene una subred detrás.

No olvide utilizar sus direcciones IP del mundo real durante las configuraciones mientras sigue la guía.

Public IP: 192.168.56.7
Private IP: 10.10.1.1/24
Private Subnet: 10.10.1.0/24
Public IP:  192.168.56.6
Private IP: 10.20.1.1/24
Private Subnet: 10.20.1.0/24

Paso 1: Habilitar el reenvío de IP del kernel en CentOS 8

1. Comience habilitando la funcionalidad de reenvío de IP del kernel en el archivo de configuración /etc/sysctl.conf en ambas puertas de enlace VPN.

# vi /etc/sysctl.conf

Agregue estas líneas en el archivo.

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. Después de guardar los cambios en el archivo, ejecute el siguiente comando para cargar los nuevos parámetros del kernel en tiempo de ejecución.

# sysctl -p

3. A continuación, cree una ruta estática permanente en el archivo/etc/sysconfig/network-scripts/route-eth0 en ambas puertas de enlace de seguridad.

# vi /etc/sysconfig/network-scripts/route-eth0

Agregue la siguiente línea en el archivo.

#Site 1 Gateway
10.20.1.0/24  via 192.168.56.7

#Site 2 Gateway
10.10.1.0/24 via 192.168.56.6

4. Luego reinicie el administrador de red para aplicar los nuevos cambios.

# systemctl restart NetworkManager

Paso 2: Instalar strongSwan en CentOS 8

5. El paquete strongswan se proporciona en el repositorio de EPEL. Para instalarlo, debe habilitar el repositorio EPEL y luego instalar Strongwan en ambas puertas de enlace de seguridad.

# dnf install epel-release
# dnf install strongswan

6. Para verificar la versión de strongswan instalada en ambas puertas de enlace, ejecute el siguiente comando.

# strongswan version

7. A continuación, inicie el servicio strongswan y habilítelo para que se inicie automáticamente al arrancar el sistema. Luego verifique el estado en ambas puertas de enlace de seguridad.

# systemctl start strongswan 
# systemctl enable strongswan
# systemctl status strongswan

Nota: La última versión de strongswan en CentOS/REHL 8 viene con soporte para swanctl (una nueva utilidad de línea de comandos portátil introducida con strongSwan 5.2.0, utilizada para configurar, controlar y monitorear el demonio IKE Charon usando el complemento vici) y la utilidad de inicio (o ipsec) utilizando el complemento de carrera obsoleto.

8. El directorio de configuración principal es/etc/strongswan/que contiene archivos de configuración para ambos complementos:

# ls /etc/strongswan/

Para esta guía, usaremos la utilidad IPsec que se invoca mediante el comando strongswan y la interfaz de trazo. Entonces usaremos los siguientes archivos de configuración:

  • /etc/strongswan/ipsec.conf – configuration file for the strongSwan IPsec subsystem.
  • /etc/strongswan/ipsec.secrets – secrets file.

Paso 3: configurar pasarelas de seguridad

9. En este paso, debe configurar los perfiles de conexión en cada puerta de enlace de seguridad para cada sitio utilizando el archivo de configuración /etc/strongswan/ipsec.conf strongswan.

# cp /etc/strongswan/ipsec.conf /etc/strongswan/ipsec.conf.orig
# vi /etc/strongswan/ipsec.conf

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

config setup
        charondebug="all"
        uniqueids=yes
conn ateway1-to-gateway2
        type=tunnel
        auto=start
        keyexchange=ikev2
        authby=secret
        left=192.168.56.7
        leftsubnet=10.10.1.1/24
        right=192.168.56.6
        rightsubnet=10.20.1.1/24
        ike=aes256-sha1-modp1024!
        esp=aes256-sha1!
        aggressive=no
        keyingtries=%forever
        ikelifetime=28800s
        lifetime=3600s
        dpddelay=30s
        dpdtimeout=120s
        dpdaction=restart
# cp /etc/strongswan/ipsec.conf /etc/strongswan/ipsec.conf.orig
# vi /etc/strongswan/ipsec.conf

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

config setup
        charondebug="all"
        uniqueids=yes
conn 2gateway-to-gateway1
        type=tunnel
        auto=start
        keyexchange=ikev2
        authby=secret
        left=192.168.56.6
        leftsubnet=10.20.1.1/24
        right=192.168.56.7
        rightsubnet=10.10.1.1/24
        ike=aes256-sha1-modp1024!
        esp=aes256-sha1!
        aggressive=no
        keyingtries=%forever
        ikelifetime=28800s
        lifetime=3600s
        dpddelay=30s
        dpdtimeout=120s
        dpdaction=restart

Describamos brevemente cada uno de los parámetros de configuración anteriores:

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

Puede encontrar una descripción de todos los parámetros de configuración para el subsistema strongSwan IPsec leyendo la página de manual de ipsec.conf.

# man ipsec.conf

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

10. A continuación, debe generar un PSK sólido para que lo utilicen los pares para la autenticación de la siguiente manera.

# head -c 24 /dev/urandom | base64

11. Agregue el PSK en el archivo /etc/strongswan/ipsec.conf en ambas puertas de enlace de seguridad.

# vi /etc/strongswan/ipsec.secrets

Ingrese la siguiente línea en el archivo.

#Site 1 Gateway
192.168.56.7  192.168.56.6 : PSK "0GE0dIEA0IOSYS2o22wYdicj/lN4WoCL"

#Site 1 Gateway
192.168.56.6  192.168.56.7 : PSK "0GE0dIEA0IOSYS2o22wYdicj/lN4WoCL"

12. Luego, inicie el servicio strongsan y verifique el estado de las conexiones.

# systemctl restart strongswan
# strongswan status

13. Pruebe si puede acceder a las subredes privadas desde cualquiera de las puertas de enlace de seguridad ejecutando un comando ping.

# ping 10.20.1.1
# ping 10.10.1.1

14. Por último, pero no menos importante, para obtener más información sobre los comandos de strongswan para activar/desactivar manualmente las conexiones y más, consulte la página de ayuda de strongswan.

# strongswan --help

¡Eso es todo por ahora! Para compartir sus pensamientos con nosotros o hacer preguntas, comuníquese con nosotros a través del formulario de comentarios a continuación. Y para obtener más información sobre la nueva utilidad swanctl y la nueva estructura de configuración más flexible, consulte la documentación del usuario de strongSwan.