Translate

miércoles, septiembre 21, 2016

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.
VPN IPSec en iPhone
VPN IPSec en iPhone
Con esto nuestra servidor VPN esta totalmente a punto.

Más información: