Conectando un linux a una VPN IPSEC de Fortigate

En este documento vamos a intentar describir todos los pasos que necesitaremos para conectar una máquina con linux a una VPN que esté ofreciendo un Fortigate, en este caso una VPN de tipo IPSEC. Un post que espero no albergue mucho misterio.

 

Este post lo baso en una máquina linux con Ubuntu, si estás usando otro SO no basado en Debian, entiendo que excepto la instalación, los demás pasos serán iguales, y la instalación similar, vaya. Que la máquina la tenemos actualizada, con un nombre, un direcciona miento IP… total, que empezamos! Instalaremos el cliente de VPN StrongSwan:

sudo apt install strongswan -y
sudo apt install charon-systemd -y

 

Si queremos permitir el reenvío de paquetes a través de nosotros a la VPN, o sea, para otros equipos de la red del linux que se puedan conectar a la red de la VPN, editamos ‘sudo nano /etc/sysctl.conf’ y descomentamos las líneas siguientes, quedando:

net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding = 1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0

 

Editamos el fichero de configuración de StrongSwan ‘sudo nano /etc/ipsec.conf’ y creamos la configuración de la VPN en base a la definición que haya en el lado de la VPN IPSEC en el Fortigate, quedando algo como esto (obviamente es posible que tengáis que cambiar algún valor, dependerá si os habéis salido de las configuraciones standard, así como aportar algunos direccionamientos):

config setup
   charondebug = "dmn 1, mgr 1, ike 2, chd 1, job 1, cfg 3, knl 2, net 2, lib 1"
   nat_traversal = yes
conn "FORTI_VPN"
        type=tunnel
        dpdaction=restart
        keyexchange=ikev1
        ikelifetime=1440m
        keylife=60m
        aggressive=yes
        ike=aes128-sha1-modp1536
        esp=aes128-sha1-modp1536
        xauth=client
        #leftid=LOCAL_ID #Si tenemos Local ID.
        left=%defaultroute
        leftsourceip=%config
        leftauth=psk
        rightid=%any
        rightauth=psk
        leftauth2=xauth
        right=IP_PUBLICA_FORTIGATE
        rightsubnet=RED_LADO_VPN/MASCARA
        xauth_identity=NOMBRE_DE_USUARIO
        auto=add

 

Creamos el fichero de secretos ‘sudo nano /etc/ipsec.secrets’ y con el siguiente formato añadimos y modificamos nuestros datos:

IP_PUBLICA_FORTIGATE : PSK "SECRETO_PRESHARED_KEY"
NOMBRE_DE_USUARIO : XAUTH "CONTRASEÑA_DEL_USUARIO"

 

Recargamos y probamos a conectar la VPN…

sudo systemctl restart strongswan
sudo ipsec update
sudo ipsec reload
sudo ipsec up FORTI_VPN

 

Como todo habrá ido bien 😉 es hora de crear un script para que se ejecute automáticamente al iniciarse el equipo, que conecte la VPN y que además, si la VPN se desconecta, que se intente conectar de nuevo, ‘nano /home/usuario/inicia_vpn.sh’ quedando algo como:

#!/bin/bash

while :
do
  sudo ipsec status |grep "ESTABLISHED"
  RET=$?
  if [ ! $RET -eq 0 ];then
      echo "[!] No hay tunel levantado, reconectando..."
      sudo systemctl restart strongswan
      sudo ipsec update
      sudo ipsec reload
      sudo ipsec up FORTI_VPN
  fi
  sleep 5
done

 

Hacemos el script ejecutable con ‘chmod +x /home/usuario/inicia_vpn.sh’ y lo ponemos en el cron para que cuando arranque la máquina linux se conecte sola, mediante ‘crontab -e’:

# m h  dom mon dow   command
@reboot sleep 30 && sudo /home/usuario/inicia_vpn.sh

 

¡Y listo! Ya tendríamos una máquina linux conectada por la VPN IPSEC de un Fortigate, así como un scriptcillo que controlará la conectividad! Cómo diría Arguiñano… ¡Fácil, sencillo y para toda la familia! Ale, que os vaya muy bien, os mando un abrazo!!

 

Héctor Herrero
Últimas entradas de Héctor Herrero (ver todo)