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:
- Un servidor Ubuntu 22.04 configurado siguiendo la guía de configuración inicial del servidor Ubuntu 22.04, incluyendo un usuario no root con permisos de
sudo
y un firewall.
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:
Luego instala el software escribiendo:
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.
Luego, asegura los permisos para que nuestros archivos privados no puedan ser vistos por otros usuarios.
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:
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.
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:
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:
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:
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:
Cree y abra un nuevo archivo de configuración en blanco utilizando su editor de texto preferido. Aquí, usará nano
:
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:
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:
. . .
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:
. . .
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ónleftcert
, la opciónleftid
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 valoralways
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 utiliza0.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:
. . .
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:
. . . leftid=@vpn.example.com
. . .
Si el servidor será identificado por su dirección IP, simplemente coloque la dirección IP en:
. . .
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 ladoright
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 de10.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
:
. . .
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:
. . .
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:
. . .
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í:
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:
Primero, indica a StrongSwan dónde encontrar la clave privada y cómo analizarla.
: 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:
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:
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:
Luego habilita el firewall escribiendo:
Luego, añade una regla para permitir el tráfico UDP a los puertos estándar de IPSec, 500
y 4500
:
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:
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:
Outputdefault 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.
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:
*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:
. . .
*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:
Ahora agrega la siguiente configuración net/ipv4/ip_forward=1
al final del archivo para habilitar el reenvío de paquetes entre interfaces:
. . .
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:
. . .
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:
. . .
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:
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:
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:
-
Pulsa
WINDOWS+R
para abrir el cuadro de diálogo Ejecutar, y escribemmc.exe
para iniciar la Consola de Administración de Windows. -
En el menú Archivo, ve a Agregar o quitar complemento, selecciona Certificados de la lista de complementos disponibles, y haz clic en Agregar.
-
Queremos que la VPN funcione con cualquier usuario, así que selecciona Cuenta de equipo y haz clic en Siguiente.
-
Estamos configurando las cosas en el equipo local, así que selecciona Equipo local, luego haz clic en Finalizar.
-
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:
-
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.
-
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. -
Asegúrate de que el Almacenamiento de Certificados esté configurado como Autoridades de Certificación Raíz de Confianza, y haz clic en Siguiente.
-
Haz clic en Finalizar para importar el certificado.
Luego configura la VPN con estos pasos:
- Inicia Panel de Control, luego navega hasta el Centro de Redes y Recursos Compartidos.
- Haz clic en Configurar una nueva conexión o red, luego selecciona Conectar a un lugar de trabajo.
- Selecciona Usar mi conexión a Internet (VPN).
- 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.
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
.
Si el comando tiene éxito, no habrá ninguna salida. Para confirmar que la VPN está configurada correctamente, utiliza el cmdlet Get-VPNConnection
:
Recibirás una salida como la siguiente:
OutputName : 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:
Nota: Si desea eliminar la conexión VPN y reconfigurarla con diferentes opciones, puede ejecutar el cmdlet Remove-VpnConnection
.
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:
- 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.”
- Ingrese su contraseña, luego haga clic en Modificar Llavero
- 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:
- Ve a Preferencias del Sistema y elige Red.
- Haz clic en el pequeño botón de “más” en la parte inferior izquierda de la lista de redes.
- En la ventana emergente que aparece, establece Interfaz en VPN, el Tipo de VPN en IKEv2, y da un nombre a la conexión.
- 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.
- 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
A continuación, instale StrongSwan y los plugins requeridos para la autenticación:
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:
Para asegurarse de que la VPN solo se ejecute bajo demanda, utilice systemctl
para desactivar StrongSwan de ejecutarse automáticamente:
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:
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:
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:
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:
Para desconectarse nuevamente, escriba:
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
A continuación, instala StrongSwan y los complementos necesarios para la autenticación:
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:
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:
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:
- Envíate un correo electrónico con el certificado raíz adjunto.
- 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.
- Ve a Configuración, General, VPN y toca Agregar Configuración VPN. Esto abrirá la pantalla de configuración de la conexión VPN.
- Toca en Tipo y selecciona IKEv2.
- En el campo Descripción, ingresa un nombre corto para la conexión VPN. Puede ser cualquier cosa que desees.
- 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.
- Ingresa tu nombre de usuario y contraseña en la sección de Autenticación, luego toca Hecho.
- 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:
- Envíate un correo electrónico con el certificado CA adjunto. Guarda el certificado CA en tu carpeta de descargas.
- Descarga el cliente VPN StrongSwan desde la Play Store.
- Abre la aplicación. Toca el ícono “más” (. . .) en la esquina superior derecha y selecciona Certificados CA.
- Toque nuevamente el ícono “más” (. . .) en la esquina superior derecha. Seleccione Importar certificado.
- 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:
- En la aplicación, toque AGREGAR PERFIL VPN en la parte superior.
- Rellene el campo Servidor con el nombre de dominio de su servidor VPN o la dirección IP pública.
- Asegúrese de que IKEv2 EAP (Usuario/Contraseña) esté seleccionado como el Tipo de VPN.
- Rellene los campos Usuario y Contraseña con las credenciales que definió en el servidor.
- Desmarque Seleccionar automáticamente en la sección de certificado de CA y haga clic en Seleccionar certificado de CA.
- 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).
- 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:
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.