Creación de una VPN de acceso remoto con IPSec
- Javi Huete
- Seguridad
- January 29, 2025
Índice
Para la configuración de la VPN de acceso remoto con IPSec se usa una aplicación por software, en este caso, StrongSwan. El escenario cuenta con tres máquinas: un cliente, un servidor y un equipo en la red interna del servidor al que el cliente debe acceder.

Instalación de StrongSwan
Para instalar StrongSwan en Debian se puede usar el gestor de paquetes apt
porque esta distribución cuenta con un paquete en sus repositorios oficiales que instala la aplicación.
sudo apt update
sudo apt install strongwan
La instalación de este paquete crea en el sistema dos ficheros importantes a través de los cuales se puede configurar la VPN: el fichero /etc/ipsec.conf, para configurar la VPN; y el fichero /etc/ipsec.secret para configurar las credenciales de los diferentes equipos y usuarios que tienen permiso para usar la red.
Configuración del servidor StrongSwan
Para configurar el servidor VPN con StrongSwan se usa el fichero /etc/ipsec.conf. Este fichero cuenta con una primera parte, en la que se indican los elementos de la configuración básica. A continuación, se incluye una conexión llamada %default
, que recoge los parámetros que se aplican, por defecto, al resto de conexiones definidas en el fichero a continuación. Estos parámetros indican al servidor, entre otras cosas, el tipo y versión del mecanismo de autentificación que se usa para las conexiones VPN.
Después, en este fichero se define la conexión que crea la VPN. En este caso se han indicado, a través de los diferentes parámetros disponibles para usar en este fichero la dirección IP del servidor, la subred privada del servidor, la dirección IP del cliente y, por último, el parámetro auto
, que hace que la conexión a través de la VPN se inicie automáticamente al arrancar StrongSwan.
# Servidor
# ipsec.conf - strongSwan IPsec configuration file
# basic configuration
config setup
charondebug="ike 2, knl 2, cfg 2, net 2, esp 2, dmn 2, mgr 2"
conn %default
ikelifetime=1h
keylife=1h
rekeymargin=5m
keyingtries=3
keyexchange=ikev2
authby=secret
ike=aes256-sha1-modp1024
esp=aes256-sha1
# Add connections here.
# Sample VPN connections
conn roadwarrior
left=192.168.122.148
leftsubnet=10.0.0.0/24
right=192.168.122.133
rightsubnet=10.0.10.0/24
auto=start
La herramienta StrongSwan permite usar varios mecanismos de autentificación diferentes para la creación de VPN como, por ejemplo, RSA (que usa un par de claves como OpenVPN y WireGuard), PSK (que usa una clave simétrica) o EAP (que usa un nombre de usuario y contraseña). En este caso, se usa el mecanismo PSK, que únicamente requiere generar una clave e intercambiarla entre ambos extremos del túnel para asegurar la conexión a través de la VPN.
Hay una gran cantidad de herramientas que permiten generar claves aleatorias para autentificar equipos o usuarios usando PSK. Para este ejemplo, se usa la herramienta /dev/urandom de Debian para generar una cadena de caracteres aleatorios de una longitud determinada, por ejemplo 30 caracteres.
head -c 30 /dev/urandom | base64 > psk
Este comando genera un fichero llamado psk que contiene una clave de 30 caracteres aleatorios. Para indicar a StrongSwan la clave simétrica que usa el servidor, se rellena esta información en el fichero /etc/ipsec.secrets. El formato en el que se debe añadir la información a este fichero es primero la IP de la máquina en la que se configura la VPN, después el carácter dos puntos ( : ), a cotninuación el método de autentificación (PSK) y, por último, la clave simétrica como cadena de caracteres.
192.168.122.148 : PSK "e522lXLfFbQz1ftQoG3HOiLhTnftfZUA7GI7ULnz"
Si el método de autentificación es otro, el formato del fichero también varía. Por ejemplo, para la autentificación con un par de claves la línea comienza con el carácter dos puntos ( : ) y, a continuación, el método de autentificación (RSA) y el nombre del fichero con la clave pública. Si la autentificación usa un nombre de usuario y una contraseña, en cambio, la línea del fichero comienza con el nombre de usuario, el caráctar dos puntos ( : ) y después, el método de autentificación (EAP) y la contraseña en texto. En este fichero se pueden añadir varias líneas para la autentificación de varios clientes y cada uno de ellos puede usar un método diferente.
Tras haber configurado el servidor, se inicia el servicio.
ipsec start
Configuración del cliente StrongSwan
La configuración del cliente se realiza en el mismo fichero que se emplea para el servidor. Este fichero incluye los mismos parámetros, teniendo siempre en cuenta indicar correctamente los direccionamientos de los diferentes equipos y redes. El parámetro left
hace siempre referencia al equipo en el que se edita el fichero de configuración mientras que el parámetro right
se refiere al equipo que se encuentre en el otro extremo del túnel.
# Cliente
# ipsec.conf - strongSwan IPsec configuration file
# basic configuration
config setup
charondebug="ike 2, knl 2, cfg 2, net 2, esp 2, dmn 2, mgr 2"
conn %default
ikelifetime=1h
keylife=1h
rekeymargin=5m
keyingtries=3
keyexchange=ikev2
authby=secret
ike=aes256-sha1-modp1024
esp=aes256-sha1
# Add connections here.
# Sample VPN connections
conn roadwarrior
left=192.168.122.133
leftsubnet=10.0.10.0/24
right=192.168.122.148
rightsubnet=10.0.0.0/24
auto=start
Como se está usando el método de autentificación PSK, para garantizar la identidad del cliente, éste debe conocer la clave simétrica que se ha generado previamente en el servidor. Esta clave se indica en el fichero /etc/ipsec.secrets.
192.168.122.148 : PSK "e522lXLfFbQz1ftQoG3HOiLhTnftfZUA7GI7ULnz"
Tras haber configurado el cliente, se inicia el servicio.
ipsec start
Demostración del funcionamiento de la VPN con StrongSwan
Cuando tanto en el cliente como en el servidor se ha iniciado el servicio, se establece entre ellos la conexión segura a través de la VPN. El estado de la conexión se puede verificar usando el comando ipsec status
tanto desde el servidor:
Security Associations (1 up, 0 connecting):
roadwarrior[2]: ESTABLISHED 13 minutes ago, 192.168.122.148[192.168.122.148]...192.168.12
2.133[192.168.122.133]
roadwarrior{2}: INSTALLED, TUNNEL, reqid 1, ESP SPIs: c90c45eb_i ccc2b2e0_o
roadwarrior{2}: 10.0.0.0/24 === 10.0.10.0/24
Como desde el cliente:
Security Associations (1 up, 0 connecting):
roadwarrior[1]: ESTABLISHED 12 minutes ago, 192.168.122.133[192.168.122.133]...192.1
68.122.148[192.168.122.148]
roadwarrior{2}: INSTALLED, TUNNEL, reqid 1, ESP SPIs: ccc2b2e0_i c90c45eb_o
roadwarrior{2}: 10.0.10.0/24 === 10.0.0.0/24
La salida de este comando lista las conexiones activas a través de VPN de cada equipo. Como se puede comprobar, en cada caso se ha establecido una conexión segura entre la IP propia y la IP del equipo en el otro extremo de la VPN. Además, en ambos equipos aparece que se ha instalado el túnel que permite al cliente VPN acceder a las máquinas de la red privada del servidor VPN.
Así, el cliente puede tener acceso a las máquinas de la red privada del servidor.
root@debian:/home/debian# ping 10.0.0.2
PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
64 bytes from 10.0.0.2: icmp_seq=1 ttl=63 time=2.46 ms
64 bytes from 10.0.0.2: icmp_seq=2 ttl=63 time=2.61 ms
64 bytes from 10.0.0.2: icmp_seq=3 ttl=63 time=0.875 ms
64 bytes from 10.0.0.2: icmp_seq=4 ttl=63 time=1.77 ms
^C
--- 10.0.0.2 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3027ms
rtt min/avg/max/mdev = 0.875/1.928/2.611/0.685 ms
En este caso, no se puede demostrar el funcionamiento de la VPN usando el comando traceroute
como en otras ocasiones porque StrongSwan no crea interfaces virtuales con una IP diferente. Sin embargo ,si se captura el tráfico de este ping entre el cliente y el servidor, el contenido de las tramas que circulan por la red no se puede identificar porque está cifrado, es decir, se demuestra que el tráfico está circulando a través de la VPN.

Una diferencia fundamental, por tanto, entre la VPN creada con StrongSwan usando IPSec y las generadas con OpenVPN y WireGuard es que, en este caso, la aplicación no genera unas interfaces virtuales a través de las que se enruta el tráfico de la VPN, sino que usa las propias IP físicas públicas tanto del cliente como del servidor para enrutar a través de ellas el tráfico de la VPN. Sin embargo, cuando se hace una captura de tráfico, se puede comprobar cómo estos paquetes se envían encapsulados usando el protocolo IPSec, por lo que el tráfico a través de esta red virtual es seguro y cifrado sin necesidad de usar interfaces y rutas virtuales como en los otros casos.