Servidor VPN en Raspberry Pi (IPSec)
El objetivo es crear tunel para que nuestro dispositivo móvil pueda conectarse a Internet de forma cifrada y segura. Si además tenemos acceso a los recursos de la red local, mejor. Esta vez el cifrado será más sólido.
Los programas que hay que instalar en son: openswan que se encarga de IPSec, xl2tpd que se encarga del transporte de datos y ppp que se encarga del tunel. Para instalarlos basta con la orden
$ sudo apt-get install openswan xl2tpd ppp
El trabajo duro es el de configuración. Primero IPSec. Hacemos una copia del fichero original y luego lo editamos para que sea cómo el ejemplo:
$ sudo cp /etc/ipsec.conf /etc/ipsec.conf.original $ sudo nano /etc/ipsec.conf
config setup nat_traversal=yes protostack=netkey plutostderrlog=/tmp/log.txt conn L2TP-PSK authby=secret pfs=no rekey=no type=tunnel esp=aes128-sha1 ike=aes128-sha-modp1024 ikelifetime=8h keylife=1h left=10.0.1.205 leftnexthop=%defaultroute leftprotoport=17/1701 right=%any rightprotoport=17/%any rightsubnetwithin=0.0.0.0/0 auto=add dpddelay=30 dpdtimeout=120 dpdaction=clear
Los detalles que se pueden personalizar son la dirección IP del servidor en la red local y si queremos limitar el acceso desde algunas direcciones. Lo mejor es dejar %any y no complicarse la vida. Otro detalle a respetar es la indentación: cada apartado comienza en la primera línea y todo su contenido esta tabulado hacia la derecha.
Lo siguiente es definir el “secreto” una contrasenya que todas las conexiones han de conocer. Editamos el fichero ipsec.secrets:
$ sudo nano /etc/ipsec.secrets
%any %any: PSK "cHc0J#7-t4H2sU01OC"
Desde luego que puedes poner tu “secreto” y limitar para que redes u ordenadores valdrá este. Pero cómo antes es mejor no poner limitaciones.
En tercer lugar hay que configurar el protócolo de transporte xl2tp. Hacemos una copia de seguridad y editamos el fichero has que quede como el ejemplo:
$ sudo cp /etc/xl2tpd/xl2tpd.conf /etc/xl2tpd/xl2tpd.conf.original $ sudo nano /etc/xl2tpd/xl2tpd.conf
En tu fichero debes indicar la dirección de tu servidor y el rango de IP que les daremos a los dispositivos móviles.
[global] auth file = /etc/l2tpd/l2tp-secrets debug network = yes debug tunnel = yes [lns default] ip range = 10.0.1.209-10.0.1.240 local ip = 10.0.1.205 require chap = yes refuse pap = yes require authentication = yes name = felip ppp debug = yes pppoptfile = /etc/ppp/options.xl2tpd length bit = yes
Hay que seguir con el fichero de opciones del tunel, ppp.
$ sudo cp /etc/ppp/options.xl2tpd /etc/ppp/options.xl2tpd.original $ sudo nano /etc/ppp/options.xl2tpd
Es muy recomendable indicar un servidor DNS para nuestra conexión, he escogido el servidor IP de google (8.8.8.8)
ipcp-accept-local ipcp-accept-remote ms-dns 8.8.8.8 noccp auth crtscts idle 1800 mtu 1410 mru 1410 nodefaultroute debug lock proxyarp connect-delay 5000
Después hay que añadir el usuario y contraseña que vamos a utilizar en la conexión.
$ sudo nano /etc/ppp/chap-secrets
Por ejemplo para el usuario “miyoremoto” le asignamos la contraseña “kunT6s+$5S”.
miyoremoto * kunT6s+$5S *
¡Mucha atención! Los espacios entre las palabras en realidad han de ser tabuladores.
Para acabar la configuración el Raspberry Pi, hay que reiniciar los servicios implicados:
$ sudo service ipsec restart $ sudo service xl2tpd restart $ sudo service pptpd restart
Casi para acabar, un detalle muy importante, nuestro servidor Raspberry Pi ha de ser capaz de redirigir los datos entre Internet y nuestro dispositivo. Para ello hemos de editar el fichero sysctl.conf
$ sudo nano /etc/sysctl.conf
Editando el fichero para asegurar que la linea ipforwarding no esté comentada.
net.ipv4.ip_forward=1
Se guarda el fichero y se reinicia el servicio,
$ sudo sysctl -p
Con esto está acabado el trabajo en el Raspi, pero falta el router…
Abrir puertos en el router
Todavía falta un detalle muy, muy importante. Que desde el exterior de nuestra red local se pueda acceder al servidor. En concreto hay que abrir tres puertos UDP:
- 500/udp
- 4500/udp
- 1701/udp
En las entradas de Acceso remoto ya expliqué cómo se hace en un Airport Extreme y enlace a información sobre otros routers, de forma que no noy a repetirme.
Configuración iPhone
Cómo el objetivo de todo el montaje era utilizar el raspi como servidor y tunel para el iPhone veamos cómo se tiene que configurar. Para ello nos hará falta:
- Un nombre para la conexión (p.e. Raspi IPSec)
- IP pública de nuestro Raspi (o nombre) (p.e. 81.34.123.213)
- El nombre de usuario que hemos escogido (p.e. miyoremoto)
- La contraseña (p.e. kunT6s+$5S)
- El secreto de la conexión ( p.e. cHc0J#7-t4H2sU01OC)
Con estos datos vamos a los ajustes de VPN. Estos ajustes en la versión actual de IOS estan en General | VPN. Creamos una nueva VPN. Hay que seleccionar la pestaña L2TP y rellenar con los datos anteriores.
Con esto nuestra servidor VPN esta totalmente a punto.
Más información:
- Setting up a VPN with your iPhone using L2TP, IPSec and Linux – Louwrentius; [ http://louwrentius.com/blog/2011/12/setting-up-a-vpn-with-your-iphone-using-l2tp,-ipsec-and-linux/ ]
- Setting up an L2TP/IPSec server on Debian; [ http://www.aa-asterisk.org.uk/index.php/Setting_up_an_L2TP/IPSec_server_on_Debian ]
- Configure L2TP/IPSec VPN server on Ubuntu; [ http://itime.me/?p=152 ]
- Debian squeeze l2tp/IPSec vpn server with an iOS road warrior – The Gadget blog; Bertelsen, Dag; [ http://blog.bertelsen.co/2012/02/debian-squeeze-l2tpipsec-vpn-server.html ]
Comentarios