El protocolo de red L2TP (Layer 2 Tunneling Protocol) es un protocolo de tunneling utilizado para soportar redes privadas virtuales (VPNs) o como parte de los servicios de red de los proveedores de Internet (ISPs). No provee confidencialidad ni cifrado por sí mismo, sino que se basa en otro protocolo de encriptación que pase a través del túnel. Este artículo explica cómo configurar un cliente de VPN L2TP/IPsec utilizando strongSwan+xl2tpd para acceder a una red privada virtual desde un sistema Debian y derivados.

strongSwan es una solución de VPN open-source basada en IPsec multiplataforma. Funciona en Linux, FreeBSD, IOs y Windows. Además tiene un cliente para Android. Implementa los protocolos de intercambio de claves IKEv1 e IKEv2.



Este artículo explica detalladamente cómo conectarse a una VPN montada sobre L2TP/IPsec suponiendo las siguientes características para establecer la conexión:

IP del servidor: 192.168.135.218
PSK:             covid19@linuxito.com-2020-trustno1
Usuario:         emiliano
Contraseña:      coronavirus
Phase 1:         aes256-sha1-ecp384,3des-sha1-modp1024
Phase 2:         aes256-sha1

Instalación

Para comenzar, instalar strongSwan y xl2tpd:

# apt-get install strongswan xl2tpd libstrongswan-standard-plugins libstrongswan-extra-plugins

Configuración

Configurar IPsec:

# nano /etc/ipsec.conf

De acuerdo a las características de la VPN, se emplea el protocolo IKEv1 y los protocolos "aes256-sha1-ecp384,3des-sha1-modp1024" para la fase 1, y "aes256-sha1" para la fase 2:

config setup
conn %default
  ikelifetime=60m
  keylife=20m
  rekeymargin=3m
  keyingtries=1
  keyexchange=ikev1
  authby=secret
conn LINUXITO
  keyexchange=ikev1
  auto=add
  authby=secret
  type=transport
  left=%defaultroute
  leftprotoport=17/1701
  rightprotoport=17/1701
  right=192.168.135.218
  ike=aes256-sha1-ecp384,3des-sha1-modp1024
  esp=aes256-sha1

Se define la VPN con el nombre "LINUXITO" y se establece a la derecha la IP del servidor VPN.

A continuación, crear el archivo con la PSK (pre-shared key) de la VPN:

# nano /etc/ipsec.secrets

Establecer la clave con el siguiente formato:

: PSK "covid19@linuxito.com-2020-trustno1"

Configurar los permisos del archivo para evitar que se divulgue la PSK:

# chmod 600 /etc/ipsec.secrets

El siguiente paso consiste establecer la configuración de túnel punto a punto (L2TP):

# nano /etc/xl2tpd/xl2tpd.conf

Nuevamente, configurar la IP del servidor de VPN:

[lac LINUXITO]
lns = 192.168.135.218
ppp debug = yes
pppoptfile = /etc/ppp/options.l2tpd.client
length bit = yes

El último paso de configuración consiste en crear el archivo para el cliente PPP:

# nano /etc/ppp/options.l2tpd.client

Se establece como ruta por defecto (defaultroute) y se definen las credenciales (usuario y contraseña):

ipcp-accept-local
ipcp-accept-remote
refuse-eap
require-chap
noccp
noauth
mtu 1280
mru 1280
noipdefault
defaultroute
usepeerdns
connect-delay 5000
name emiliano
password coronavirus

Configurar los permisos del archivo:

# chmod 600 /etc/ppp/options.l2tpd.client

Por último, reiniciar los servicios:

# service ipsec restart
# service xl2tpd restart

Conexión

Ahora es posible conectarse a la VPN definida como "LINUXITO" con los siguientes comandos:

# ipsec up LINUXITO

Si todo es correcto se debe ver el siguiente mensaje en la última línea de la salida:

connection 'LINUXITO' established successfully

Finalmente, conectarse al túnel:

# echo "c LINUXITO" > /var/run/xl2tpd/l2tp-control

Ese último comando levanta la interfaz (point-to-point) "ppp0" con IP en la red de la VPN:

root@vaio:~# ip address show ppp0
18: ppp0: &lT;POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1280 qdisc pfifo_fast state UNKNOWN group default qlen 3
    link/ppp 
    inet 10.10.50.38 peer 10.10.50.24/32 scope global ppp0
       valid_lft forever preferred_lft forever

Para finalizar será necesario modificar las rutas:

root@vaio:~# ip route
default via 192.168.100.1 dev wlan0 
10.8.0.0/24 via 10.8.0.9 dev tun0 
10.8.0.9 dev tun0 proto kernel scope link src 10.8.0.10 
192.168.100.0/24 dev wlan0 proto kernel scope link src 192.168.100.8 
10.10.50.24 dev ppp0 proto kernel scope link src 10.10.50.38

La ruta por defecto actual es hacia "192.168.100.1". Configurar la IP del servidor de VPN para que el ruteo sea a través de la misma:

root@vaio:~# route add 192.168.135.218 gw 192.168.100.1

Luego configurar al dispositivo "ppp0" como nueva ruta por defecto:

root@vaio:~# route add default dev ppp0
root@vaio:~# ip route
default dev ppp0 scope link 
default via 192.168.100.1 dev wlan0 
10.8.0.0/24 via 10.8.0.9 dev tun0 
10.8.0.9 dev tun0 proto kernel scope link src 10.8.0.10 
192.168.135.218 via 192.168.100.1 dev wlan0 
192.168.100.0/24 dev wlan0 proto kernel scope link src 192.168.100.8 
10.10.50.24 dev ppp0 proto kernel scope link src 10.10.50.38 

Tener en cuenta que con esta configuración de ruteo, todo el tráfico hacia Internet será a través de la VPN. Ajustar el ruteo según las necesidades de cada cliente.

Es conveniente crear un pequeño script Bash para levantar el túnel, la VPN y definir las rutas.

Para bajar la VPN, ejecutar cualquiera de los siguientes comandos:

  • echo "d LINUXITO" > /var/run/xl2tpd/l2tp-control
  • service xl2tpd stop
  • service xl2tpd restart

Referencias


Tal vez pueda interesarte


Compartí este artículo