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.
IKEv2, o Internet Key Exchange v2, es un protocolo que permite la implementación directa de túneles de IPSec entre el servidor y los clientes. 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.
A través de este tutorial, configurará un servidor VPN IKEv2 con ayuda de StrongSwan en un servidor Ubuntu 18.04 y se conectará a este desde clientes de Windows, macOS, Ubuntu, iOS y Android.
Para completar este tutorial, necesitará lo siguiente:
sudo
no root y un firewall.Primero, instalaremos StrongSwan, un demonio IPSec de código abierto que configuraremos para que funcione como nuestro servidor VPN. De igual modo, instalaremos el componente de infraestructura de clave pública que nos permita crear una autoridad de certificación para proporcionar las credenciales destinadas a nuestra infraestructura.
Actualice la caché del paquete local e instale el software escribiendo lo siguiente:
- sudo apt update
- sudo apt install strongswan strongswan-pki
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 autoridad de certificación y certificados de servidor. 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
, a donde moveremos todos los elementos que creemos en algún momento. Bloquearemos los permisos para que otros usuarios no puedan ver nuestros archivos privados:
- mkdir -p ~/pki/{cacerts,certs,private}
- 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:
- ipsec pki --gen --type rsa --size 4096 --outform pem > ~/pki/private/ca-key.pem
Ahora que contamos con una clave, podemos crear nuestra autoridad de certificación de root usando la clave para firmar nuestro certificado de root:
- ipsec 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
Puede cambiar los valores de *nombre distinguido *(DN) por otra cosa si lo desea. El nombre común aquí es únicamente el indicador, de modo que no tiene que coincidir con nada en 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:
- ipsec 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:
- ipsec pki --pub --in ~/pki/private/server-key.pem --type rsa \
- | ipsec 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
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 podrían usarse 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. Ahora que tenemos listos todos los certificados listos, configuraremos 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 vacío escribiendo lo siguiente:
- sudo nano /etc/ipsec.conf
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
Luego, configuraremos los parámetros IPSec del lado (izquierdo) del servidor. Agregue esto al archivo:
. . .
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
), solo incluya 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=203.0.113.7
A continuación, podemos configurar los parámetros de IPSec del lado (derecho) del cliente, como los rangos de direcciones IP privadas y los servidores DNS que se usarán:
. . .
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
Por último, indicaremos a StrongSwan que solicite a los clientes las credenciales de los usuarios cuando se conecten:
. . .
conn ikev2-vpn
. . .
eap_identity=%identity
El archivo de configuración 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
Guarde y cierre el archivo una vez que haya verificado que realizó la configuración como se indica.
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
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.
Una vez completada la configuración de StrongSwan, debemos configurar el firewall para reenviar y permitir el tráfico de VPN.
Si siguió el tutorial de los requisitos previos, debería tener habilitado un firewall UFW muy básico. Si aún no tiene configurado UFW, puede crear una configuración referencial y habilitarla escribiendo lo siguiente:
- sudo ufw allow OpenSSH
- sudo ufw enable
Ahora, agregue una regla para permitir el tráfico UDP a los puertos IPSec estándares 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. Antes de hacerlo, debemos determinar la interfaz de red de nuestro servidor que se usa para acceder a Internet. Podemos encontrarlo consultando la interfaz asociada a la ruta predeterminada:
- ip route | grep 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 203.0.113.7 dev eth0 proto static
Cuando tenga una interfaz de red pública, abra el archivo /etc/ufw/before.rules
en su editor de texto:
- 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:
*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]
. . .
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 problemas potenciales con determinados clientes de VPN.
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 termine, guarde y cierre el archivo.
Antes de reiniciar el firewall, cambiaremos algunos parámetros de kernel de red para permitir el enrutamiento de una interfaz a otra. Abra el archivo de configuración de parámetros de kernel de UFW.
- sudo nano /etc/ufw/sysctl.conf
Tendremos que realizar algunas configuraciones aquí:
Los cambios que debe hacer en el archivo están resaltados en el siguiente código:
. . .
# Enable forwarding
# Uncomment the following line
net/ipv4/ip_forward=1
. . .
# Do not accept ICMP redirects (prevent MITM attacks)
# Ensure the following line is set
net/ipv4/conf/all/accept_redirects=0
# Do not send ICMP redirects (we are not a router)
# Add the following lines
net/ipv4/conf/all/send_redirects=0
net/ipv4/ip_no_pmtu_disc=1
Guarde el archivo cuando termine. UFW aplicará estos cambios la próxima vez que se inicie.
Ahora podemos activar todos nuestros cambios desactivando y reactivando el firewall:
- 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
Verá un resultado similar a este:
Output-----BEGIN CERTIFICATE-----
MIIFQjCCAyqgAwIBAgIIFkQGvkH4ej0wDQYJKoZIhvcNAQEMBQAwPzELMAkGA1UE
. . .
EwbVLOXcNduWK2TPbk/+82GRMtjftran6hKbpKGghBVDPVFGFT6Z0OfubpkQ9RsQ
BayqOb/Q
-----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.
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… y seleccione el archivo de certificado 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:
Se podrá ver su nueva conexión de VPN 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 es importante y confiable, configure la conexión de VPN siguiendo 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.
sudo apt update
.libcharon sudo apt install
./etc/ipsec.d/cacerts
: sudo cp /tmp/ca-cert.pem /etc/ipsec.d/cacerts
.sudo systemctl disable --now strongswan
./etc/ipsec.secrets
: your_username: EAP “your_password”<^>
./etc/ipsec.conf
para definir su configuración.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
Para desconectarse nuevamente, escriba lo siguiente:
- sudo systemctl stop strongswan
sudo apt update
.charon-cmd
y el software relacionado: sudo apt install charon-cmd
.cd /path/to/ca-cert.pem
.charon-cmd
usando el certificado de CA del servidor, la dirección IP del servidor de VPN y el usuario que configuró: sudo charon-cmd --cert ca-cert.pem --host vpn_domain_or_IP --identity your_username
.Con esto, debería establecer la conexión con la VPN. Para desconectarse, pulse CTRL+C
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á. Si configura un certificado con el CN de vpn.example.com
, debe usar vpn.example.com
cuando ingrese la información del servidor de 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 @
.
A través de este tutorial, creó un servidor de VPN que usa el protocolo IKEv2. Ahora tendrá la seguridad de que sus actividades en línea permanecerán protegidas sin importar a dónde se dirija.
Para agregar o eliminar usuarios, simplemente repase el paso 5. Cada línea es para un usuario. Esto permite agregar o eliminar usuarios con solo editar el archivo.
A partir de este punto, es posible que desee configurar un analizador de archivos de registro, ya que strongSwan vuelca sus registros en syslog. Encontrará más información sobre cómo realizar esta configuración en el tutorial Cómo instalar y usar Logwatch Log Analyzer and Reporter en un VPS.
Puede interesarle también esta guía de EFF sobre privacidad en línea.
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!
Sign up for Infrastructure as a Newsletter.
Working on improving health and education, reducing inequality, and spurring economic growth? We'd like to help.
Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.