Introducción
Una red privada virtual, o VPN, le permite cifrar de forma segura el tráfico a medida que viaja a través de redes que no son de confianza, como las de una cafetería, una conferencia o un aeropuerto.
Internet Key Exchange v2, o IKEv2, es un protocolo que permite la tunelización IPSec directa 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 con algunas plataformas (OS X 10.11+, iOS 9.1+ y Windows 10) sin necesidad de aplicaciones adicionales y maneja los contratiempos de los clientes sin problemas.
En este tutorial, configurará un servidor VPN IKEv2 usando StrongSwan en un servidor Ubuntu 22.04. Luego aprenderá a conectarse con clientes de Windows, macOS, Ubuntu, iOS y Android.
Requisitos
Para completar este tutorial, necesitará:
- Un servidor Ubuntu 22.04 configurado siguiendo la guía de configuración inicial del servidor Ubuntu 22.04, incluido un
sudo
usuario no root y un cortafuegos.
Paso 1:Instalación de StrongSwan
Primero, instalará StrongSwan, un demonio IPSec de código abierto que configurará como su servidor VPN. También instalará el componente de infraestructura de clave pública (PKI) para que pueda crear una Autoridad de certificación (CA) para proporcionar credenciales para su infraestructura.
Comience por actualizar la memoria caché del paquete local:
- sudo apt update
Luego instale el software escribiendo:
- sudo apt install strongswan strongswan-pki libcharon-extra-plugins libcharon-extauth-plugins libstrongswan-extra-plugins
Los libcharon-extauth-plugins
adicionales El paquete se utiliza para garantizar que varios clientes puedan autenticarse en su servidor utilizando un nombre de usuario y una frase de contraseña compartidos. Los libstrongswan-extra-plugins
El paquete se incluye para que Strongswan admita suites de cifrado de curva elíptica que usan Curve25519
suite de criptografía.
Ahora que todo está instalado, continúe con la creación de sus certificados.
Paso 2:crear una autoridad de certificación
Un servidor IKEv2 requiere un certificado para identificarse ante los clientes. Para ayudar a crear el certificado requerido, strongswan-pki
el paquete viene con una utilidad llamada pki
para generar una autoridad certificadora y certificados de servidor.
Para comenzar, cree algunos directorios para almacenar todos los activos en los que trabajará. La estructura de directorios coincide con algunos de los directorios en /etc/ipsec.d
, donde eventualmente moverá todos los elementos que cree:
- mkdir -p ~/pki/{cacerts,certs,private}
Luego bloquee los permisos para que otros usuarios no puedan ver nuestros archivos privados:
- chmod 700 ~/pki
Ahora que tiene una estructura de directorios para almacenar todo, puede generar una clave raíz. Esta será una clave RSA de 4096 bits que se usará para firmar su certificado de autoridad certificadora raíz.
Ejecute estos comandos para generar la clave:
- pki --gen --type rsa --size 4096 --outform pem > ~/pki/private/ca-key.pem
A continuación, puede continuar con la creación de su entidad emisora de certificados raíz, utilizando la clave que acaba de generar para firmar el certificado raíz:
- pki --self --ca --lifetime 3650 --in ~/pki/private/ca-key.pem \
- --type rsa --dn "CN=VPN root CA" --outform pem > ~/pki/cacerts/ca-cert.pem
El --lifetime 3650
bandera se utiliza para garantizar que el certificado raíz de la autoridad de certificación será válido durante 10 años. El certificado raíz de una autoridad no suele cambiar, ya que tendría que redistribuirse a todos los servidores y clientes que dependen de él, por lo que 10 años es un valor de caducidad predeterminado seguro.
Puede cambiar el nombre distinguido (DN) valor a otra cosa si lo desea. El nombre común (campo CN) aquí es solo el indicador, por lo que no tiene que coincidir con nada en su infraestructura.
Ahora que tiene su autoridad de certificación raíz en funcionamiento, puede crear un certificado que usará 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 usando el certificado CA que acabamos de generar.
Primero, cree una clave privada para el servidor VPN con el siguiente comando:
- pki --gen --type rsa --size 4096 --outform pem > ~/pki/private/server-key.pem
Ahora, 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 Nombre alternativo del sujeto (SAN) al nombre DNS o la dirección IP de su servidor VPN:
- pki --pub --in ~/pki/private/server-key.pem --type rsa \
- | pki --issue --lifetime 1825 \
- --cacert ~/pki/cacerts/ca-cert.pem \
- --cakey ~/pki/private/ca-key.pem \
- --dn "CN=server_domain_or_IP" --san server_domain_or_IP \
- --flag serverAuth --flag ikeIntermediate --outform pem \
- > ~/pki/certs/server-cert.pem
Nota :si está utilizando una dirección IP en lugar de un nombre DNS, deberá especificar varios --san
entradas. 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=IP address" --san @IP_address --san IP_address \
El motivo de este --san @IP_address
entrada es que algunos clientes verificarán si el certificado TLS tiene una entrada de DNS y una entrada de dirección IP para un servidor cuando verifiquen su identidad.
--flag serverAuth
La opción se usa para indicar que el certificado se usará explícitamente para la autenticación del servidor, antes de que se establezca el túnel cifrado. --flag ikeIntermediate
La opción se usa para admitir clientes macOS más antiguos.
Ahora que ha generado todos los archivos TLS/SSL que necesita StrongSwan, puede mover los archivos a su lugar en /etc/ipsec.d
directorio escribiendo:
- sudo cp -r ~/pki/* /etc/ipsec.d/
En este paso, ha creado un par de certificados que se utilizará para proteger las comunicaciones entre el cliente y el servidor. También firmó los certificados con la clave de CA, por lo que el cliente podrá verificar la autenticidad del servidor VPN utilizando el certificado de CA. Con todos estos certificados listos, está listo para continuar con la configuración de SrongSwan.
Paso 4:Configuración de 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 como referencia antes de empezar desde cero:
- sudo mv /etc/ipsec.conf{,.original}
Cree y abra un nuevo archivo de configuración en blanco con su editor de texto preferido. Aquí, usarás nano
:
- sudo nano /etc/ipsec.conf
Nota :A medida que avanza en esta sección para configurar la parte del servidor de su VPN, encontrará configuraciones que se refieren a izquierda y correcto lados de una conexión. Cuando se trabaja con VPN IPSec, la izquierda lado por convención se refiere al sistema local que está configurando, en este caso el servidor. Las directivas del lado derecho en esta configuración se referirán a clientes remotos, como teléfonos y otras computadoras.
Cuando pase a configurar clientes más adelante en este tutorial, los archivos de configuración de clientes se referirán a sí mismos usando varios izquierda. directivas, y se hará referencia al servidor usando right terminología secundaria.
Primero, le diremos a StrongSwan que registre los estados de los demonios para la depuración y permita conexiones duplicadas. Agregue estas líneas al archivo:
/etc/ipsec.confconfig 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 VPN IKEv2 y que cargue automáticamente 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 borrar cualquier conexión "colgante" en caso de que el cliente se desconecte inesperadamente. Añade 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 garantiza que el servidor esté configurado para aceptar conexiones de clientes y para identificarse correctamente. Agregará cada una de estas configuraciones a /etc/ipsec.conf
archivo una vez que esté familiarizado con lo que son y por qué se usan:
left=%any
El%any
El valor asegura que el servidor utilizará la interfaz de red donde recibe las conexiones entrantes para la comunicación posterior con los clientes. Por ejemplo, si está conectando un cliente a través de una red privada, el servidor utilizará la dirección IP privada donde recibe el 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
, elleftid
La opción garantiza 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 para el servidor que configuró en el Paso 3. Sin ella, el servidor no podrá autenticarse con los clientes ni finalizar la negociación de la configuración de IKEv2.leftsendcert=always
Elalways
El valor garantiza que cualquier cliente que se conecte al servidor siempre recibirá 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
La última opción del lado "izquierdo" que agregará informa a los clientes sobre las subredes a las que se puede acceder detrás del servidor. En este caso,0.0.0.0/0
se utiliza para representar el conjunto completo 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 de manera predeterminada.
Ahora que está familiarizado con cada una de las opciones relevantes del lado "izquierdo", 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 incluye 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 ingrese 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 le dice al servidor cómo aceptar conexiones de los clientes, cómo los clientes deben autenticarse en el servidor y los rangos de direcciones IP privadas y los servidores DNS que usarán los clientes. Agregue cada una de estas configuraciones a /etc/ipsec.conf
archivo una vez que esté familiarizado con lo que son y por qué se usan:
right=%any
El%any
opción para elright
lado de la conexión le indica al servidor que acepte conexiones entrantes de cualquier cliente remoto.rightid=%any
Esta opción garantiza que el servidor no rechace 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 usa aquí para una amplia compatibilidad para admitir clientes como dispositivos Windows, macOS y Android.rightsourceip=10.10.10.0/24
Esta opción indica al servidor que asigne direcciones IP privadas a los clientes del10.10.10.0/24
especificado. conjunto de direcciones IP.rightdns=8.8.8.8,8.8.4.4
Estas direcciones IP son los solucionadores de 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 puedan acceder los clientes.rightsendcert=never
Esta opción indica al servidor que los clientes no necesitan enviar un certificado para autenticarse.
Ahora que está familiarizado con las opciones del lado "derecho" requeridas para la VPN, agregue 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 le pida al cliente las credenciales de usuario cuando se conecte:
/etc/ipsec.conf. . .
conn ikev2-vpn
. . .
eap_identity=%identity
Finalmente, agregue las siguientes líneas para admitir clientes Linux, Windows, macOS, iOS y Android. Estas líneas especifican los diversos algoritmos de intercambio de claves, hashing, autenticación y cifrado (comúnmente denominados Suites 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 suite de cifrado admitida está delimitada de las demás por una coma. Por ejemplo chacha20poly1305-sha512-curve25519-prfsha512
es una suite y aes256gcm16-sha384-prfsha384-ecp384
es otro. Los conjuntos de cifrado que se enumeran aquí se seleccionan para garantizar la más amplia gama de compatibilidad entre los clientes de Windows, macOS, iOS, Android y Linux.
El archivo de configuración completo debería verse así:
/etc/ipsec.confconfig 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 ha agregado cada línea correctamente. Si usaste nano
, hazlo presionando CTRL + X
, Y
, luego ENTER
.
Ahora que ha configurado los parámetros de VPN, puede pasar a crear una cuenta para que los usuarios puedan conectarse al servidor.
Paso 5:Configuración de la autenticación VPN
Su servidor VPN ahora está configurado para aceptar conexiones de clientes, pero aún no hay credenciales configuradas. Deberá configurar un par de cosas en un archivo de configuración especial llamado ipsec.secrets
:
- Debe decirle a StrongSwan dónde encontrar la clave privada para nuestro certificado de servidor, para que el servidor pueda autenticarse ante los clientes.
- También debe configurar una lista de usuarios que podrán conectarse a la VPN.
Abramos el archivo de secretos para editarlo:
- sudo nano /etc/ipsec.secrets
Primero, dígale a StrongSwan dónde encontrar la clave privada y cómo analizarla.
/etc/ipsec.secrets: RSA "server-key.pem"
Asegúrese de que la línea comience con :
carácter y que haya un espacio después de él para que toda la línea diga : RSA "server-key.pem"
.
Luego, definirá las credenciales de usuario. Puede inventar cualquier combinación de nombre de usuario o contraseña que desee:
/etc/ipsec.secretsyour_username : EAP "your_password"
Guarde y cierre el archivo. Ahora que ha terminado de trabajar con los parámetros de VPN, reinicie el servicio de VPN para que se aplique nuestra configuración:
- sudo systemctl restart strongswan-starter
Ahora que el servidor VPN se ha configurado por completo con las opciones del servidor y las credenciales de usuario, es hora de pasar a configurar la parte más importante:el cortafuegos.
Paso 6:configurar el firewall y el reenvío de IP del kernel
Con la configuración de StrongSwan completa, debe configurar el firewall para permitir el tráfico de VPN y reenviarlo.
Si siguió el tutorial de configuración inicial del servidor de requisitos previos, debe tener habilitado un firewall UFW. Si aún no tiene configurado UFW, debe comenzar agregando una regla para permitir conexiones SSH a través del firewall para que su sesión actual no se cierre cuando habilite UFW:
- sudo ufw allow OpenSSH
Luego habilite el firewall escribiendo:
- sudo ufw enable
Luego, agregue una regla para permitir el tráfico UDP a los puertos IPSec estándar, 500
y 4500
:
- sudo ufw allow 500,4500/udp
A continuación, abrirá uno de los archivos de configuración de UFW para agregar algunas políticas de bajo nivel para enrutar y reenviar paquetes IPSec. Sin embargo, antes de hacer esto, debe encontrar qué interfaz de red en nuestro servidor se usa para el acceso a Internet. Encuentre esta interfaz consultando el dispositivo asociado con la ruta predeterminada:
- ip route show default
Su interfaz pública debe seguir la palabra "dev". Por ejemplo, este resultado muestra la interfaz llamada eth0
, que se destaca en el siguiente ejemplo:
Outputdefault via your_server_ip dev eth0 proto static
Cuando tenga su interfaz de red pública, abra /etc/ufw/before.rules
archivo en su editor de texto. Las reglas de este archivo se agregan al cortafuegos antes que el 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 e Internet.
- sudo nano /etc/ufw/before.rules
Cerca de la parte superior del archivo (antes del *filter
línea), agregue el siguiente bloque de configuración. Cambiar cada instancia de eth0
en la configuración anterior para que coincida con el nombre de la interfaz que encontró con ip route
. El *nat
Las líneas crean reglas para que el cortafuegos pueda enrutar y manipular correctamente el tráfico entre los clientes VPN e Internet. El *mangle
line ajusta el tamaño máximo del segmento de paquete para evitar posibles problemas 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 del *filter
y líneas de definición de cadena, agregue 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 le indican al cortafuegos 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 cuando atraviesan redes que no son de confianza.
Cuando haya terminado, abra y cierre el archivo una vez que haya verificado que ha agregado cada línea correctamente. Si usaste nano
, hazlo presionando CTRL + X
, Y
, luego ENTER
.
Antes de reiniciar el firewall, también debe cambiar algunos parámetros del núcleo de la red para permitir el enrutamiento de una interfaz a otra. El archivo que controla estas configuraciones se llama /etc/ufw/sysctl.conf
. Deberá configurar algunas cosas en el archivo.
Primero se debe activar el reenvío de paquetes IPv4 para que el tráfico pueda moverse entre la VPN y las interfaces de red públicas en el servidor. A continuación, deshabilitará el descubrimiento de Path MTU para evitar problemas de fragmentación de paquetes. Finalmente, no aceptaremos redireccionamientos ICMP ni enviaremos redireccionamientos ICMP para evitar ataques de intermediarios.
Abra el archivo de configuración de parámetros del kernel de UFW usando nano
o su editor de texto preferido:
- sudo nano /etc/ufw/sysctl.conf
Ahora agregue lo siguiente net/ipv4/ip_forward=1
configuración al final del archivo para habilitar el reenvío de paquetes entre interfaces:
. . .
net/ipv4/ip_forward=1
A continuación, bloquee 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, desactive el descubrimiento de Path MTU agregando esta línea al final del archivo:
/etc/ufw/sysctl.conf. . .
net/ipv4/ip_no_pmtu_disc=1
Guarde el archivo cuando haya terminado. Ahora puede habilitar todos sus cambios al deshabilitar y volver a habilitar el firewall, ya que UFW aplica esta configuración cada vez que se reinicia:
- sudo ufw disable
- sudo ufw enable
Se le pedirá que confirme el proceso. Escriba Y
para habilitar UFW nuevamente con la nueva configuración.
Paso 7:Probar la conexión VPN en Windows, macOS, Ubuntu, iOS y Android
Ahora que tiene todo configurado, es hora de probarlo. Primero, deberá copiar el certificado de CA que creó e instalarlo en los dispositivos de su cliente que se conectarán a la VPN. La forma más sencilla de hacerlo es iniciar sesión en su servidor y generar el contenido del archivo del certificado:
- cat /etc/ipsec.d/cacerts/ca-cert.pem
Verá un resultado similar a este:
Output-----BEGIN CERTIFICATE-----
MIIFNDCCAxygAwIBAgIIHCsidG5mXzgwDQYJKoZIhvcNAQEMBQAwODELMAkGA1UE
. . .
H2YUdz8XNHrJHvMQKWFpi0rlEcMs+MSXPFWE3Q7UbaZJ/h8wpSldSUbQRUlphExJ
dJ4PX+MUJO/vjG1/ie6Kh25xbBAc3qNq8siiJZDwrg6vjEK7eiZ1rA==
-----END CERTIFICATE-----
Copie este resultado en su computadora, incluido el -----BEGIN CERTIFICATE-----
y -----END CERTIFICATE-----
y guárdelo en un archivo con un nombre reconocible, como ca-cert.pem
. Asegúrese de que el archivo que cree tenga el .pem
extensión.
Alternativamente, use SFTP para transferir el archivo a su computadora.
Una vez que tenga el ca-cert.pem
archivo descargado a su computadora, puede configurar la conexión a la VPN.
Conectando desde Windows
Hay varias 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 se pueden programar y modificar para adaptarse a su configuración de VPN.
Configurar Windows con Herramientas Gráficas
Primero, importe el certificado raíz siguiendo estos pasos:
-
Presione
WINDOWS+R
para abrir Ejecutar e ingresemmc.exe
para iniciar la Consola de administración de Windows. -
Desde el Archivo menú, vaya a Agregar o quitar complemento , seleccione Certificados de la lista de complementos disponibles y haga clic en Agregar .
-
Queremos que la VPN funcione con cualquier usuario, así que seleccione Cuenta de computadora y haga clic en Siguiente .
-
Estamos configurando cosas en la computadora local, así que seleccione Computadora local y luego haz clic en Finalizar .
-
Bajo la raíz de la consola expanda el nodo Certificados (equipo local) entrada, expanda Autoridades de certificación raíz de confianza y, a continuación, seleccione Certificados entrada:
-
Desde la Acción menú, seleccione Todas las tareas y haz clic en Importar para mostrar el asistente de importación de certificados. Haga clic en Siguiente para pasar de la introducción.
-
En el Archivo para importar pantalla, 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
ca-cert.pem
archivo que ha guardado. Luego haga clic en Siguiente . -
Asegúrese de que el almacén de certificados está establecido en Autoridades de certificación raíz de confianza y haga clic en Siguiente .
-
Haga clic en Finalizar para importar el certificado.
Luego configure la VPN con estos pasos:
- Ejecutar Panel de control , luego navegue al Centro de redes y recursos compartidos .
- Haga clic en Configurar una nueva conexión o red y luego seleccione Conectarse a un lugar de trabajo .
- Seleccione Usar mi conexión a Internet (VPN) .
- Ingrese los detalles del servidor VPN. Introduzca el nombre de dominio o la dirección IP del servidor en la dirección de Internet campo, luego complete Nombre de destino con algo que describa su conexión VPN. Luego haz clic en Listo .
Configuración de Windows usando PowerShell
Para importar el certificado de CA raíz mediante PowerShell, primero abra un indicador de PowerShell con privilegios de administrador. Para ello, haga clic con el botón derecho en el icono del menú Inicio y seleccione Windows PowerShell (Admin)
. También puede abrir un símbolo del sistema como administrador y escribir powershell
.
A continuación, importaremos el certificado utilizando Import-Certificate
Cmdlet de PowerShell. En el siguiente comando, el primer -CertStoreLocation
El argumento garantizará que el certificado se importe a las autoridades de certificación raíz de confianza de la computadora. store para que todos los programas y usuarios puedan verificar el certificado del servidor VPN. El -FilePath
El argumento debe apuntar a la ubicación donde 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ó.
- Import-Certificate `
- -CertStoreLocation cert:\LocalMachine\Root\ `
- -FilePath C:\users\sammy\Documents\ca-cert.pem
El comando generará algo como lo siguiente:
Output PSParentPath: Microsoft.PowerShell.Security\Certificate::LocalMachine\Root
Thumbprint Subject
---------- -------
DB00813B4087E9367861E8463A60CEA0ADC5F002 CN=VPN root CA
Ahora, para configurar la VPN usando PowerShell, ejecute el siguiente comando. Sustituya el nombre DNS o la dirección IP de su servidor en -ServerAddress
línea. Las diversas banderas garantizarán que Windows esté correctamente configurado con los parámetros de seguridad apropiados que coincidan con las opciones que configuró en /etc/ipsec.conf
.
- Add-VpnConnection -Name "VPN Connection" `
- -ServerAddress "server_domain_or_IP" `
- -TunnelType "IKEv2" `
- -AuthenticationMethod "EAP" `
- -EncryptionLevel "Maximum" `
- -RememberCredential `
Si el comando tiene éxito, no habrá ninguna salida. Para confirmar que la VPN está configurada correctamente, use Get-VPNConnection
cmdlet:
- Get-VpnConnection -Name "VPN Connection"
Recibirá un resultado como el 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
De forma predeterminada, Windows elige algoritmos más antiguos y lentos. Ejecute Set-VpnConnectionIPsecConfiguration
cmdlet to upgrade the encryption parameters that Windows will use for the IKEv2 key exchange, and to encrypt packets:
- Set-VpnConnectionIPsecConfiguration -Name "VPN Connection" `
- -AuthenticationTransformConstants GCMAES256 `
- -CipherTransformConstants GCMAES256 `
- -DHGroup ECP384 `
- -IntegrityCheckMethod SHA384 `
- -PfsGroup ECP384 `
- -EncryptionMethod GCMAES256
Nota :If you would like to delete the VPN connection and reconfigure it with different options, you can run the Remove-VpnConnection
cmdlet.
- Remove-VpnConnection -Name "VPN Connection" -Force
The -Force
flag will skip prompting you to confirm the removal. You must be disconnected from the VPN if you attempt to remove it using this command.
Connecting to the VPN
Once you have the certificate imported and the VPN configured using either method, your new VPN connection will be visible under the list of networks. Select the VPN and click Connect . You’ll be prompted for your username and password. Type them in, click OK , and you’ll be connected.
Connecting from macOS
Follow these steps to import the certificate:
- Double-click the certificate file. Keychain Access will pop up with a dialog that says “Keychain Access is trying to modify the system keychain. Enter your password to allow this.”
- Enter your password, then click on Modify Keychain
- Double-click the newly imported VPN certificate. This brings up a small properties window where you can specify the trust levels. Set IP Security (IPSec) to Always Trust and you’ll be prompted for your password again. This setting saves automatically after entering the password.
Now that the certificate is imported and trusted, configure the VPN connection with these steps:
- Go to System Preferences and choose Network .
- Click on the small “plus” button on the lower-left of the list of networks.
- In the popup that appears, set Interface to VPN , set the VPN Type to IKEv2 , and give the connection a name.
- In the Server and Remote ID field, enter the server’s domain name or IP address. Leave the Local ID blank.
- Click on Authentication Settings , select Username , and enter your username and password you configured for your VPN user. Luego haga clic en Aceptar .
Finally, click on Connect to connect to the VPN. You should now be connected to the VPN.
Connecting from Ubuntu
To connect from an Ubuntu machine, you can set up and manage StrongSwan as a service or use a one-off command every time you wish to connect. Instructions are provided for both.
Managing StrongSwan as a Service
To manage StrongSwan as a service, you will need to perform the following configuration steps.
First, update your local package cache using apt
- sudo apt update
Next, install StrongSwan and the required plugins for authentication:
- sudo apt install strongswan libcharon-extra-plugins
Now you’ll need a copy of the CA certificate in the /etc/ipsec.d/cacerts
directory so that your client can verify the server’s identity. Run the following command to copy the ca-cert.pem
file into place:
- sudo cp /tmp/ca-cert.pem /etc/ipsec.d/cacerts
To ensure the VPN only runs on demand, use systemctl
to disable StrongSwan from running automatically:
- sudo systemctl disable --now strongswan-starter
Next configure the username and password that you will use to authenticate to the VPN server. Edit /etc/ipsec.secrets
using nano or your preferred editor:
- sudo nano /etc/ipsec.secrets
Add the following line, editing the highlighted username and password values to match the ones that you configured on the server:
/etc/ipsec.secretsyour_username : EAP "your_password"
Finally, edit the /etc/ipsec.conf
file to configure your client to match the server’s configuration:
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
To connect to the VPN, type:
- sudo systemctl start strongswan-starter
To disconnect again, type:
- sudo systemctl stop strongswan-starter
Using the charon-cmd
Client for One-Off Connections
To manage StrongSwan as a service, you will need to perform the following configuration steps.
First, update your local package cache using apt
- sudo apt update
Next, install StrongSwan and the required plugins for authentication:
- sudo apt install strongswan libcharon-extra-plugins
Now you’ll need a copy of the CA certificate in the /etc/ipsec.d/cacerts
directory so that your client can verify the server’s identity. Run the following command to copy the ca-cert.pem
file into place:
- sudo cp /tmp/ca-cert.pem /etc/ipsec.d/cacerts
At this point you can connect to the VPN server with charon-cmd
using the server’s CA certificate, the VPN server’s IP address, and the username you configured.
Run the following command whenever you want to connect to the VPN:
- sudo charon-cmd --cert ca-cert.pem --host vpn_domain_or_IP --identity your_username
When prompted, provide the VPN user’s password and you will be connected to the VPN. To disconnect, press CTRL+C
in the terminal and wait for the connection to close.
Connecting from iOS
To configure the VPN connection on an iOS device, follow these steps:
- Send yourself an email with the root certificate attached.
- Open the email on your iOS device and tap on the attached certificate file, then tap Install and enter your passcode. Once it installs, tap Done .
- Go to Settings , General , VPN and tap Add VPN Configuration . This will bring up the VPN connection configuration screen.
- Tap on Type and select IKEv2 .
- In the Description field, enter a short name for the VPN connection. This could be anything you like.
- In the Server and Remote ID field, enter the server’s domain name or IP address. The Local ID field can be left blank.
- Enter your username and password in the Authentication section, then tap Done .
- Select the VPN connection that you just created, tap the switch on the top of the page, and you’ll be connected.
Connecting from Android
Follow these steps to import the certificate:
- Send yourself an email with the CA certificate attached. Save the CA certificate to your downloads folder.
- Download the StrongSwan VPN client from the Play Store.
- Open the app. Tap the “more” icon (. . . ) in the upper-right corner and select CA certificates .
- Tap the “more” icon (. . . ) in the upper-right corner again. Select Import certificate .
- Browse to the CA certificate file in your downloads folder and select it to import it into the app.
Now that the certificate is imported into the StrongSwan app, you can configure the VPN connection with these steps:
- In the app, tap ADD VPN PROFILE at the top.
- Fill out the Server with your VPN server’s domain name or public IP address.
- Make sure IKEv2 EAP (Username/Password) is selected as the VPN Type.
- Fill out the Username and Password with the credentials you defined on the server.
- Deselect Select automatically in the CA certificate section and click Select CA certificate .
- Tap the IMPORTED tab at the top of the screen and choose the CA you imported (it will be named “VPN root CA” if you didn’t change the “DN” earlier).
- If you’d like, fill out Profile name (optional) with a more descriptive name.
When you wish to connect to the VPN, click on the profile you just created in the StrongSwan application.
Troubleshooting Connections
If you are unable to import the certificate, ensure the file has the .pem
extension, and not .pem.txt
.
If you’re unable to connect to the VPN, check the server name or IP address you used. The server’s domain name or IP address must match what you’ve configured as the common name (CN) while creating the certificate. If they don’t match, the VPN connection won’t work. For example, if you set up a certificate with the CN of vpn.example.com
, you must use vpn.example.com
when you enter the VPN server details. Double-check the command you used to generate the certificate, and the values you used when creating your VPN connection.
Finally, double-check the VPN configuration to ensure the leftid
value is configured with the @
symbol if you’re using a domain name:
leftid=@vpn.example.com
If you’re using an IP address, ensure that the @
symbol is omitted. Also make sure that when you generated the server-cert.pem
file that you included both --san @IP_address
and --san IP_address
flags.
Conclusión
In this tutorial, you’ve built a VPN server that uses the IKEv2 protocol. You learned about the directives that control the left
and right
sides of a connection on both server and clients. You also configured a Windows, macOS, iOS, Android, or Linux client to connect to the VPN.
To add or remove users, skip to Step 5 again. Each line in /etc/ipsec.secrets
is for one user, so adding or removing users, or changing passwords just requires editing the file.
Now you can be assured that your online activities will remain secure wherever you go and with any device that you use to access the internet.