Tutorial

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

Published on August 27, 2020
Español
Cómo configurar un servidor VPN IKEv2 con StrongSwan en Ubuntu 20.04

Justin Ellingwood y Namo escribieron una versión anterior de este tutorial.

Introducción

Un red virtual privad,(VPN, por sus siglas en inglés) le permite cifrar de forma segura el tráfico mientras tiene lugar a través de redes no confiables, como las de una cafetería, una sala de conferencias o un aeropuerto.

Internet Key Exchange v2, o IKEv2, es un protocolo que permite la implementación directa de túneles de IPSec entre un servidor y un cliente. En las implementaciones de VPN IKEv2, IPSec proporciona cifrado para el tráfico de red. IKEv2 es compatible de forma nativa con algunas plataformas (OS X 10.11+, iOS 9.1+ y Windows 10) sin necesidad de aplicaciones adicionales y maneja los picos de los clientes sin problemas.

En este tutorial, configurará un servidor VPN IKEv2 con StrongSwan en un servidor con Ubuntu 20.04. Luego, aprenderá a conectarse con él con clientes de Windows, macOS, Ubuntu, iOS y Android.

Requisitos previos

Para completar este tutorial, necesitará lo siguiente:

Paso 1: Instalar StrongSwan

Primero, instalaremos StrongSwan, un demonio IPSec de código abierto que configuraremos para que funcione como nuestro servidor VPN. También instalaremos el componente de infraestructura de clave pública (PKI) para poder crear una Entidad de certificación (CA) para proporcionar las credenciales para nuestra infraestructura.

Comience por actualizar la caché del paquete local:

  1. sudo apt update

A continuación, instale el software escribiendo lo siguiente:

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

Se utiliza el paquete adicional libcharon-extauth-plugins para garantizar que varios clientes pueden autenticarse en su servidor utilizando un nombre de usuario y una frase de contraseña compartidos.

Ahora que se instaló todo, crearemos nuestros certificados.

Paso 2: Crear una autoridad de certificación

Un servidor IKEv2 requiere un certificado para identificarse ante los clientes. Para que podamos crear el certificado requerido, el paquete strongswan-pki incluye una utilidad para generar una entidad de certificación y certificados del servidor denominada pki.

Para comenzar, crearemos algunos directorios para almacenar todos los activos en los que trabajaremos. La estructura de directorios coincide con algunos de los directorios de /etc/ipsec.d, adonde, eventualmente, moveremos todos los elementos que creemos.

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

A continuación, bloquearemos los permisos para que otros usuarios no puedan ver nuestros archivos privados:

  1. chmod 700 ~/pki

Ahora que disponemos de una estructura de directorios para almacenar todo, podemos generar una clave de root. Será una clave RSA de 4096 bits que se usará para firmar nuestra autoridad de certificación de root.

Ejecute estos comandos para generar la clave:

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

Luego, podemos seguir creando nuestra entidad de certificación de root, utilizando la clave que acabamos de generar para firmar el certificado root:

  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

El indicador ---life 3650 se utiliza para garantizar que el certificado root de la entidad de certificación sea válido por 10 años. El certificado root de una entidad no suele cambiar, dado que debería redistribuirse a todos los servidores y clientes que confían en él, por lo tanto, 10 años es un valor de vencimiento predeterminado seguro.

Puede cambiar el valor del nombre distintivo (DN) por otro si lo desea. El nombre común (campo CN) aquí es simplemente el indicador, por lo que no tiene que coincidir con ninguna otra cosa de su infraestructura.

Ahora que nuestra autoridad de certificación de root está lista, podemos crear un certificado que usará el servidor de VPN.

Paso 3: Generar un certificado para el servidor de VPN

Ahora, crearemos un certificado y la contraseña para el servidor de VPN. Esta certificación permitirá a los clientes verificar la autenticidad del servidor usando la certificación de CA que acabamos de generar.

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

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

Ahora, cree y firme el certificado del servidor de VPN con la clave de la autoridad de certificación que creó en el paso anterior. Ejecute el siguiente comando, pero cambie los campos de nombre común (CN) y nombre alternativo de sujeto (SAN) por el nombre de DNS o la dirección IP de su servidor de 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 utiliza una dirección IP en lugar de un nombre DNS, deberá especificar varias entradas --san. Deberá modificar la línea del bloque de comandos anterior en la que se especifica el nombre distintivo (--dn ...) con la entrada adicional como se indica en la siguiente línea extraída:

--dn "CN=IP address --san @IP_address --san IP_address \

Esta entrada adicional --san @IP_address se añade porque algunos clientes comprobarán si el certificado TLS tiene tanto una entrada de DNS como una de dirección IP para un servidor al verificar su identidad.

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

Ahora que generamos todos los archivos TLS/SSL que necesita StrongSwan, podemos moverlos a su lugar en el directorio /etc/ipsec.d escribiendo lo siguiente:

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

En este paso, creamos un par de certificados que se utilizarán para proteger las comunicaciones entre el cliente y el servidor. También, firmamos los certificados con la clave de CA, para que el cliente pueda verificar la autenticidad del servidor de VPN usando el certificado de CA. Con todos estos certificados listos, procederemos a configurar el software.

Paso 4: Configurar StrongSwan

StrongSwan tiene un archivo de configuración predeterminado con algunos ejemplos, pero tendremos que hacer la mayor parte de la configuración por nuestra cuenta. Haremos una copia de seguridad del archivo a modo de referencia antes de empezar de cero:

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

Cree y abra un nuevo archivo de configuración en blanco con el editor de texto que prefiera. En este caso, utilizaremos nano:

  1. sudo nano /etc/ipsec.conf

Nota: Mientras trabaje en esta sección para configurar la porción del servidor de su VPN, encontrará ajustes que se refieren a los lados izquierdo y derecho de una conexión. Al trabajar con una VPN IPSec, por convención, el lado *izquierdo *se refiere al sistema local que está configurando, que, en este caso, es el servidor. Las directivas del lado derecho de estas configuraciones se refieren a clientes remotos, como teléfonos y otras computadoras.

Cuando procedamos a configurar clientes más adelante en este tutorial, los archivos de configuración de los clientes harán referencia a sí mismos utilizando varias directivas de la izquierda y se hará referencia al servidor con terminología del lado derecho.

Primero, le diremos a StrongSwan que registre los estados de los demonios para depurar y permitir conexiones duplicadas. Añada 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 le indicaremos a StrongSwan que cree túneles de VPN IKEv2 y cargue de forma automática esta sección de configuración cuando se inicie. Agregue 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 “pendiente” en caso de que el cliente se desconecte de forma inesperada. Agregue estas líneas:

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

A continuación, configuraremos los parámetros de IPSec del lado “izquierdo” del servidor. Cada uno de los siguientes parámetros garantiza que el servidor esté configurado para aceptar conexiones de clientes e identificarse correctamente. Añada cada una de estas configuraciones al archivo /etc/ipsec.conf una vez que esté familiarizado con ellas y el motivo por el cual se utilizan:

  • left=%any El valor %any garantiza que el servidor utilice la interfaz de red en la que recibe conexiones entrantes para la posterior comunicación con los clientes. Por ejemplo, si conecta un cliente a través de una red privada, el servidor utilizará la dirección IP privada en la que 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 garantiza que el nombre configurado del servidor y el nombre distintivo (DN) indicado en el certificado público concuerden.
  • leftcert=server-cert.pem Esta opción es la ruta al certificado público del servidor que configuró en el paso 3. Sin ella, el servidor no podrá autenticarse con clientes ni terminar de negociar la configuración de IKEv2.
  • leftsendcert=always El valor always garantiza que cualquier cliente que se conecte al servidor reciba siempre una copia del certificado público del servidor como parte de la configuración de la conexión inicial.
  • leftsubnet=0.0.0.0/0 Es la última opción “izquierda” que agregará, que les indica a los clientes las subredes accesibles detrás del servidor. En este caso, 0.0.0.0/0 se utiliza para representar todo el conjunto de direcciones IPv4, lo que significa que el servidor les 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 del lado “izquierdo” pertinentes, añádalas al archivo de este modo:

/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: Cuando configure el ID del servidor (leftid), incluya únicamente el carácter @ si su servidor de VPN se identificará por un nombre de dominio:

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

Si el servidor se identifica por su dirección IP, simplemente introdúzcala:

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

A continuación, podemos configurar los parámetros de IPSec del lado “derecho” del cliente. Cada uno de los siguientes parámetros le indica al servidor cómo aceptar conexiones de los clientes, cómo deben autenticarse los clientes al servidor y los intervalos de direcciones IP privadas y servidores DNS que utilizarán los clientes. Añada cada una de estas configuraciones al archivo /etc/ipsec.conf una vez que esté familiarizado con ellas y el motivo por el cual se utilizan:

  • right=%any La opción %any del lado derecho de la conexión le indica al servidor que acepte las conexiones entrantes de cualquier cliente remoto.
  • rightid=%any Esta opción garantiza que el servidor no rechace conexiones de clientes que proporcionan 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 utilizarán los clientes para autenticarse en el servidor. eap-mschapv2 se utiliza aquí para tener una amplia compatibilidad y poder admitir clientes como dispositivos de Windows, macOS y Android.
  • rightsourceip=10.10.10.0/24 Esta opción le indica al servidor que asigne direcciones IP privadas a los clientes del grupo de IP especificado 10.10.10.0/24.
  • rightdns=8.8.4.4 Estas direcciones IP son las resoluciones DNS públicas de Google. Se pueden cambiar para usar otras resoluciones públicas, las del servidor VPN o cualquier otra resolución disponible para los clientes.
  • rightsendcert=never Esta opción le indica al servidor que los clientes no necesitan enviar un certificado para autenticarse.

Ahora que está familiarizado con las opciones del lado “derecho” necesarias para la VPN, añada 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 indicaremos a StrongSwan que solicite a los clientes las credenciales de los usuarios cuando se conecten:

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

Por último, añada las siguientes líneas para admitir clientes de Linux, Windows, macOS, iOS y Android. Estas líneas especifican los diversos algoritmos de intercambio de clave, hash, autenticación y cifrado (denominados comúnmente Conjuntos de cifrado) que StrongSwan permitirá que utilicen los diferentes clientes:

/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 compatible se separa de los demás con 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 seleccionaron para garantizar el mayor grado de compatibilidad con los clientes de Windows, macOS, iOS, Android y Linux.

El archivo de configuración completo debe tener el siguiente aspecto:

/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!

Guarde y cierre el archivo una vez que haya verificado que añadió correctamente cada línea. Si utiliza nano, podrá hacerlo presionando CTRL+X, Y y luego ENTER.

Ahora que configuramos los parámetros de VPN, crearemos una cuenta para que nuestros usuarios puedan conectarse al servidor.

Paso 5: Configurar la autenticación de VPN

Nuestro servidor de VPN ahora está configurado para aceptar conexiones de clientes, pero aún no establecimos credenciales. Tendremos que realizar algunas configuraciones en un archivo de configuración especial llamado ipsec.secrets:

  • Debemos indicar a StrongSwan dónde encontrar la clave privada para el certificado de nuestro servidor, de modo que este último pueda autenticar a los clientes.
  • También, tendremos que configurar una lista de usuarios a quienes se les permitirá conectarse al VPN.

Abramos el archivos de secretos para editarlo:

  1. sudo nano /etc/ipsec.secrets

Primero, le indicaremos a StrongSwan dónde encontrar nuestra clave privada:

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

Luego, definiremos las credenciales de los usuarios. Puede crear cualquier combinación de nombre de usuario o contraseña que desee:

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

Guarde y cierre el archivo. Ahora que terminamos de trabajar con los parámetros de VPN, reiniciaremos el servicio de VPN para que se aplique nuestra configuración:

  1. sudo systemctl restart strongswan-starter

Ahora que el servidor de VPN quedó totalmente configurado, tanto con opciones de servidor como con las credenciales de usuarios, es el momento de proseguir con la configuración de la parte más importante: el firewall.

Paso 6: Configurar el firewall y el reenvío de IP de kernel

Ahora que completamos la configuración de StrongSwan, debemos configurar el firewall para que permita tráfico VPN y lo reenvíe.

Si siguió el tutorial de configuración inicial para servidores indicado en los requisitos previos, debería tener un firewall UFW. Si todavía no tiene un firewall UFW configurado, comience por añadir una regla para permitir conexiones SSH a través del firewall de modo que su sesión actual no se cierre cuando habilite UFW:

  1. sudo ufw allow OpenSSH

A continuación, habilite el firewall escribiendo lo siguiente:

  1. sudo ufw enable

A continuación, agregue una regla para permitir tráfico UDP a los puertos de IPSec estándar 500 y 4500:

  1. sudo ufw allow 500,4500/udp

A continuación, abriremos uno de los archivos de configuración de UFW para agregar algunas políticas de bajo nivel a fin de dirigir y reenviar paquetes IPSec. Sin embargo, para poder hacerlo, debemos encontrar la interfaz de red de nuestro servidor que se utiliza para acceder a Internet. Busque esta interfaz al consultar el dispositivo asociado con la ruta predeterminada:

  1. ip route show default

Su interfaz pública debe ir después de la palabra “dev”. Por ejemplo, este resultado muestra la interfaz llamada eth0, que se resalta a continuación:

Output
default via your_server_ip dev eth0 proto static

Cuando tenga una interfaz de red pública, abra el archivo /etc/ufw/before.rules en su editor de texto. Las reglas de este archivo se añaden al firewall antes del resto de las reglas de entrada y salida habituales. Se utilizan para configurar la traducción de direcciones de red (NAT) para que el servidor pueda dirigir correctamente las conexiones desde y hacia los clientes e Internet.

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

Cerca de la parte superior del archivo (antes de la línea *filter), agregue el siguiente bloque de configuración: Cambie cada instancia de eth0 en la configuración superior para que coincida con el nombre de interfaz que encontró con ip route. Las líneas *nat crean reglas para que el firewall pueda dirigir y manipular de forma correcta el tráfico entre los clientes de VPN e Internet. La línea *mangle ajusta el tamaño máximo del segmento de paquete para evitar posibles problemas con determinados clientes de 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 *filter y de definición de cadenas, agregue 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 solicitan al firewall que reenvíe el tráfico de carga de seguridad encapsuladora (ESP), para que los clientes de VPN puedan conectarse. ESP proporciona seguridad adicional para nuestros paquetes de VPN a medida que circulan por redes no confiables.

Cuando haya terminado, guarde y cierre el archivo una vez que haya verificado que añadió correctamente cada línea. Si utiliza nano, podrá hacerlo presionando CTRL+X, Y y luego ENTER.

Antes de reiniciar el firewall, cambiaremos algunos parámetros de kernel de red para permitir el enrutamiento de una interfaz a otra. El archivo que controla estas configuraciones se llama /etc/ufw/sysctl.conf. Vamos a tener que configurar algunas cosas en el archivo.

El primer reenvío de paquetes IPv4 se debe activar para que el tráfico pueda moverse entre la VPN y las interfaces de red de acceso público en el servidor. A continuación, inhabilitaremos la detección de MTU de ruta para evitar problemas de fragmentación de paquetes. Tampoco aceptaremos redireccionamientos de ICMP ni los enviaremos para prevenir ataques de intermediarios (man-in-the-middle).

Abra el archivo de configuración de parámetros del kernel de UFW con nano o su editor de texto preferido:

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

Ahora, añada 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, bloquee el envío y la recepción de paquetes de redireccionamiento de ICMP añadiendo 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

Por último, desactive la detección de MTU de ruta al agregar esta línea al final del archivo:

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

Guarde el archivo cuando termine. Ahora, podemos habilitar todos nuestros cambios al deshabilitar y volver a habilitar el firewall, dado que UFW aplica estos ajustes siempre que se reinicia:

  1. sudo ufw disable
  2. sudo ufw enable

Se le solicitará confirmar el proceso. Escriba Y para activar UFW nuevamente con las configuraciones nuevas.

Paso 7: Probar la conexión VPN en Windows, macOS, Ubuntu, iOS y Android

Ahora que todo está configurado, es hora de probarlo. Primero, deberá copiar el certificado de CA que creó e instalarlo en sus dispositivos clientes que se conectarán a la VPN. La forma más sencilla de hacerlo es iniciar sesión en su servidor y mostrar el contenido del archivo de certificado:

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

Visualizará un resultado similar a esto:

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

Copie este resultado a su computadora, incluidas las líneas -----BEGIN CERTIFICATE----- y -----END CERTIFICATE-----, y guárdelo en un archivo con un nombre que pueda reconocer, como ca-cert.pem. Asegúrese de que el archivo que cree tenga la extensión .pem.

De forma alternativa, use SFTP para transferir el archivo a su computadora.

Una vez que descargue el archivo ca-cert.pem a su computadora, podrá configurar la conexión a la VPN.

Establecer conexión desde Windows

Hay varias formas de importar el certificado root y configurar Windows para conectarse a una VPN. En el primer método, se utilizan herramientas gráficas para cada paso. En el segundo, se utilizan los comandos de PowerShell, que se pueden cifrar y modificar para adaptarlos a la configuración de su VPN.

** Nota**: Estas instrucciones se han probado en instalaciones de Windows 10 con versiones 1903 y 1909.

Configurar Windows con herramientas gráficas

Primero, importe el certificado de root siguiendo estos pasos:

  1. Pulse WINDOWS+R para abrir el diálogo Ejecutar e ingrese mmc.exe para iniciar la Consola de administración de Windows.

  2. En el menú Archivo, diríjase a Agregar o quitar complemento, seleccione Certificados en la lista de complementos disponibles y haga clic en Agregar.

  3. Nuestro propósito es que la VPN funcione con cualquier usuario. Por ello, debe seleccionar** Cuenta de equipo** y hacer clic en Siguiente.

  4. Realizaremos algunas configuraciones en la computadora local. Seleccione Equipo local y luego haga clic en Finalizar.

  5. Debajo del nodo Raíz de consola, expanda la entrada Certificados (equipo local), expanda Entidades de certificación raíz de confianza, y seleccione la entrada Certificados: de certificados Vista

  6. En el menú Acción, seleccione Todas las tareas y haga clic en Importar… para visualizar el Asistente para importación de certificados. Haga clic en Siguiente para pasar la introducción.

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

  8. Asegúrese de que el valor de Almacén de certificados sea Entidades de certificación raíz de confianza y haga clic en Siguiente************.

  9. Haga clic en Finalizar para importar el certificado.

Luego, configure la VPN siguiendo estos pasos:

  1. Inicie el Panel de control y diríjase a Centro de redes y recursos compartidos.
  2. Haga clic en Configurar una nueva conexión o red y luego seleccione Conectarse** a un área de trabajo**.
  3. Seleccione Usar mi conexión a Internet (VPN).
  4. Ingrese la información del servidor VPN. Ingrese el nombre del dominio o la dirección IP del servidor en el campo Dirección de Internet y luego complete Nombre de destino con algo que describa su conexión de VPN. Luego haga clic en Conectar.

Configurar Windows con PowerShell

Para importar el certificado root de la CA utilizando PowerShell, primero, abra una línea de comandos de PowerShell con privilegios de administrador. Para hacerlo, haga clic con el botón derecho en el icono del menú Inicio y seleccione Windows PowerShell (Admin). También puede abrir un mensaje de comandos como administrador y escribir powershell.

A continuación, importaremos el certificado con el cmdlet Import-Certificate de PowerShell. En el siguiente comando, el primer argumento -CertStoreLocation garantizará que el certificado se importe en la tienda de Entidades de certificación root de confianza de la computadora de modo que todos los programas y usuarios puedan verificar el certificado del servidor VPN. El argumento -FilePath debe apuntar a la ubicación en la que copió el certificado. En el siguiente ejemplo, la ruta es C:\Users\sammy\Documents\ca-cert.pem. Asegúrese de editar el comando para que coincida con la ubicación que utilizó.

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

El comando generará algo similar a esto:

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

Ahora, para configurar la VPN con PowerShell, ejecute el siguiente comando. Sustituya el nombre DNS o la dirección IP de su servidor en la línea -ServerAddress. Los diversos indicadores garantizarán que Windows esté configurado correctamente con los parámetros de seguridad adecuados que concuerdan con las opciones que estableció 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 es exitoso, no habrá ningún resultado. Para confirmar que la VPN esté configurada correctamente, utilice el cmdlet Get-VPNConnection:

  1. Get-VpnConnection -Name "VPN Connection"

Verá un resultado como el 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 selecciona 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 volver a configurarla con diferentes opciones, puede ejecutar el cmdlet Remove-VpnConnection.

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

El indicador -Force omite el mensaje de confirmación de la eliminación. Para eliminar la VPN con este comando, debe estar desconectado de ella.

Conectarse a la VPN

Una vez que tenga el certificado importado y la VPN configurada con cualquier método, su nueva conexión VPN será visible en la lista de redes. Seleccione la VPN y haga clic en Conectar. Se le solicitará su nombre de usuario y contraseña. Escríbalos y haga clic en Aceptar. Con esto, establecerá la conexión.

Establecer conexión desde macOS

Siga estos pasos para importar el certificado:

  1. Haga doble clic en el archivo de certificado. Acceso a Llaveros aparecerá con el diálogo “Acceso a Llaveros está intentando modificar el sistema de administración de contraseñas. Ingrese su contraseña para autorizarlo”.
  2. Ingrese su contraseña y haga clic en Modificar llavero.
  3. Haga clic en el certificado de VPN recién importado. Con esto, se abrirá abre una pequeña ventana de propiedades en la que podrá especificar los niveles de confianza. Fije Seguridad de IP (IPSec) en Confiar siempre. Se solicitará que ingrese su contraseña nuevamente. Esta configuración guarda de forma automática la contraseña una vez que se ingresa.

Ahora que el certificado se importó y es confiable, configure la conexión VPN con estos pasos:

  1. Diríjase a Preferencias del Sistema y seleccione Red.
  2. Haga clic en el botón pequeño de “adición” en la parte inferior izquierda de la lista de redes.
  3. En la ventana emergente que aparecerá, fije el valor de Interfaz en VPN y el de Tipo de VPN en IKEv2, y asigne un nombre a la conexión.
  4. En los campos Servidor e ID remoto, ingrese el nombre de dominio o la dirección IP del servidor. Deje ID local en blanco.
  5. Haga clic en Ajustes de autenticación, seleccione Nombre del usuario, e ingrese el nombre de usuario y la contraseña que configuró para su usuario de VPN. Luego haga clic en Aceptar.

Por último, haga clic en Conectar para conectarse a la VPN. Con esto, debería establecer la conexión con la VPN.

Establecer conexión desde Ubuntu

Para conectarse desde un equipo con Ubuntu, puede configurar y administrar StrongSwan como un servicio o usar un comando único cada vez que desee conectarse. Se proporcionan instrucciones para ambas alternativas.

Administrar StrongSwan como un servicio

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

Primero, actualice su caché de paquetes local con apt

  1. sudo apt update

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

  1. sudo apt install strongswan libcharon-extra-plugins

Ahora, necesitará tener 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 a su lugar:

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

Para garantizar que la VPN solo se ejecute bajo demanda, utilice systemctl para deshabilitar la ejecución automática de StrongSwan:

  1. sudo systemctl disable --now strongswan-starter

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

  1. sudo nano /etc/ipsec.conf

Añada la siguiente línea, asegurándose de editar los valores resaltados de nombre de usuario y contraseña para que coincidan con los que configuró en el servidor:

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

Por último, 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
    # This should match the `leftid` value on your server's configuration
    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 lo siguiente:

  1. sudo systemctl start strongswan-starter

Para desconectarse nuevamente, escriba lo siguiente:

  1. sudo systemctl stop strongswan-starter

Usar el cliente charon-cmd para conexiones únicas

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

Primero, actualice su caché de paquetes local con apt

  1. sudo apt update

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

  1. sudo apt install strongswan libcharon-extra-plugins

Ahora, necesitará tener 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 a su lugar:

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

En este punto, puede conectarse 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 configuró.

Ejecute el siguiente comando siempre que quiera conectarse a la VPN:

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

Cuando se le solicite, proporcione la contraseña del usuario de la VPN para conectarse a ella. Para desconectarse, pulse CTRL+C en la terminal y espere que la conexión se cierre.

Establecer conexión desde iOS

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

  1. Envíese un correo electrónico con el certificado de root adjunto.
  2. Abra el correo electrónico en su dispositivo iOS, toque el archivo del certificado adjunto y luego seleccione Instalar e ingrese su código de acceso. Una vez que se instale, pulse Listo.
  3. Diríjase a Configuración, General, VPN y toque Agregar configuración de VPN. Con esto, se mostrará la pantalla de configuración de la conexión de la VPN.
  4. Toque Tipo y seleccione IKEv2.
  5. En el campo Descripción, ingrese un nombre corto para la conexión de VPN. Puede ser el que desee.
  6. En los campos Servidor e ID remoto, ingrese el nombre de dominio o la dirección IP del servidor. Puede dejar el campo ID local vacío.
  7. Ingrese su nombre de usuario y contraseña en la sección Autenticación y toque Listo.
  8. Seleccione la conexión de VPN que acaba de crear y toque el conmutador en la parte superior de la página. Con esto, se conectará.

Establecer conexión desde Android

Siga estos pasos para importar el certificado:

  1. Envíese un correo electrónico con el certificado de CA adjunto. Guarde el certificado CA en su carpeta de descargas.
  2. Descargue StrongSwan VPN Client de Play Store.
  3. Abra la aplicación. Presione el icono “más” (. . .) en la esquina superior derecha y seleccione Certificados de CA.
  4. Toque nuevamente el ícono “más” ( ) en la esquina superior derecha. Seleccione Importar certificado.
  5. Busque el archivo del certificado de CA en su carpeta de descargas y selecciónelo para importarlo a la aplicación.

Ahora que se importó el certificado a la aplicación StrongSwan, puede configurar la conexión de VPN con los siguientes pasos:

  1. En la aplicación, toque ADD VPN PROFILE en la parte superior.
  2. Complete el campo Server con el nombre de dominio o la dirección IP pública de su servidor de VPN.
  3. Asegúrese de seleccionar IKEv2 EAP (Username/Password) en la categoría “Type” para la VPN.
  4. Complete los campos Username y Password con las credenciales que definió en el servidor.
  5. Anule la selección de Select automatically en la sección CA certificate y haga clic en Select CA certificate .
  6. Toque la pestaña IMPORTED en la parte superior de la pantalla y elija la CA que importó (recibirá el nombre “CA rootVPN” si no cambió “DN” previamente).
  7. Si desea, complete el campo Profile name (optional) 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.

Solución de problemas en conexiones

Si no puede importar el certificado, asegúrese de que el archivo contenga la extensión .pem en lugar .pem.txt``.

Si no puede conectarse a la VPN, verifique el nombre o la dirección IP del servidor que usó. El nombre de dominio o la dirección IP del servidor debe coincidir con lo que configuró como nombre común (CN) al crear el certificado. Si no coinciden, la conexión de VPN no funcionará. Por ejemplo, si configura un certificado con el CN vpn.example.com, debe usar vpn.example.com cuando ingrese la información del servidor VPN. Verifique bien el comando que usó para generar el certificado y los valores que empleó al crear su conexión de VPN.

Por último, verifique la configuración de VPN para garantizar que el valor leftid esté configurado con el símbolo @ si usa un nombre de dominio:

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

Y si usa una dirección IP, asegúrese de que se omita el símbolo @. También asegúrese de haber incluido tanto --san @IP_address como --san IP_address al generar el archivo server-cert.pem.

Conclusión

A través de este tutorial, creó un servidor de VPN que usa el protocolo IKEv2. Aprendió sobre las directivas que controlan los lados izquierdo y derecho de una conexión tanto en el servidor como en los clientes. También configuró un cliente de Windows, macOS, iOS, Android o Linux para conectarse a la VPN.

Para agregar o eliminar usuarios, regrese al Paso 5. Cada línea de /etc/ipsec.secrets corresponde a un usuario, por lo tanto, para agregar o eliminar usuarios, o modificar contraseñas, solo se debe editar el archivo.

Ahora, puede estar seguro de que sus actividades en línea se mantendrán seguras esté donde esté y en cualquier dispositivo que utilice para acceder a Internet.

Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.

Learn more about our products

About the authors

Still looking for an answer?

Ask a questionSearch for more help

Was this helpful?
 
Leave a comment


This textbox defaults to using Markdown to format your answer.

You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!

Try DigitalOcean for free

Click below to sign up and get $200 of credit to try our products over 60 days!

Sign up

Join the Tech Talk
Success! Thank you! Please check your email for further details.

Please complete your information!

Become a contributor for community

Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.

DigitalOcean Documentation

Full documentation for every DigitalOcean product.

Resources for startups and SMBs

The Wave has everything you need to know about building a business, from raising funding to marketing your product.

Get our newsletter

Stay up to date by signing up for DigitalOcean’s Infrastructure as a Newsletter.

New accounts only. By submitting your email you agree to our Privacy Policy

The developer cloud

Scale up as you grow — whether you're running one virtual machine or ten thousand.

Get started for free

Sign up and get $200 in credit for your first 60 days with DigitalOcean.*

*This promotional offer applies to new accounts only.