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