Creación de una VPN de acceso remoto con IPSec

Í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.

comments powered by Disqus

Relacionados

Guía básica de configuración de Nginx

En este post se recoge una guía básica del uso del servidor web Nginx a partir de un supuesto práctico.

Leer

Configuración NAT en routers Mikrotik en Openstack

En este post se configura el funcionamiento del NAT en una red creada en Openstack que usa routers Mikrotik. NAT (Network Address Translation o traducción de direcciones de red) es un mecanismo que consiste en modificar la información de direccionamiento en los paquetes IP que atraviesan un router.

Leer

Interconexión entre dos servidores Oracle

Este post constituye una breve guía con los pasos a seguir para establecer una interconexión entre dos servidores Oracle.

Leer