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.
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.
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.
Selecciona VPN como Interfaz, IKEv2 como Tipo de VPN y dale un nombre a tu servicio. Pulsa el botón Crear para continuar.
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.
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.
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.
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.
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.