Cómo configurar una VPN IPSec IKEv2 con strongSwan y Let’s Encrypt en Rocky Linux 9

Si buscas una solución VPN cliente-sitio, quizá prefieras una solución IKEv2 EAP a OpenVPN o Wireguard. Una solución de este tipo es muy útil si estás en constante movimiento y necesitas una solución VPN a la que puedas conectarte fácilmente sin descargar un cliente ni necesitar una clave. strongSwan es una VPN multiplataforma de código abierto basada en IPSec que puede resultar útil en ese caso. Puede proporcionar autenticación basada en certificados X.509 o en la autenticación de usuario segura IKEv2 EAP.

En este tutorial, aprenderás a configurar una VPN IPSec IKEv2 con strongSwan utilizando la autenticación EAP-MSCHAPv2 junto con certificados SSL Let’s Encrypt en un servidor Rocky Linux 9. También aprenderás a conectarte a la VPN utilizando clientes Windows, macOS, Linux y Android.

Requisitos previos

  • Un servidor que ejecute Rocky Linux 9. Dependiendo del número de usuarios que se conecten a él, deberás actualizar las especificaciones del servidor.
  • Un usuario no root con privilegios sudo.
  • Un nombre de dominio completo (FQDN) como vpn.example.com.
  • Asegúrate de que todo está actualizado.
    $ sudo dnf update
    
  • Pocos paquetes que necesite tu sistema.
    $ sudo dnf install wget curl nano unzip yum-utils -y
    

    Puede que algunos de estos paquetes ya estén instalados en tu sistema.

Paso 1 – Configurar la red y el cortafuegos

Activa el reenvío de paquetes IP en las opciones del núcleo.

$ echo "net.ipv4.ip_forward=1" | sudo tee /etc/sysctl.conf
$ sudo sysctl -p 

Añade el servicio IPSec al cortafuegos Firewalld.

$ sudo firewall-cmd --permanent --add-service=ipsec

También necesitamos puertos HTTP y HTTPS para funcionar. Ábrelos.

$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --permanent --add-service=https

Permite el reenvío de paquetes NAT, también conocido como enmascaramiento IP.

$ sudo firewall-cmd --permanent --add-masquerade

Recarga el cortafuegos para aplicar los cambios.

$ sudo firewall-cmd --reload

Paso 2 – Instalar SSL

Necesitamos instalar Certbot para generar el certificado SSL.

Para ello utilizaremos el instalador de paquetes Snapd. Como Rocky Linux no lo incluye, instala el instalador de Snapd. Requiere el repositorio EPEL para funcionar.

$ sudo dnf install -y epel-release

Instala Snapd.

$ sudo dnf install -y snapd

Activa e inicia el servicio Snap.

$ sudo systemctl enable snapd --now

Instala el paquete principal de Snap, y asegúrate de que tu versión de Snapd está actualizada.

$ sudo snap install core && sudo snap refresh core

Crea los enlaces necesarios para que Snapd funcione.

$ sudo ln -s /var/lib/snapd/snap /snap
$ echo 'export PATH=$PATH:/var/lib/snapd/snap/bin' | sudo tee -a /etc/profile.d/snapd.sh

Ejecuta el siguiente comando para instalar Certbot.

$ sudo snap install --classic certbot

Utiliza el siguiente comando para asegurarte de que se puede ejecutar el comando Certbot creando un enlace simbólico al directorio /usr/bin.

$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

Verifica la instalación.

$ certbot --version
certbot 2.3.0

Ejecuta el siguiente comando para generar un certificado SSL.

$ sudo certbot --key-type rsa certonly --standalone --agree-tos --no-eff-email --preferred-challenges http -m [email protected] -d vpn.example.com

El comando anterior descargará un certificado en el directorio /etc/letsencrypt/live/vpn.example.com de tu servidor.

Para comprobar si la renovación SSL funciona correctamente, realiza una ejecución en seco del proceso.

$ sudo certbot renew --dry-run

Si no ves ningún error, ya está todo listo. Tu certificado se renovará automáticamente.

Paso 3 – Instalar strongSwan

strongSwan requiere el repositorio EPEL para su instalación, pero como ya lo hemos instalado en el paso anterior, puedes omitirlo. Instala strongSwan utilizando el siguiente comando.

$ sudo dnf install strongswan

Crea un enlace simbólico para los certificados en el directorio /etc/strongswan/swanctl.

$ sudo ln -s /etc/letsencrypt/live/vpn.example.com/fullchain.pem /etc/strongswan/swanctl/x509
$ sudo ln -s /etc/letsencrypt/live/vpn.example.com/privkey.pem /etc/strongswan/swanctl/private
$ sudo ln -s /etc/letsencrypt/live/vpn.example.com/chain.pem /etc/strongswan/swanctl/x509ca

Crea un archivo de configuración de strongSwan y ábrelo para editarlo.

$ sudo nano /etc/strongswan/swanctl/conf.d/my_vpn.conf

Pega en él el siguiente código.

connections {
    ikev2-eap-mschapv2 {
        version = 2
        proposals = aes256-sha256-modp4096,aes256-sha256-modp2048,aes256gcm16-sha256-modp1024
        rekey_time = 0s
        pools = pool-ipv4
        fragmentation = yes
        dpd_delay = 30s
        send_cert=always
        unique = never
        local {
            id = vpn.example.com
            certs = fullchain.pem
        }
        remote {
            auth = eap-mschapv2
            eap_id = %any
        }
        children {
            ikev2-eap-mschapv2 {
                local_ts = 0.0.0.0/0
                rekey_time = 0s
                dpd_action = clear
                esp_proposals = aes256-sha256-sha1
            }
        }
    }
}

pools {
    pool-ipv4 {
        addrs = 10.1.1.0/24
        dns = 1.1.1.1, 8.8.8.8
    }
}

secrets {
    eap-User1 {
        id = username1
        secret = "password1"
    }
}

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te solicite una vez hayas terminado.

Si deseas tunelizar tanto IPv4 como IPv6 a través de la VPN, debes asignar un pool IPv6, un DNS y una subred local. Sustituye los valores de las variables local_ts, addrs, y dns por los siguientes valores.

local_ts = 0.0.0.0/0,::/0
....
addrs = 10.1.1.0/24,2a00:1450:400c:c05::/112
dns = 8.8.8.8,2001:4860:4860::8888

Desactiva el plugin OpenSSL porque OpenSSL en Rocky Linux 9 no permite firmas RSA con SHA-1, lo que provoca fallos de autenticación.

$ sudo sed -i "s/load = yes/load = no/" /etc/strongswan/strongswan.d/charon/openssl.conf

Activa e inicia el servicio strongSwan.

$ sudo systemctl enable strongswan
$ sudo systemctl start strongswan

Paso 4 – Conexión a través de Windows

Abre la aplicación Configuración y selecciona la opción de menú Red e Internet. Selecciona el menú VPN y luego haz clic en el botón Añadir una conexión VPN.

Configuración VPN Windows para strongSwan

Haz clic en el botón Guardar y, a continuación, selecciona la VPN que has añadido y haz clic en el botón Conectar para iniciar la VPN.

Lista de conexiones VPN de Windows

Paso 5 – Conexión a través de macOS

Abre Preferencias del Sistema >> Red y haz clic en el signo más (+) de la parte superior derecha para añadir un nuevo servicio.

macOS Añadir nuevo servicio de red

Selecciona VPN como Interfaz, IKEv2 como Tipo de VPN y dale un nombre a tu servicio. Pulsa el botón Crear para continuar.

Configuración de macOS strongSwan

Introduce tu nombre de dominio como Dirección del Servidor e ID Remoto. Deja vacío el campo ID Local. Haz clic en el botón Configuración de autenticación para abrir una nueva ventana emergente.

Configuración de la autenticación strongSwan de macOS

Selecciona Nombre de usuario como Configuración de autenticación e introduce las credenciales creadas anteriormente. Pulsa el botón Aceptar para guardar la configuración. Pulsa el botón Aplicar en la parte inferior para guardar la configuración. Y luego haz clic en el botón Conectar para conectarte a la VPN.

Icono VPN macOS

Una vez que la hayas añadido, macOS creará un acceso directo para la VPN en la barra de menús. Puedes conectarte a la VPN directamente desde ahí.

Paso 6 – Conexión a través de Android

Abre el menú Ajustes de Android >> Red e Internet >> VP N. Pulsa el signo más (+) en la parte superior derecha de la pantalla para añadir el perfil VPN.

Configuración strongSwan Android

Dale un nombre a la conexión. Selecciona IKEv2/IPSec MSCHAPv2 como tipo de VPN. Introduce tu dominio como dirección del servidor. Indica cualquier cadena aleatoria como Identificador IPSec. Introduce el nombre de usuario y la contraseña que diste antes. Pulsa el botón Guardar para terminar.

Selecciona el Nombre de la conexión y haz clic en Conectar para empezar a utilizar la VPN.

Paso 7 – Conexión a través de iOS

Abre los ajustes de iOS y haz clic en el menú General. Haz clic en el menú VPN y obtendrás un menú similar al que se muestra a continuación. Selecciona IKEv2 como Tipo de VPN.

strongSwan iOS VPN Settings

Dale una descripción a tu VPN. Introduce tu dominio como valor para los campos Servidor e ID remoto. Deja en blanco el campo ID Local. Selecciona Autenticación de usuario como Nombre de usuario e introduce tus credenciales. Selecciona Hecho cuando hayas terminado y pulsa sobre el interruptor para conectarte a la VPN.

Conclusión

Con esto concluye nuestro tutorial sobre la configuración de una VPN IKEv2 utilizando strongSwan y Let’s Encrypt SSL en un servidor Rocky Linux 9. También te has conectado a la VPN utilizando varios clientes. Si tienes alguna pregunta, publícala en los comentarios a continuación.

También te podría gustar...