Tag Archives: linux

Configuración de Cliente VPN L2TP sobre IPSec con PSK en Fedora

En esta entrada se detalla un método de conexión de un cliente a VPN L2TP sobre IPSec en Fedora. Utiliza los paquetes ipsec, libreswam y xl2tpd

Asegurarse de tener como mínimo los siguientes datos de conexión:

  • Dirección IP de la pasarela
  • nombre de usuario para la conexión
  • clave del usuario
  • Llave compartida a priori (pre-shared key)

Instalar los paquetes necesarios

install -y ipsec libreswan xl2tpd

Importante: Se debe conservar el mismo nombre de conexión en todos los archivos que se creen o editen. Para el caso de este tutorial se utilizará el nombre mivpn 

Configuración de IPSec

Crear un archivo de configuración para IPsec dentro de la carpeta  /etc/ipsec.d/

nano /etc/ipsec.d/mivpn.conf

Y agregar el siguiente contenido:


conn mivpn
authby=secret
pfs=no
auto=add
keyingtries=3
dpddelay=30
dpdtimeout=120
dpdaction=clear
rekey=yes
ikelifetime=8h
keylife=1h
type=transport
left=DIRECCIÓN_IP_LOCAL
leftnexthop=%defaultroute
leftprotoport=17/1701
right=DIRECCIÓN_IP_DE_LA_PASARELA_VPN
rightprotoport=17/1701
rightnexthop=%defaultroute

  • La DIRECCIÓN_IP_LOCAL debe reemplazarse por la IP que tenga asignada el equipo local(consultarla utilizando ifconfig).
  • La DIRECCIÓN_IP_DE_LA_PASARELA_VPN debe reemplazarse por la IP del servidor VPN remoto.
Registro de la Llave compartida a priori (pre-shared key)

Crear un archivo mivpn.secrets en la carpeta /etc/ipsec.d/

nano /etc/ipsec.d/mivpn.secrets

Y agregar el siguiente contenido:

%any REMOTE_VPN_SERVER_IP_ADDRESS : PSK "MI_PRESHARED_KEY"
  • MI_PRESHARED_KEY debe reemplazarse por la cadena de caracteres de la llave compartida a priori.
  • Los espacios en blanco del contenido anterior deben conservarse.
Configurar L2TP

Editar el archivo /etc/xl2tpd/xl2tpd.conf

nano /etc/xl2tpd/xl2tpd.conf

Agregando al final del mismo el siguiente contenido:

[lac mivpn]
lns =DIRECCIÓN_IP_DE_LA_PASARELA_VPN
ppp debug = yes
pppoptfile = /etc/ppp/options.xl2tpd.mivpn
length bit = yes

Luego crear un archivo de configuración del protocolo punto a punto (ppp) en la carpeta /etc/ppp/

nano /etc/ppp/options.xl2tpd.mivpn

Con el siguiente contenido:

ipcp-accept-local
ipcp-accept-remote
refuse-eap
require-mschap-v2
noccp
noauth
idle 1800
mtu 1410
mru 1410
defaultroute
usepeerdns
debug
lock
connect-delay 5000
name NOMBRE_USUARIO
password CLAVE_DEL_USUARIO
  • NOMBRE_USUARIO debe cambiarse por el nombre de usuario para la conexión.
  • CLAVE_DEL_USUARIO debe cambiarse por la clave del usuario.
REALIZAR la conexión

Iniciar el servicio de ipsec

systemctl start ipsec

Agregar (verificar) la configuración de la conexión:

$ ipsec auto --add mivpn

Habilitar la conexión:

$ ipsec auto --up mivpn

Iniciar el servicio xl2tpd:

$ systemctl start xl2tpd

Construir el túnel:

$ echo "c mivpn" > /var/run/xl2tpd/l2tp-control

Cuando se quiera cerrar el túnel:

$ echo "d mivpn" > /var/run/xl2tpd/l2tp-control
Verificación de la conexión

Si el procedimiento ha sido exitoso, al revisar las interfaces con ifconfig se tendría una interfaz tipo ppp0, similar a:

ppp0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST>  mtu 1380
        inet XX.XXX.XXX.XXX  netmask 255.255.255.255  destination YY.YYY.Y.Y
        ppp  txqueuelen 3  (Point-to-Point Protocol)
        RX packets 41  bytes 6624 (6.4 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 881  bytes 173658 (169.5 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Donde XX.XXX.XXX.XXX corresponde a la dirección IP asignada al equipo en la VPN.

Enrutamiento de tráfico

El último paso es configurar el sistema para que el tráfico que vaya a los hosts de la VPN sean enrutados por la conexión.

ip route add ZZZ.ZZZ.ZZZ.ZZZ via XX.XXX.XXX.XXX dev ppp0
  • ZZZ.ZZZ.ZZZ.ZZZ debe reemplazarse por la dirección del host al que se desea conectar dentro de la VPN.
  • ppp0 es el nombre de la interfaz creada por xl2tpd. Debe cambiarse por el valor que corresponda de acuerdo a lo informado por ifconfig.

Una vez terminado el proceso se tendría capacidad de interconexión con el host ZZZ.ZZZ.ZZZ.ZZZ.

ping ZZZ.ZZZ.ZZZ.ZZZ
Posibles errores

Durante el proceso pueden ocurrir algunos errores debido a falta de paquetes o no sincronización de las herramientas. Los más comunes son:

El servicio de IPSec no puede iniciarse: Tratar de cargar de manera manual los módulos del Kernel

modprobe af_key

El servicio l2tpd no puede iniciarse: Instalar los módulos extra del kernel

dnf install kernel-modules-extra
Referencias

Este manual en español está basado en:

Así como los manuales (man pages) de cada uno de los paquetes.

GISEPROI – Universidad Distrital francisco José de Caldas