lunes, 12 de enero de 2009

VPN contra Fortigate, usando Openswan

Vamos a ver como configurar Ubuntu para conectar con una VPN ofrecida por un servidor Fortigate, usando Openswan. Fortigate está configurado para usar Extended Authentication (Xauth).

Nota: Intenté configurar la misma conexión con IPSEC nativo del kernel 2.6 y Racoon, pero tuve problemas con la Xauth, ya que parece que Fortigate no se identifica como host Xauth, y Racoon da un error diciendo que el peer no se ha declarado como Xauth host. Si alguien tiene alguna idea al respecto, se agradecerá ;)

  • Instalar openswan:
apt-get install openswan linux-patch-openswan openswan-modules-source

Aceptar las opciones por defecto.
  • Configurar la conexión VPN:
Creamos el fichero de configuración de la conexión. Fichero: /etc/ipsec.d/forti.conf:

conn office
#Izquierda somos nosotros
left=%defaultroute
#Somos cliente XAUTH
leftxauthclient=yes
#El gateway por defecto (por el NAT-T)
leftnexthop=192.168.0.1
#Derecha es el Fortigate
right=X.X.X.X
#La ID que envía es el Fortigate, puede que no sea necesario si es iagual a right
rightid=X2.X2.X2.X2
#Fortigate es servidor XAUTH
rightxauthserver=yes
#Subnet remota
rightsubnet=X.X.X.X/YY
#Tipo de intercambio de llaves
keyexchange=ike
#Opciones IKE
ike=3des-sha-modp1536
#Opciones SA
auth=esp
auto=add
authby=secret
#Cifrado y autenticacion SA
esp=3des-sha1
#perfect forward secrecy
pfs=yes
#Modo agresivo
aggrmode=yes

Añadir el nuevo fichero en la configuración IPSEC. Añadir esta línea al fichero /etc/ipsec.conf:
include /etc/ipsec.d/forti.conf

Añadir una línea con el secreto compartido en /etc/ipsec.secrets:
ID_LOCAL ID_FORTIGATE : PSK "SECRETO"

ID_LOCAL será normalmente la IP local
ID_FORTIGATE será la ID enviada por Fortigate

Mas fácil: Si sólo usamos una VPN con un secreto compartido, podemos no especificar las IDs, así:
: PSK "SECRETO"

  • Crear un script para arrancar la VPN cuando se levante la interfaz de red. Fichero /etc/dhcp3/dhclient-exit-hooks.d/vpn:

if [ "$reason" != BOUND ] && [ "$reason" != RENEW ] \
&& [ "$reason" != REBIND ] && [ "$reason" != REBOOT ]
then
return
fi

/etc/init.d/ipsec stop
/etc/init.d/ipsec start
sleep 3
ipsec whack --name office --xauthname XAUTHNAME --xauthpass XAUTHPASS --initiate

XAUTHNAME es nuestro login XAUTH
XAUTHPASS es nuestra contraseña XAUTH

Para comprobar que la conexión VPN se realiza correctamente, podemos ejecutar en consola:
#dhclient eth0

Así veremos el proceso de negociación de la VPN.

  • Arrancar la VPN desde el Network Manager en Ubuntu 8.10 (parece que no funcionan igual los hooks que en la 8.04)
Simplemente creamos un fichero en /etc/NetworkManager/dispacher.d/ llamado, por ejemplo, 99vpn, y metemos estos contenidos:
/etc/init.d/ipsec stop
/etc/init.d/ipsec start
sleep 3
ipsec whack --name office --xauthname XAUTHNAME --xauthpass XAUTHPASS --initiate


En la version 8.10 de Ubuntu, OpenSwan no puede renegociar la VPN, así que podemos poner un cron para revivirla, que ejecute este script:
/usr/sbin/ipsec whack --name office --terminate
sleep 3
/usr/sbin/ipsec whack --name office --xauthname USER --xauthpass PASS --initiate

Este script lo metemos en el cron de root, porque no se porque razón en el crontab no se ejecuta.
Como root:
# crontab -e
10 * * * * /etc/init.d/vpn 1>/tmp/a 2>/tmp/b 130 * * * * /etc/init.d/vpn 1>/tmp/a 2>/tmp/b 150 * * * * /etc/init.d/vpn 1>/tmp/a 2>/tmp/b 1

No hay comentarios:

Publicar un comentario