Cómo configurar un servidor VPN IKEv2 con StrongSwan en Ubuntu 22.04

Introducción

A virtual private network, or VPN, allows you to securely encrypt traffic as it travels through untrusted networks, such as those at the coffee shop, a conference, or an airport.

Internet Key Exchange v2, o IKEv2, es un protocolo que permite la tunelización directa de IPSec entre el servidor y el cliente. En las implementaciones de VPN IKEv2, IPSec proporciona cifrado para el tráfico de red. IKEv2 es compatible de forma nativa en algunas plataformas (OS X 10.11+, iOS 9.1+ y Windows 10) sin necesidad de aplicaciones adicionales, y maneja los contratiempos del cliente de manera bastante fluida.

En este tutorial, configurarás un servidor VPN IKEv2 utilizando StrongSwan en un servidor Ubuntu 22.04. Luego aprenderás cómo conectarte a él con clientes de Windows, macOS, Ubuntu, iOS y Android.

Requisitos previos

Para completar este tutorial, necesitarás:

Paso 1 — Instalación de StrongSwan

Primero, instalarás StrongSwan, un demonio IPSec de código abierto que configurarás como tu servidor VPN. También instalarás el componente de infraestructura de clave pública (PKI) para que puedas crear una Autoridad de Certificación (CA) que proporcione credenciales para tu infraestructura.

Comienza actualizando la caché local de paquetes:

  1. sudo apt update

Luego instala el software escribiendo:

  1. sudo apt install strongswan strongswan-pki libcharon-extra-plugins libcharon-extauth-plugins libstrongswan-extra-plugins

El paquete adicional libcharon-extauth-plugins se utiliza para garantizar que varios clientes puedan autenticarse en tu servidor utilizando un nombre de usuario y una frase de contraseña compartidos. El paquete libstrongswan-extra-plugins está incluido para que Strongswan admita suites de cifrado de curva elíptica que utilicen la suite de criptografía Curve25519.

Ahora que todo está instalado, continúa con la creación de tus certificados.

Paso 2 — Creación de una Autoridad de Certificación

Un servidor IKEv2 requiere un certificado para identificarse ante los clientes. Para ayudar a crear el certificado requerido, el paquete strongswan-pki viene con una utilidad llamada pki para generar una Autoridad de Certificación y certificados de servidor.

Para empezar, crea algunos directorios para almacenar todos los activos en los que trabajarás. La estructura de directorios coincide con algunos de los directorios en /etc/ipsec.d, donde eventualmente moverás todos los elementos que crees.

  1. mkdir -p ~/pki/{cacerts,certs,private}

Luego, asegura los permisos para que nuestros archivos privados no puedan ser vistos por otros usuarios.

  1. chmod 700 ~/pki

Ahora que tienes una estructura de directorios para almacenar todo, puedes generar una clave raíz. Esta será una clave RSA de 4096 bits que se utilizará para firmar tu certificado de Autoridad de Certificación raíz.

Ejecuta estos comandos para generar la clave:

  1. pki --gen --type rsa --size 4096 --outform pem > ~/pki/private/ca-key.pem

Después de eso, puedes pasar a crear tu Autoridad de Certificación raíz, utilizando la clave que acabas de generar para firmar el certificado raíz.

  1. pki --self --ca --lifetime 3650 --in ~/pki/private/ca-key.pem \
  2. --type rsa --dn "CN=VPN root CA" --outform pem > ~/pki/cacerts/ca-cert.pem

La bandera --lifetime 3650 se utiliza para asegurar que el certificado raíz de la autoridad de certificación será válido por 10 años. El certificado raíz de una autoridad generalmente no cambia, ya que tendría que redistribuirse a cada servidor y cliente que depende de él, por lo que 10 años es un valor de vencimiento predeterminado seguro.

Puedes cambiar el valor del nombre distinguido (DN) a algo diferente si lo deseas. El nombre común (campo CN) aquí es solo un indicador, por lo que no tiene que coincidir con nada en tu infraestructura.

Ahora que tienes tu Autoridad de Certificación raíz en funcionamiento, puedes crear un certificado que utilizará el servidor VPN.

Paso 3 — Generar un Certificado para el Servidor VPN

Ahora creará un certificado y una clave para el servidor VPN. Este certificado permitirá al cliente verificar la autenticidad del servidor utilizando el certificado de CA que acabamos de generar.

Primero, cree una clave privada para el servidor VPN con el siguiente comando:

  1. pki --gen --type rsa --size 4096 --outform pem > ~/pki/private/server-key.pem

A continuación, cree y firme el certificado del servidor VPN con la clave de la autoridad de certificación que creó en el paso anterior. Ejecute el siguiente comando, pero cambie el Nombre Común (CN) y el campo de Nombre Alternativo del Sujeto (SAN) por el nombre DNS o la dirección IP de su servidor VPN:

  1. pki --pub --in ~/pki/private/server-key.pem --type rsa \
  2. | pki --issue --lifetime 1825 \
  3. --cacert ~/pki/cacerts/ca-cert.pem \
  4. --cakey ~/pki/private/ca-key.pem \
  5. --dn "CN=server_domain_or_IP" --san server_domain_or_IP \
  6. --flag serverAuth --flag ikeIntermediate --outform pem \
  7. > ~/pki/certs/server-cert.pem

Nota: Si está utilizando una dirección IP en lugar de un nombre DNS, deberá especificar múltiples entradas --san. La línea en el bloque de comando anterior donde especifica el nombre distinguido (--dn ...) deberá modificarse con la entrada adicional como la siguiente línea extraída:

--dn "CN=Dirección IP" --san @Dirección_IP --san Dirección_IP \

La razón de esta entrada adicional --san @Dirección_IP es que algunos clientes verificarán si el certificado TLS tiene tanto una entrada DNS como una entrada de dirección IP para un servidor cuando verifican su identidad.

La opción --flag serverAuth se utiliza para indicar que el certificado se utilizará explícitamente para la autenticación del servidor, antes de que se establezca el túnel cifrado. La opción --flag ikeIntermediate se utiliza para admitir clientes macOS más antiguos.

Ahora que ha generado todos los archivos TLS/SSL que StrongSwan necesita, puede mover los archivos al lugar correspondiente en el directorio /etc/ipsec.d escribiendo:

  1. sudo cp -r ~/pki/* /etc/ipsec.d/

En este paso, ha creado un par de certificados que se utilizarán para asegurar las comunicaciones entre el cliente y el servidor. También ha firmado los certificados con la clave CA, por lo que el cliente podrá verificar la autenticidad del servidor VPN utilizando el certificado CA. Con todos estos certificados listos, está listo para pasar a la configuración de StrongSwan.

Paso 4 — Configurando StrongSwan

StrongSwan tiene un archivo de configuración predeterminado con algunos ejemplos, pero tendremos que hacer la mayor parte de la configuración nosotros mismos. Hagamos una copia de seguridad del archivo para tenerlo como referencia antes de empezar desde cero:

  1. sudo mv /etc/ipsec.conf{,.original}

Cree y abra un nuevo archivo de configuración en blanco utilizando su editor de texto preferido. Aquí, usará nano:

  1. sudo nano /etc/ipsec.conf

Nota: Mientras trabajas en esta sección para configurar la parte del servidor de tu VPN, te encontrarás con ajustes que se refieren a los lados izquierdo y derecho de una conexión. Cuando trabajes con VPN IPSec, por convención, el lado izquierdo se refiere al sistema local que estás configurando, en este caso, el servidor. Las directivas del lado derecho en estos ajustes se referirán a clientes remotos, como teléfonos y otros ordenadores.

Cuando pases a configurar clientes más adelante en este tutorial, los archivos de configuración del cliente se referirán a sí mismos utilizando diversas directivas de izquierda, y el servidor será referido utilizando la terminología del lado derecho.

Primero, diremos a StrongSwan que registre los estados del demonio para depuración y permita conexiones duplicadas. Agrega estas líneas al archivo:

/etc/ipsec.conf
config setup
    charondebug="ike 1, knl 1, cfg 0"
    uniqueids=no

Luego, crearemos una sección de configuración para nuestra VPN. También diremos a StrongSwan que cree túneles VPN IKEv2 y cargue automáticamente esta sección de configuración cuando se inicie. Agrega las siguientes líneas al archivo:

/etc/ipsec.conf
. . .
conn ikev2-vpn
    auto=add
    compress=no
    type=tunnel
    keyexchange=ikev2
    fragmentation=yes
    forceencaps=yes

También configuraremos la detección de pares inactivos para eliminar cualquier conexión “colgante” en caso de que el cliente se desconecte inesperadamente. Agrega estas líneas:

/etc/ipsec.conf
. . .
conn ikev2-vpn
    . . .
    dpdaction=clear
    dpddelay=300s
    rekey=no

A continuación, configuraremos los parámetros IPSec del lado “izquierdo” del servidor. Cada uno de los siguientes parámetros asegura que el servidor esté configurado para aceptar conexiones de clientes e identificarse correctamente. Agregarás cada uno de estos ajustes al archivo /etc/ipsec.conf una vez que estés familiarizado con qué son y por qué se usan:

  • left=%any El valor %any asegura que el servidor utilizará la interfaz de red donde recibe conexiones entrantes para comunicarse posteriormente con los clientes. Por ejemplo, si se está conectando un cliente a través de una red privada, el servidor utilizará la dirección IP privada donde recibe tráfico para el resto de la conexión.
  • leftid=@server_domain_or_IP Esta opción controla el nombre que el servidor presenta a los clientes. Cuando se combina con la siguiente opción leftcert, la opción leftid asegura que el nombre configurado del servidor y el Nombre Distinguido (DN) que se encuentra en el certificado público coincidan.
  • leftcert=server-cert.pem Esta opción es la ruta al certificado público del servidor que configuró en el Paso 3. Sin él, el servidor no podrá autenticarse con los clientes ni finalizar la negociación de la configuración de IKEv2.
  • leftsendcert=always El valor always asegura que cualquier cliente que se conecte al servidor siempre recibirá una copia del certificado público del servidor como parte de la configuración inicial de la conexión.
  • leftsubnet=0.0.0.0/0 La última opción del lado “left” que agregará informa a los clientes sobre los subredes alcanzables detrás del servidor. En este caso, se utiliza 0.0.0.0/0 para representar el conjunto completo de direcciones IPv4, lo que significa que el servidor indicará a los clientes que envíen todo su tráfico a través de la VPN por defecto.

Ahora que está familiarizado con cada una de las opciones relevantes del lado “left”, agréguelas todas al archivo de esta manera:

/etc/ipsec.conf
. . .
conn ikev2-vpn
    . . .
    left=%any
    leftid=@server_domain_or_IP
    leftcert=server-cert.pem
    leftsendcert=always
    leftsubnet=0.0.0.0/0

Nota: Al configurar el ID del servidor (leftid), solo incluya el carácter @ si su servidor VPN será identificado por un nombre de dominio:

/etc/ipsec.conf
    . . .    leftid=@vpn.example.com
    . . .

Si el servidor será identificado por su dirección IP, simplemente coloque la dirección IP en:

/etc/ipsec.conf
    . . .
    leftid=your_server_ip
    . . .

A continuación, podemos configurar los parámetros IPSec del lado “derecho” del cliente. Cada uno de los siguientes parámetros indica al servidor cómo aceptar conexiones de clientes, cómo los clientes deben autenticarse en el servidor y los rangos de direcciones IP privadas y servidores DNS que utilizarán los clientes. Agregue cada una de estas configuraciones al archivo /etc/ipsec.conf una vez que esté familiarizado con lo que son y por qué se usan:

  • right=%any La opción %any para el lado right de la conexión instruye al servidor a aceptar conexiones entrantes de cualquier cliente remoto.
  • rightid=%any Esta opción asegura que el servidor no rechazará conexiones de clientes que proporcionen una identidad antes de que se establezca el túnel cifrado.
  • rightauth=eap-mschapv2 Esta opción configura el método de autenticación que los clientes utilizarán para autenticarse en el servidor. eap-mschapv2 se utiliza aquí para una amplia compatibilidad y para admitir clientes como Windows, macOS y dispositivos Android.
  • rightsourceip=10.10.10.0/24 Esta opción instruye al servidor a asignar direcciones IP privadas a los clientes desde el pool de IPs especificado de 10.10.10.0/24.
  • rightdns=8.8.8.8,8.8.4.4 Estas direcciones IP son los resolutores DNS públicos de Google. Se pueden cambiar para usar otros resolutores públicos, los resolutores del servidor VPN, o cualquier otro resolutor al que los clientes puedan acceder.
  • rightsendcert=never Esta opción instruye al servidor para que los clientes no necesiten enviar un certificado para autenticarse.

Ahora que estás familiarizado con las opciones necesarias del lado “right” para la VPN, agrega las siguientes líneas a /etc/ipsec.conf:

/etc/ipsec.conf
. . .
conn ikev2-vpn
    . . .
    right=%any
    rightid=%any
    rightauth=eap-mschapv2
    rightsourceip=10.10.10.0/24
    rightdns=8.8.8.8,8.8.4.4
    rightsendcert=never

Ahora le diremos a StrongSwan que solicite las credenciales de usuario al cliente cuando se conecte:

/etc/ipsec.conf
. . .
conn ikev2-vpn
    . . .
    eap_identity=%identity

Finalmente, agrega las siguientes líneas para admitir clientes de Linux, Windows, macOS, iOS y Android. Estas líneas especifican los diversos algoritmos de intercambio de claves, hashing, autenticación y cifrado (comúnmente conocidos como Conjuntos de cifrado) que StrongSwan permitirá que diferentes clientes utilicen:

/etc/ipsec.conf
. . .
conn ikev2-vpn
    . . .
    ike=chacha20poly1305-sha512-curve25519-prfsha512,aes256gcm16-sha384-prfsha384-ecp384,aes256-sha1-modp1024,aes128-sha1-modp1024,3des-sha1-modp1024!
    esp=chacha20poly1305-sha512,aes256gcm16-ecp384,aes256-sha256,aes256-sha1,3des-sha1!

Cada conjunto de cifrado admitido está delimitado de los demás por una coma. Por ejemplo, chacha20poly1305-sha512-curve25519-prfsha512 es un conjunto, y aes256gcm16-sha384-prfsha384-ecp384 es otro. Los conjuntos de cifrado que se enumeran aquí se seleccionan para garantizar la mayor compatibilidad posible entre clientes de Windows, macOS, iOS, Android y Linux.

El archivo de configuración completo debería lucir así:

/etc/ipsec.conf
config setup
    charondebug="ike 1, knl 1, cfg 0"
    uniqueids=no

conn ikev2-vpn
    auto=add
    compress=no
    type=tunnel
    keyexchange=ikev2
    fragmentation=yes
    forceencaps=yes
    dpdaction=clear
    dpddelay=300s
    rekey=no
    left=%any
    leftid=@server_domain_or_IP
    leftcert=server-cert.pem
    leftsendcert=always
    leftsubnet=0.0.0.0/0
    right=%any
    rightid=%any
    rightauth=eap-mschapv2
    rightsourceip=10.10.10.0/24
    rightdns=8.8.8.8,8.8.4.4
    rightsendcert=never
    eap_identity=%identity
    ike=chacha20poly1305-sha512-curve25519-prfsha512,aes256gcm16-sha384-prfsha384-ecp384,aes256-sha1-modp1024,aes128-sha1-modp1024,3des-sha1-modp1024!
    esp=chacha20poly1305-sha512,aes256gcm16-ecp384,aes256-sha256,aes256-sha1,3des-sha1!

Guarda y cierra el archivo una vez que hayas verificado que has agregado cada línea correctamente. Si usaste nano, hazlo presionando CTRL + X, luego Y, y finalmente ENTER.

Ahora que has configurado los parámetros de la VPN, puedes pasar a crear una cuenta para que los usuarios puedan conectarse al servidor.

Paso 5 — Configuración de la Autenticación VPN

El servidor VPN está ahora configurado para aceptar conexiones de clientes, pero aún no se han configurado credenciales. Necesitarás configurar un par de cosas en un archivo de configuración especial llamado ipsec.secrets:

  • Necesitas indicar a StrongSwan dónde encontrar la clave privada para nuestro certificado de servidor, para que el servidor pueda autenticarse ante los clientes.
  • También necesitas configurar una lista de usuarios que podrán conectarse a la VPN.

Vamos a abrir el archivo de secretos para editarlo:

  1. sudo nano /etc/ipsec.secrets

Primero, indica a StrongSwan dónde encontrar la clave privada y cómo analizarla.

/etc/ipsec.secrets
: RSA "server-key.pem"

Asegúrate de que la línea comience con el carácter : y que haya un espacio después de él para que toda la línea lea : RSA "server-key.pem".

Luego, definirás las credenciales de usuario. Puedes inventar cualquier combinación de nombre de usuario y contraseña que desees:

/etc/ipsec.secrets
your_username : EAP "your_password"

Guarda y cierra el archivo. Ahora que has terminado de trabajar con los parámetros de la VPN, reinicia el servicio VPN para que se aplique nuestra configuración:

  1. sudo systemctl restart strongswan-starter

Ahora que el servidor VPN ha sido completamente configurado con ambas opciones de servidor y credenciales de usuario, es hora de pasar a configurar la parte más importante: el firewall.

Paso 6 — Configuración del Firewall y Reenvío de IP del Kernel

Con la configuración de StrongSwan completa, necesitas configurar el firewall para permitir el tráfico VPN y reenviarlo.

Si seguiste el tutorial de configuración inicial del servidor pre-requisito, deberías tener un firewall UFW habilitado. Si aún no has configurado UFW, deberías empezar añadiendo una regla para permitir conexiones SSH a través del firewall para que tu sesión actual no se cierre cuando habilites UFW:

  1. sudo ufw allow OpenSSH

Luego habilita el firewall escribiendo:

  1. sudo ufw enable

Luego, añade una regla para permitir el tráfico UDP a los puertos estándar de IPSec, 500 y 4500:

  1. sudo ufw allow 500,4500/udp

A continuación, abrirás uno de los archivos de configuración de UFW para añadir algunas políticas de bajo nivel para enrutamiento y reenvío de paquetes IPSec. Sin embargo, antes de hacer esto, necesitas encontrar qué interfaz de red en nuestro servidor se utiliza para el acceso a internet. Encuentra esta interfaz consultando el dispositivo asociado con la ruta predeterminada:

  1. ip route show default

La interfaz pública debería seguir la palabra “dev”. Por ejemplo, este resultado muestra la interfaz llamada eth0, que está resaltada en el siguiente ejemplo:

Output
default via your_server_ip dev eth0 proto static

Cuando tengas tu interfaz de red pública, abre el archivo /etc/ufw/before.rules en tu editor de texto. Las reglas en este archivo se agregan al firewall antes del resto de las reglas habituales de entrada y salida. Se utilizan para configurar la traducción de direcciones de red (NAT) para que el servidor pueda enrutar correctamente las conexiones hacia y desde los clientes y Internet.

  1. sudo nano /etc/ufw/before.rules

Cerca del principio del archivo (antes de la línea *filter), agrega el siguiente bloque de configuración. Cambia cada instancia de eth0 en la configuración anterior para que coincida con el nombre de la interfaz que encontraste con ip route. Las líneas *nat crean reglas para que el firewall pueda enrutar y manipular correctamente el tráfico entre los clientes VPN e Internet. La línea *mangle ajusta el tamaño máximo del segmento de paquete para evitar problemas potenciales con ciertos clientes VPN:

/etc/ufw/before.rules
*nat
-A POSTROUTING -s 10.10.10.0/24 -o eth0 -m policy --pol ipsec --dir out -j ACCEPT
-A POSTROUTING -s 10.10.10.0/24 -o eth0 -j MASQUERADE
COMMIT

*mangle
-A FORWARD --match policy --pol ipsec --dir in -s 10.10.10.0/24 -o eth0 -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1361:1536 -j TCPMSS --set-mss 1360
COMMIT

*filter
:ufw-before-input - [0:0]
:ufw-before-output - [0:0]
:ufw-before-forward - [0:0]
:ufw-not-local - [0:0]
. . .

A continuación, después de las líneas de definición de *filter y cadena, agrega un bloque más de configuración:

/etc/ufw/before.rules
. . .
*filter
:ufw-before-input - [0:0]
:ufw-before-output - [0:0]
:ufw-before-forward - [0:0]
:ufw-not-local - [0:0]

-A ufw-before-forward --match policy --pol ipsec --dir in --proto esp -s 10.10.10.0/24 -j ACCEPT
-A ufw-before-forward --match policy --pol ipsec --dir out --proto esp -d 10.10.10.0/24 -j ACCEPT

Estas líneas indican al firewall que reenvíe el tráfico ESP (Encapsulating Security Payload) para que los clientes VPN puedan conectarse. ESP proporciona seguridad adicional para nuestros paquetes VPN mientras atraviesan redes no confiables.

Cuando hayas terminado, guarda y cierra el archivo una vez que hayas verificado que has agregado cada línea correctamente. Si utilizaste nano, hazlo presionando CTRL + X, Y, luego ENTER.

Antes de reiniciar el firewall, también necesitas cambiar algunos parámetros del núcleo de red para permitir el enrutamiento de una interfaz a otra. El archivo que controla estos ajustes se llama /etc/ufw/sysctl.conf. Necesitarás configurar algunas cosas en el archivo.

Primero, se debe activar el reenvío de paquetes IPv4 para que el tráfico pueda moverse entre las interfaces de red VPN y las interfaces de red públicas en el servidor. A continuación, desactivarás el descubrimiento de MTU de ruta para evitar problemas de fragmentación de paquetes. Finalmente, no aceptaremos redirecciones ICMP ni enviaremos redirecciones ICMP para prevenir ataques de hombre en el medio.

Abre el archivo de configuración de parámetros del núcleo de UFW utilizando nano o tu editor de texto preferido:

  1. sudo nano /etc/ufw/sysctl.conf

Ahora agrega la siguiente configuración net/ipv4/ip_forward=1 al final del archivo para habilitar el reenvío de paquetes entre interfaces:

/etc/ufw/sysctl.conf
. . .
net/ipv4/ip_forward=1

A continuación, bloquea el envío y la recepción de paquetes de redirección ICMP agregando las siguientes líneas al final del archivo:

/etc/ufw/sysctl.conf
. . .
net/ipv4/conf/all/accept_redirects=0
net/ipv4/conf/all/send_redirects=0

Finalmente, desactiva el descubrimiento de MTU de ruta agregando esta línea al final del archivo:

/etc/ufw/sysctl.conf
. . .
net/ipv4/ip_no_pmtu_disc=1

Guarda el archivo cuando hayas terminado. Ahora puedes habilitar todos tus cambios deshabilitando y volviendo a habilitar el firewall, ya que UFW aplica estos ajustes cada vez que se reinicia:

  1. sudo ufw disable
  2. sudo ufw enable

Se te pedirá que confirmes el proceso. Escribe Y para habilitar UFW nuevamente con los nuevos ajustes.

Paso 7 — Probando la conexión VPN en Windows, macOS, Ubuntu, iOS y Android

Ahora que todo está configurado, es hora de probarlo. Primero, necesitarás copiar el certificado CA que creaste e instalarlo en el/los dispositivo(s) cliente que se conectarán a la VPN. La forma más fácil de hacer esto es iniciar sesión en tu servidor y generar la salida del contenido del archivo de certificado:

  1. cat /etc/ipsec.d/cacerts/ca-cert.pem

Verás una salida similar a esta:

Output
-----BEGIN CERTIFICATE----- MIIFNDCCAxygAwIBAgIIHCsidG5mXzgwDQYJKoZIhvcNAQEMBQAwODELMAkGA1UE . . . H2YUdz8XNHrJHvMQKWFpi0rlEcMs+MSXPFWE3Q7UbaZJ/h8wpSldSUbQRUlphExJ dJ4PX+MUJO/vjG1/ie6Kh25xbBAc3qNq8siiJZDwrg6vjEK7eiZ1rA== -----FIN DEL CERTIFICADO-----

Copia esta salida en tu ordenador, incluyendo las líneas -----INICIO DEL CERTIFICADO----- y -----FIN DEL CERTIFICADO-----, y guárdalo en un archivo con un nombre reconocible, como ca-cert.pem. Asegúrate de que el archivo que crees tenga la extensión .pem.

Como alternativa, usa SFTP para transferir el archivo a tu ordenador.

Una vez que hayas descargado el archivo ca-cert.pem en tu ordenador, puedes configurar la conexión a la VPN.

Conexión desde Windows

Hay múltiples formas de importar el certificado raíz y configurar Windows para conectarse a una VPN. El primer método utiliza herramientas gráficas para cada paso. El segundo método utiliza comandos de PowerShell, que pueden ser scriptados y modificados para adaptarse a la configuración de tu VPN.

Nota: Estas instrucciones han sido probadas en instalaciones de Windows 10 que ejecutan las versiones 1903 y 1909.

Configurar Windows con Herramientas Gráficas

Primero, importa el certificado raíz siguiendo estos pasos:

  1. Pulsa WINDOWS+R para abrir el cuadro de diálogo Ejecutar, y escribe mmc.exe para iniciar la Consola de Administración de Windows.

  2. En el menú Archivo, ve a Agregar o quitar complemento, selecciona Certificados de la lista de complementos disponibles, y haz clic en Agregar.

  3. Queremos que la VPN funcione con cualquier usuario, así que selecciona Cuenta de equipo y haz clic en Siguiente.

  4. Estamos configurando las cosas en el equipo local, así que selecciona Equipo local, luego haz clic en Finalizar.

  5. Bajo el nodo Árbol de consola, expande la entrada Certificados (Equipo Local), expande Autoridades de certificación raíz de confianza, y luego selecciona la entrada Certificados:

  6. En el menú Acción, selecciona Todas las tareas y haz clic en Importar para mostrar el Asistente para importación de certificados. Haz clic en Siguiente para pasar la introducción.

  7. En la pantalla Archivo para importar, presiona el botón Examinar, asegúrate de cambiar el tipo de archivo de “Certificado X.509 (.cer;.crt)” a “Todos los archivos (.)”, y selecciona el archivo ca-cert.pem que has guardado. Luego haz clic en Siguiente.

  8. Asegúrate de que el Almacenamiento de Certificados esté configurado como Autoridades de Certificación Raíz de Confianza, y haz clic en Siguiente.

  9. Haz clic en Finalizar para importar el certificado.

Luego configura la VPN con estos pasos:

  1. Inicia Panel de Control, luego navega hasta el Centro de Redes y Recursos Compartidos.
  2. Haz clic en Configurar una nueva conexión o red, luego selecciona Conectar a un lugar de trabajo.
  3. Selecciona Usar mi conexión a Internet (VPN).
  4. Ingresa los detalles del servidor VPN. Introduce el nombre de dominio o la dirección IP del servidor en el campo Dirección de Internet, luego completa Nombre de destino con algo que describa tu conexión VPN. Luego haz clic en Hecho.

Configurando Windows usando PowerShell

Para importar el certificado de la autoridad de certificación raíz utilizando PowerShell, primero abre un símbolo del sistema de PowerShell con privilegios de administrador. Para hacerlo, haz clic derecho en el icono del menú Inicio y selecciona Windows PowerShell (Admin). También puedes abrir un símbolo del sistema como administrador y escribir powershell.

A continuación, importaremos el certificado utilizando el cmdlet de PowerShell Import-Certificate. En el siguiente comando, el primer argumento -CertStoreLocation asegurará que el certificado se importe en la tienda de Autoridades de Certificación Raíz de Confianza de la computadora para que todos los programas y usuarios puedan verificar el certificado del servidor VPN. El argumento -FilePath debe apuntar a la ubicación donde copiaste el certificado. En el siguiente ejemplo, la ruta es C:\Users\sammy\Documents\ca-cert.pem. Asegúrate de editar el comando para que coincida con la ubicación que utilizaste.

  1. Import-Certificate `
  2. -CertStoreLocation cert:\LocalMachine\Root\ `
  3. -FilePath C:\users\sammy\Documents\ca-cert.pem

El comando producirá algo como lo siguiente:

Output
PSParentPath: Microsoft.PowerShell.Security\Certificate::LocalMachine\Root Thumbprint Subject ---------- ------- DB00813B4087E9367861E8463A60CEA0ADC5F002 CN=VPN root CA

Ahora, para configurar la VPN utilizando PowerShell, ejecuta el siguiente comando. Sustituye el nombre DNS o la dirección IP de tu servidor en la línea -ServerAddress. Las distintas banderas garantizarán que Windows esté correctamente configurado con los parámetros de seguridad apropiados que coincidan con las opciones que configuraste en /etc/ipsec.conf.

  1. Add-VpnConnection -Name "VPN Connection" `
  2. -ServerAddress "server_domain_or_IP" `
  3. -TunnelType "IKEv2" `
  4. -AuthenticationMethod "EAP" `
  5. -EncryptionLevel "Maximum" `
  6. -RememberCredential `

Si el comando tiene éxito, no habrá ninguna salida. Para confirmar que la VPN está configurada correctamente, utiliza el cmdlet Get-VPNConnection:

  1. Get-VpnConnection -Name "VPN Connection"

Recibirás una salida como la siguiente:

Output
Name : VPN Connection ServerAddress : your_server_ip AllUserConnection : False Guid : {B055A1AB-175C-4028-B4A8-D34309A2B20E} TunnelType : Ikev2 AuthenticationMethod : {Eap} EncryptionLevel : Maximum L2tpIPsecAuth : UseWinlogonCredential : False EapConfigXmlStream : #document ConnectionStatus : Disconnected RememberCredential : True SplitTunneling : False DnsSuffix : IdleDisconnectSeconds : 0

Por defecto, Windows elige algoritmos más antiguos y lentos. Ejecute el cmdlet Set-VpnConnectionIPsecConfiguration para actualizar los parámetros de cifrado que Windows utilizará para el intercambio de claves IKEv2, y para cifrar paquetes:

  1. Set-VpnConnectionIPsecConfiguration -Name "VPN Connection" `
  2. -AuthenticationTransformConstants GCMAES256 `
  3. -CipherTransformConstants GCMAES256 `
  4. -DHGroup ECP384 `
  5. -IntegrityCheckMethod SHA384 `
  6. -PfsGroup ECP384 `
  7. -EncryptionMethod GCMAES256

Nota: Si desea eliminar la conexión VPN y reconfigurarla con diferentes opciones, puede ejecutar el cmdlet Remove-VpnConnection.

  1. Remove-VpnConnection -Name "VPN Connection" -Force

La bandera -Force omitirá la solicitud de confirmación para la eliminación. Debe estar desconectado de la VPN si intenta eliminarla usando este comando.

Conexión a la VPN

Una vez que haya importado el certificado y configurado la VPN utilizando cualquiera de los métodos, su nueva conexión VPN será visible en la lista de redes. Seleccione la VPN y haga clic en Conectar. Se le pedirá su nombre de usuario y contraseña. Escríbalos, haga clic en Aceptar, y estará conectado.

Conexión desde macOS

Siga estos pasos para importar el certificado:

  1. Haga doble clic en el archivo del certificado. Aparecerá Acceso a Llaveros con un diálogo que dice “Acceso a Llaveros está intentando modificar el llavero del sistema. Ingrese su contraseña para permitir esto.”
  2. Ingrese su contraseña, luego haga clic en Modificar Llavero
  3. Haz doble clic en el certificado VPN recién importado. Esto abrirá una pequeña ventana de propiedades donde puedes especificar los niveles de confianza. Configura Seguridad IP (IPSec) en Siempre Confiar y se te pedirá tu contraseña nuevamente. Esta configuración se guarda automáticamente después de ingresar la contraseña.

Ahora que el certificado está importado y confiado, configura la conexión VPN con estos pasos:

  1. Ve a Preferencias del Sistema y elige Red.
  2. Haz clic en el pequeño botón de “más” en la parte inferior izquierda de la lista de redes.
  3. En la ventana emergente que aparece, establece Interfaz en VPN, el Tipo de VPN en IKEv2, y da un nombre a la conexión.
  4. En los campos Servidor y ID Remoto, ingresa el nombre de dominio o la dirección IP del servidor. Deja en blanco el campo ID Local.
  5. Haz clic en Configuración de Autenticación, selecciona Nombre de usuario, e ingresa tu nombre de usuario y contraseña configurados para tu usuario VPN. Luego haz clic en Aceptar.

Finalmente, haz clic en Conectar para conectarte a la VPN. Ahora deberías estar conectado a la VPN.

Conexión desde Ubuntu

Para conectarse desde una máquina Ubuntu, puede configurar y administrar StrongSwan como un servicio o utilizar un comando único cada vez que desee conectarse. Se proporcionan instrucciones para ambos.

Gestión de StrongSwan como un Servicio

Para gestionar StrongSwan como un servicio, deberá realizar los siguientes pasos de configuración.

Primero, actualice su caché de paquetes local utilizando apt

  1. sudo apt update

A continuación, instale StrongSwan y los plugins requeridos para la autenticación:

  1. sudo apt install strongswan libcharon-extra-plugins

Ahora necesitará una copia del certificado de CA en el directorio /etc/ipsec.d/cacerts para que su cliente pueda verificar la identidad del servidor. Ejecute el siguiente comando para copiar el archivo ca-cert.pem en su lugar:

  1. sudo cp /tmp/ca-cert.pem /etc/ipsec.d/cacerts

Para asegurarse de que la VPN solo se ejecute bajo demanda, utilice systemctl para desactivar StrongSwan de ejecutarse automáticamente:

  1. sudo systemctl disable --now strongswan-starter

A continuación, configure el nombre de usuario y la contraseña que utilizará para autenticarse en el servidor VPN. Edite /etc/ipsec.secrets utilizando nano o su editor preferido:

  1. sudo nano /etc/ipsec.secrets

Agregue la siguiente línea, editando los valores de nombre de usuario y contraseña resaltados para que coincidan con los que configuró en el servidor:

/etc/ipsec.secrets
your_username : EAP "your_password"

Finalmente, edite el archivo /etc/ipsec.conf para configurar su cliente para que coincida con la configuración del servidor:

/etc/ipsec.conf
config setup

conn ikev2-rw
    right=server_domain_or_IP
    # Esto debe coincidir con el valor `leftid` en la configuración de su servidor
    rightid=server_domain_or_IP
    rightsubnet=0.0.0.0/0
    rightauth=pubkey
    leftsourceip=%config
    leftid=username
    leftauth=eap-mschapv2
    eap_identity=%identity
    auto=start

Para conectarse a la VPN, escriba:

  1. sudo systemctl start strongswan-starter

Para desconectarse nuevamente, escriba:

  1. sudo systemctl stop strongswan-starter

Uso del Cliente charon-cmd para Conexiones Ocasionales

Para administrar StrongSwan como un servicio, deberás realizar los siguientes pasos de configuración.

Primero, actualiza la caché de paquetes local utilizando apt

  1. sudo apt update

A continuación, instala StrongSwan y los complementos necesarios para la autenticación:

  1. sudo apt install strongswan libcharon-extra-plugins

Ahora necesitarás una copia del certificado de CA en el directorio /etc/ipsec.d/cacerts para que tu cliente pueda verificar la identidad del servidor. Ejecuta el siguiente comando para copiar el archivo ca-cert.pem en su lugar:

  1. sudo cp /tmp/ca-cert.pem /etc/ipsec.d/cacerts

En este punto, puedes conectarte al servidor VPN con charon-cmd utilizando el certificado de CA del servidor, la dirección IP del servidor VPN y el nombre de usuario que configuraste.

Ejecuta el siguiente comando siempre que desees conectarte al VPN:

  1. sudo charon-cmd --cert ca-cert.pem --host vpn_domain_or_IP --identity your_username

Cuando se te solicite, proporciona la contraseña del usuario VPN y estarás conectado al VPN. Para desconectarte, presiona CTRL+C en la terminal y espera a que se cierre la conexión.

Conexión desde iOS

Para configurar la conexión VPN en un dispositivo iOS, sigue estos pasos:

  1. Envíate un correo electrónico con el certificado raíz adjunto.
  2. Abre el correo electrónico en tu dispositivo iOS y toca el archivo de certificado adjunto, luego toca Instalar e ingresa tu código de acceso. Una vez que se instale, toca Listo.
  3. Ve a Configuración, General, VPN y toca Agregar Configuración VPN. Esto abrirá la pantalla de configuración de la conexión VPN.
  4. Toca en Tipo y selecciona IKEv2.
  5. En el campo Descripción, ingresa un nombre corto para la conexión VPN. Puede ser cualquier cosa que desees.
  6. En los campos Servidor e ID Remoto, ingresa el nombre de dominio o la dirección IP del servidor. El campo ID Local puede dejarse en blanco.
  7. Ingresa tu nombre de usuario y contraseña en la sección de Autenticación, luego toca Hecho.
  8. Selecciona la conexión VPN que acabas de crear, activa el interruptor en la parte superior de la página y estarás conectado.

Conexión desde Android

Sigue estos pasos para importar el certificado:

  1. Envíate un correo electrónico con el certificado CA adjunto. Guarda el certificado CA en tu carpeta de descargas.
  2. Descarga el cliente VPN StrongSwan desde la Play Store.
  3. Abre la aplicación. Toca el ícono “más” (. . .) en la esquina superior derecha y selecciona Certificados CA.
  4. Toque nuevamente el ícono “más” (. . .) en la esquina superior derecha. Seleccione Importar certificado.
  5. Busque el archivo de certificado de CA en su carpeta de descargas y selecciónelo para importarlo a la aplicación.

Ahora que el certificado está importado en la aplicación StrongSwan, puede configurar la conexión VPN con estos pasos:

  1. En la aplicación, toque AGREGAR PERFIL VPN en la parte superior.
  2. Rellene el campo Servidor con el nombre de dominio de su servidor VPN o la dirección IP pública.
  3. Asegúrese de que IKEv2 EAP (Usuario/Contraseña) esté seleccionado como el Tipo de VPN.
  4. Rellene los campos Usuario y Contraseña con las credenciales que definió en el servidor.
  5. Desmarque Seleccionar automáticamente en la sección de certificado de CA y haga clic en Seleccionar certificado de CA.
  6. Toque la pestaña IMPORTADO en la parte superior de la pantalla y elija el CA que importó (se llamará “VPN root CA” si no cambió el “DN” anteriormente).
  7. Si lo desea, complete el campo Nombre del perfil (opcional) con un nombre más descriptivo.

Cuando desee conectarse a la VPN, haga clic en el perfil que acaba de crear en la aplicación StrongSwan.

Resolución de problemas de conexiones

Si no puedes importar el certificado, asegúrate de que el archivo tenga la extensión .pem, y no .pem.txt.

Si no puedes conectar al VPN, verifica el nombre del servidor o la dirección IP que utilizaste. El nombre de dominio o la dirección IP del servidor deben coincidir con lo que configuraste como el nombre común (CN) al crear el certificado. Si no coinciden, la conexión VPN no funcionará. Por ejemplo, si configuraste un certificado con el CN de vpn.example.com, debes usar vpn.example.com al ingresar los detalles del servidor VPN. Verifica el comando que utilizaste para generar el certificado y los valores que utilizaste al crear tu conexión VPN.

Finalmente, verifica la configuración del VPN para asegurarte de que el valor leftid esté configurado con el símbolo @ si estás utilizando un nombre de dominio:

/etc/ipsec.conf
    leftid=@vpn.example.com

Si estás utilizando una dirección IP, asegúrate de que se omita el símbolo @. También asegúrate de que al generar el archivo server-cert.pem hayas incluido tanto las banderas --san @dirección_IP como --san dirección_IP.

Conclusión

En este tutorial, has creado un servidor VPN que utiliza el protocolo IKEv2. Aprendiste sobre las directivas que controlan los lados left y right de una conexión tanto en el servidor como en los clientes. También configuraste un cliente de Windows, macOS, iOS, Android o Linux para conectarse al VPN.

Para agregar o eliminar usuarios, vuelve al Paso 5 nuevamente. Cada línea en /etc/ipsec.secrets es para un usuario, por lo que agregar o eliminar usuarios, o cambiar contraseñas solo requiere editar el archivo.

Ahora puedes estar seguro de que tus actividades en línea permanecerán seguras donde sea que vayas y con cualquier dispositivo que uses para acceder a internet.

Source:
https://www.digitalocean.com/community/tutorials/how-to-set-up-an-ikev2-vpn-server-with-strongswan-on-ubuntu-22-04