Justin Ellingwood y Namo escribieron una versión anterior de este tutorial.
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.
Para completar este tutorial, necesitará lo siguiente:
sudo
non-root y un firewall.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:
- sudo apt update
A continuación, instale el software escribiendo lo siguiente:
- 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.
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.
- mkdir -p ~/pki/{cacerts,certs,private}
A continuación, bloquearemos los permisos para que otros usuarios no puedan ver nuestros archivos privados:
- 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:
- 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:
- 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 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.
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:
- 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:
- 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 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:
- 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.
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:
- 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
:
- 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:
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:
. . .
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:
. . .
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:
. . .
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:
. . . leftid=@vpn.example.com
. . .
Si el servidor se identifica por su dirección IP, simplemente introdúzcala:
. . .
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
:
. . .
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:
. . .
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:
. . .
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:
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.
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
:
Abramos el archivos de secretos para editarlo:
- sudo nano /etc/ipsec.secrets
Primero, le indicaremos a StrongSwan dónde encontrar nuestra clave privada:
: 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:
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:
- 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.
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:
- sudo ufw allow OpenSSH
A continuación, habilite el firewall escribiendo lo siguiente:
- sudo ufw enable
A continuación, agregue una regla para permitir tráfico UDP a los puertos de IPSec estándar 500
y 4500
:
- 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:
- 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:
Outputdefault 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.
- 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.
*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:
. . .
*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:
- 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:
. . .
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:
. . .
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:
. . .
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:
- sudo ufw disable
- sudo ufw enable
Se le solicitará confirmar el proceso. Escriba Y
para activar UFW nuevamente con las configuraciones nuevas.
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:
- 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.
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.
Primero, importe el certificado de root siguiendo estos pasos:
Pulse WINDOWS+R
para abrir el diálogo Ejecutar e ingrese mmc.exe
para iniciar la Consola de administración de Windows.
En el menú Archivo, diríjase a Agregar o quitar complemento, seleccione Certificados en la lista de complementos disponibles y haga clic en Agregar.
Nuestro propósito es que la VPN funcione con cualquier usuario. Por ello, debe seleccionar** Cuenta de equipo** y hacer clic en Siguiente.
Realizaremos algunas configuraciones en la computadora local. Seleccione Equipo local y luego haga clic en Finalizar.
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:
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.
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.
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************.
Haga clic en Finalizar para importar el certificado.
Luego, configure la VPN siguiendo estos pasos:
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ó.
- Import-Certificate `
- -CertStoreLocation cert:\LocalMachine\Root\ `
- -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
.
- Add-VpnConnection -Name "VPN Connection" `
- -ServerAddress "server_domain_or_IP" `
- -TunnelType "IKEv2" `
- -AuthenticationMethod "EAP" `
- -EncryptionLevel "Maximum" `
- -RememberCredential `
Si el comando es exitoso, no habrá ningún resultado. Para confirmar que la VPN esté configurada correctamente, utilice el cmdlet Get-VPNConnection
:
- Get-VpnConnection -Name "VPN Connection"
Verá 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
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:
- Set-VpnConnectionIPsecConfiguration -Name "VPN Connection" `
- -AuthenticationTransformConstants GCMAES256 `
- -CipherTransformConstants GCMAES256 `
- -DHGroup ECP384 `
- -IntegrityCheckMethod SHA384 `
- -PfsGroup ECP384 `
- -EncryptionMethod GCMAES256
Nota: Si desea eliminar la conexión VPN y volver a configurarla con diferentes opciones, puede ejecutar el cmdlet Remove-VpnConnection
.
- 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.
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.
Siga estos pasos para importar el certificado:
Ahora que el certificado se importó y es confiable, configure la conexión VPN con estos pasos:
Por último, haga clic en Conectar para conectarse a la VPN. Con esto, debería establecer la conexión con la VPN.
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.
Para administrar StrongSwan como servicio, deberá realizar los siguientes pasos de configuración.
Primero, actualice su caché de paquetes local con apt
- sudo apt update
A continuación, instale StrongSwan y los complementos necesarios para la autenticación:
- 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:
- 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:
- 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:
- 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:
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:
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:
- sudo systemctl start strongswan-starter
Para desconectarse nuevamente, escriba lo siguiente:
- sudo systemctl stop strongswan-starter
charon-cmd
para conexiones únicasPara administrar StrongSwan como servicio, deberá realizar los siguientes pasos de configuración.
Primero, actualice su caché de paquetes local con apt
- sudo apt update
A continuación, instale StrongSwan y los complementos necesarios para la autenticación:
- 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:
- 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:
- 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.
Para configurar la conexión de VPN en un dispositivo iOS, siga estos pasos:
Siga estos pasos para importar el certificado:
Ahora que se importó el certificado a la aplicación StrongSwan, puede configurar la conexión de VPN con los siguientes pasos:
Cuando desee conectarse a la VPN, haga clic en el perfil que acaba de crear en la aplicación StrongSwan.
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:
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
.
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.
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!