Cómo configurar una VPN IPSEC + L2TP con una Raspberry Pi y conectarte usando tu móvil o tu PC

Captura


NOTA 02/09/2016: Después de una actualización a Raspbian 8, los componentes de OpenSWAN (y otras alternativas como StrongSWAN y LibreSWAN) empleando NAT-T en ambos endpoints no funcionan con Raspberry Pi, por lo que este tutorial solamente aplica a Raspbian 7.

Si has logrado configurar de forma satisfactoria tu VPN con OpenSWAN bajo Raspbian 8 déjame un comentario para actualizar el procedimiento.


Muchas veces la única forma que tenemos de conectarnos con Internet es a través de una conexión insegura (una red inalámbrica abierta en un hotel, una cafetería o una universidad, una conexión en una red no confiable, la red GSM/GPRS del teléfono móvil, etc.). En este punto, nos gustaría garantizar que los datos transmitidos estuvieran protegidos y que nuestra navegación se realizara a través de un canal confiable.

Es en este punto en el cual entra en acción una VPN (Virtual Private Network): Una conexión segura a través de un canal inseguro. Empleando una VPN creamos un túnel cifrado entre dos dispositivos, de tal forma que únicamente esos dos puntos puedan desencriptar el tráfico independientemente del canal por donde se transmitan. Siendo así, si tenemos en casa una Raspberry Pi y en la oficina un ordenador o disponemos de un teléfono móvil (se ofrecen ejemplos de conexión con Android y Windows XP/7/8), podemos crear una VPN de una forma fácil y sencilla para proteger los datos transmitidos.

Contenido

Introducción

En Internet se pueden encontrar múltiples manuales para la creación de túneles VPN empleando paquetes como OpenVPN (que emplea SSL/TLS para la protección de las conexiones) y que es una muy buena solución. Sin embargo, en este artículo emplearemos IPSEC (que emplea cifrado en capa 3 a nivel IP), tomando como referencia este artículo y este otro en inglés.

La lógica de todo el proceso es la siguiente:

  1. El cliente VPN (Roadwarrior) – que para este caso es un teléfono móvil con Android o un ordenador con Windows XP/7/8 – se conecta al puerto 4500/UDP en donde el daemon de IPSEC (OpenSwan) está escuchando.
  2. El daemon de gestión de claves (IKE pluto) negocia la Phase 1 ISAKMP Security Association.
  3. Después de la definición de ISAKMP Security Association (SA), se procede con la fase 2 (Phase 2 IPSec SA) empleando PSK (Pre-shared keys).
  4. Después que la conexión esté autenticada mediante PSK, el tráfico ya estará cifrado (puerto 500/UDP). En este punto se realiza una autenticación de de usuarios usando Point to Point (PPP).
  5. xl2tpd gestionará la autenticación y la gestión del enlace de comunicación a través de Link Control Protocol (LCP).
  6. xl2tpd negocia con los dos puntos que se conectan (cliente y servidor) otros parámetros de funcionamiento tales como encriptación y compresión.
  7. xl2tpd inicia la fase de autenticación de usuario solicitando nombre de usuario y contraseña empleando el puerto 1701/UDP.
  8. Las credenciales provistas por el usuario son enviadas por xl2tpd a pppd empleando CHAP
  9. pppd inicia el túnel e invoca los protocolos de capa de red seleccionados durante la fase del establecimiento del enlace (paso 6), incluyendo IPCP que otorga direcciones IP de forma dinámica a los clientes que se conectan al túnel.
  10. Con el túnel ppp activo y autenticado, la conexión se ha finalizado

Pre-requisitos

Antes de proceder, se debe validar que se tienen los siguientes elementos:

  • Raspberry Pi con un sistema operativo actualizado y suficiente espacio en disco
  • Dirección IP estática o en caso contrario registrar la dirección IP en un servicio de DNS dinámico como No-IP
  • Posibilidad de modificar el router de casa para la apertura de puertos

Paso 1: Instalar los paquetes de software requeridos

Para la configuración de la VPN empleando IPSEC se necesitará la instalación de OpenSWAN (que permitirá la gestión del túnel IPSEC), xl2tpd (que permitirá la conexión mediante L2TP (Layer 2 Tunneling protocol)) y pppd (que administrará la autenticación y la apertura, transmisión y cierre del canal como si de una conexión vía módem se tratara, ya que es la conexión entre dos puntos remotos). Por lo general pppd ya viene instalado en las últimas versiones de Raspbian, por lo que se instalarán los otros dos paquetes con el comando:

root@raspberrypi ~ #apt-get install openswan xl2tpd

Paso 2: Configurar OpenSWAN

A continuación, se procede a configurar OpenSWAN desde su fichero de configuración ubicado en /etc/ipsec.conf. La recomendación es hacer una copia de seguridad del fichero original y emplear un fichero nuevo:

root@raspberrypi ~ #cp /etc/ipsec.conf /etc/ipsec.original
root@raspberrypi ~ #echo "" > /etc/ipsec.conf

En este nuevo fichero se deben copiar las siguientes líneas, teniendo presente que la indentación no son espacios sino tabuladores:

# /etc/ipsec.conf - Openswan IPsec configuration file

# This file:  /usr/share/doc/openswan/ipsec.conf-sample
#
# Manual:     ipsec.conf.5


version 2.0     # conforms to second version of ipsec.conf specification

# basic configuration
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=<Dirección IP de la Raspberry Pi>
        leftnexthop=%defaultroute
        leftprotoport=17/1701
        right=%any
        rightprotoport=17/%any
        rightsubnetwithin=0.0.0.0/0
        auto=add
        dpddelay=30
        dpdtimeout=120
        dpdaction=clear

La única directiva que hay que personalizar es “left=” en donde se debe especificar la dirección IP de la Raspberry Pi.

Para este caso, la VPN trabajará bajo PSK (Pre-Shared Key), es decir: una contraseña compartida entre el cliente y el servidor VPN. Para ello, se edita el fichero /etc/ipsec.secrets asignando una contraseña robusta:

# This file holds shared secrets or RSA private keys for inter-Pluto
# authentication.  See ipsec_pluto(8) manpage, and HTML documentation.

# RSA private key for this host, authenticating it to any other host
# which knows the public part.  Suitable public keys, for ipsec.conf, DNS,
# or configuration of other implementations, can be extracted conveniently
# with "ipsec showhostkey".

# this file is managed with debconf and will contain the automatically created RSA keys
#include /var/lib/openswan/ipsec.secrets.inc
%any %any: PSK "PASSWORD1"

Tener presente que la contraseña debe estar entre comillas. En esta configuración permitimos que cualquier usuario que conozca el valor del PSK se pueda conectar, aunque se puede restringir y remplazar en vez de %any.

Paso 3: Configurar xl2tpd

Después de añadir el soporte de IPSEC a la conexión, se procede con la configuración de xl2tpd, cuyo fichero de configuración se encuentra en /etc/xl2tpd/xl2tpd.conf. Se hace lo mismo que con el fichero de configuración de IPSEC: una copia de seguridad y un fichero nuevo:

root@raspberrypi ~ #cp /etc/xl2tpd/xl2tpd.conf /etc/xl2tpd/xl2tpd.original
root@raspberrypi ~ #echo "" > /etc/xl2tpd/xl2tpd.conf

Ahora se edita con los siguientes valores:

[global]
auth file = /etc/xl2tpd/l2tp-secrets
debug network = yes
debug tunnel = yes

[lns default]

ip range = <Rango de IP VPN>
local ip = <Dirección IP de la Raspberry PI>
require chap = yes
refuse pap = yes
require authentication = yes
name = <Identificador>
ppp debug = yes
pppoptfile = /etc/ppp/options.xl2tpd
length bit = yes

En este caso se deben parametrizar las siguientes variables:

  • ip range: Con el rango de direcciones IP que se asignarán a los diferentes túneles que se creen. Ejemplo: ip range = 192.168.1.210-192.168.1.220
  • local ip: En donde se ingresa la dirección IP de la Raspberry Pi
  • name: En donde se define un identificador de la conexión. Puede ser cualquier nombre que se quiera

Paso 4: Configurar PPP

A continuación se procederá con la configuración de PPP que se encargará de la señalización del canal y los procesos de autenticación de usuarios. Para ello – y al igual que con los otros ficheros – se hace una copia de seguridad primero:

root@raspberrypi ~ #cp /etc/ppp/options.xl2tpd /etc/ppp/options.xl2tpd.original
root@raspberrypi ~ #echo "" > /etc/ppp/options.xl2tpd

Y se edita con las siguientes líneas:

ipcp-accept-local
ipcp-accept-remote
ms-dns 4.2.2.2
noccp
auth
crtscts
idle 1800
mtu 1410
mru 1410
nodefaultroute
debug
lock
proxyarp
connect-delay 5000

En este caso, el único valor parametrizable es ms.dns, en donde ponemos la dirección IP de un servidor DNS. Se puede usar el servidor 4.2.2.2 o el que se tenga disponible.

Luego, se procede con la configuración de la autenticación. Para esta conexión se empleará CHAP, que es más seguro que PAP (por defecto), cuya configuración ya se había especificado en el fichero /etc/xl2tpd/xl2tpd.conf. Esto se realiza en el fichero /etc/ppp/chap-secrets:

# Secrets for authentication using CHAP
# client        server  secret                  IP addresses
usuario   *       PASSWORD2  *

En este caso, se debe poner un nombre de usuario y una nueva contraseña. Las separaciones entre los valores son tabuladores.

Paso 5: Activar IP Forwarding, deshabilitar send_redirects y accept_redirects y configurar el generador de números aleatorios

Para permitir que la Raspberry Pi pueda recibir y enviar tráfico como si fuera un router, se debe activar IP Forwarding en el fichero /etc/sysctl.conf, parametrizando la variable net.ipv4.ip_forward a 1:

# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1

Para evitar problemas con ICMP redirects que puedan afectar al stack de NETKEY se deben activar los siguientes valores (por lo general vienen comentariados, asi que hay que quitarles el #):

# Do not accept ICMP redirects (prevent MITM attacks)
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.secure_redirects = 0

# Do not send ICMP redirects (we are not a router)
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0

Si no se quiere editar directamente el fichero, se puede ejecutar el siguiente comando:

for each in /proc/sys/net/ipv4/conf/*
do
echo 0 > $each/accept_redirects
echo 0 > $each/send_redirects
done

Luego, reiniciar el servicio para que los cambios sean aceptados:

sysctl -p

Por otro lado, se requiere re-configurar el generador de números aleatorios para garantizar una seguridad aceptable durante el proceso de encriptación usando el generador de hardware incluido en la Raspberry Pi. Para ello, se debe instalar el paquete rng-tools:

root@raspberrypi ~ # apt-get install rng-tools

Antes de proceder con la configuración de rng-tools, es necesario cargar el módulo bcm2708_rng, que permite usar el generador de números aleatorios instalado en el chip de la Raspberry Pi. Esto se hace editando el fichero /etc/modules y agregando la línea “bcm2708_rng”:

root@raspberrypi ~ # more /etc/modules
# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.

bcm2708-rng

Para cargar el módulo, simplemente ejecutamos el siguiente comando:

root@raspberrypi ~ # modprobe  bcm2708-rng

Posteriormente, editar el fichero /etc/default/rng-tools para que emplee /dev/hwrng (FIPS 140-2) como generador de números aleatorios:

# Configuration for the rng-tools initscript
# $Id: rng-tools.default,v 1.1.2.5 2008-06-10 19:51:37 hmh Exp $

# This is a POSIX shell fragment

# Set to the input source for random data, leave undefined
# for the initscript to attempt auto-detection.  Set to /dev/null
# for the viapadlock driver.
HRNGDEVICE=/dev/hwrng
#HRNGDEVICE=/dev/null

# Additional options to send to rngd. See the rngd(8) manpage for
# more information.  Do not specify -r/--rng-device here, use
# HRNGDEVICE for that instead.
#RNGDOPTIONS="--hrng=intelfwh --fill-watermark=90% --feed-interval=1"
#RNGDOPTIONS="--hrng=viakernel --fill-watermark=90% --feed-interval=1"
#RNGDOPTIONS="--hrng=viapadlock --fill-watermark=90% --feed-interval=1"

Se reinicia el servicio para que tome los cambios:

root@raspberrypi ~ # service rng-tools restart
Stopping Hardware RNG entropy gatherer daemon: rngd.
Starting Hardware RNG entropy gatherer daemon: rngd.

Y se configura el servicio para que inicie cada vez que se reinicie la Raspberry Pi:

root@raspberrypi ~ # chkconfig rng-tools --level 2 on

Paso 6: Validar que el servicio de IPSEC funciona correctamente

Cuando todo esté correctamente configurado, se realiza una validación de la configuración de OpenSWAN (IPSEC) para ver si hay algún problema:

root@raspberrypi ~ # ipsec verify
Checking your system to see if IPsec got installed and started correctly:
Version check and ipsec on-path                                       [OK]
Linux Openswan U2.6.37/K4.1.7+ (netkey)
Checking for IPsec support in kernel                                  [OK]
 SAref kernel support                                                 [N/A]
 NETKEY:  Testing XFRM related proc values                            [OK]
 [OK]
 [OK]
Hardware RNG detected, testing if used properly                       [OK]
Checking that pluto is running                                        [OK]
 Pluto listening for IKE on udp 500                                   [OK]
 Pluto listening for NAT-T on udp 4500                                [OK]
Checking for 'ip' command                                             [OK]
Checking /bin/sh is not /bin/dash                                     [WARNING]
Checking for 'iptables' command                                       [OK]
Opportunistic Encryption Support                                      [DISABLED]

Para este caso en particular, el [WARNING] referente a /bin/sh y /bin/dash se puede obviar.

Si por algún caso se reciben mensajes de fallo similares a estos:

 NETKEY:  Testing XFRM related proc values                   [FAILED]

  Please disable /proc/sys/net/ipv4/conf/*/send_redirects
  or NETKEY will cause the sending of bogus ICMP redirects!

 [FAILED]

  Please disable /proc/sys/net/ipv4/conf/*/accept_redirects
  or NETKEY will accept bogus ICMP redirects!

 [OK]

Entonces ejecutar estos comandos para que los cambios sean aplicados directamente en el sistema operativo en ejecución:

for f in /proc/sys/net/ipv4/conf/*/send_redirects; do echo 0 > $f; done 
for f in /proc/sys/net/ipv4/conf/*/accept_redirects; do echo 0 > $f; done

Paso 7: Reiniciar los servicios de la VPN

Para que los cambios sean aplicados, se reinician los servicios asociados:

service ipsec restart
service xl2tpd restart

Paso 8: Configurar los puertos en el router

Para que la VPN pueda ser accedida desde Internet se requiere la apertura de los siguientes puertos en el router. Es importante que se revise el procedimiento dependiendo del modelo de router que se disponga:

  • 500/udp
  • 4500/udp
  • 1701/udp

Paso 9: Revisar los registros de eventos en el dispositivo Raspberry Pi

Para validar que todo el sistema funcione de forma correcta, visualizamos el fichero /var/log/daemon.log mientras establecemos una conexión con la VPN recién creada empleando un cliente Android o Windows:

root@raspberrypi ~ # tail -f /var/log/daemon.log
Nov 16 21:43:42 raspberrypi xl2tpd[324]: network_thread: recv packet from 1.1.1.1, size = 107, tunnel = 0, call = 0 ref=0 refhim=0
Nov 16 21:43:42 raspberrypi xl2tpd[324]: get_call: allocating new tunnel for host 1.1.1.1, port 37604.
Nov 16 21:43:44 raspberrypi xl2tpd[324]: network_thread: recv packet from 1.1.1.1, size = 107, tunnel = 0, call = 0 ref=0 refhim=0
Nov 16 21:43:44 raspberrypi xl2tpd[324]: get_call: allocating new tunnel for host 1.1.1.1, port 37604.
Nov 16 21:43:44 raspberrypi xl2tpd[324]: control_finish: Peer requested tunnel 38020 twice, ignoring second one.
Nov 16 21:43:44 raspberrypi xl2tpd[324]: build_fdset: closing down tunnel 39722
Nov 16 21:43:44 raspberrypi xl2tpd[324]: network_thread: recv packet from 1.1.1.1, size = 20, tunnel = 45444, call = 0 ref=0 refhim=0
Nov 16 21:43:44 raspberrypi xl2tpd[324]: Connection established to 1.1.1.1, 37604.  Local: 45444, Remote: 38020 (ref=0/0).  LNS session is 'default'
Nov 16 21:43:44 raspberrypi xl2tpd[324]: network_thread: recv packet from 1.1.1.1, size = 38, tunnel = 45444, call = 0 ref=0 refhim=0
Nov 16 21:43:44 raspberrypi xl2tpd[324]: network_thread: recv packet from 1.1.1.1, size = 40, tunnel = 45444, call = 40246 ref=0 refhim=0
Nov 16 21:43:44 raspberrypi xl2tpd[324]: start_pppd: I'm running:
Nov 16 21:43:44 raspberrypi xl2tpd[324]: "/usr/sbin/pppd"
Nov 16 21:43:44 raspberrypi xl2tpd[324]: "passive"
Nov 16 21:43:44 raspberrypi xl2tpd[324]: "nodetach"
Nov 16 21:43:44 raspberrypi xl2tpd[324]: "refuse-pap"
Nov 16 21:43:44 raspberrypi xl2tpd[324]: "auth"
Nov 16 21:43:44 raspberrypi xl2tpd[324]: "require-chap"
Nov 16 21:43:44 raspberrypi xl2tpd[324]: "name"
Nov 16 21:43:44 raspberrypi xl2tpd[324]: "usuario"
Nov 16 21:43:44 raspberrypi xl2tpd[324]: "debug"
Nov 16 21:43:44 raspberrypi xl2tpd[324]: "file"
Nov 16 21:43:44 raspberrypi xl2tpd[324]: "/etc/ppp/options.xl2tpd"
Nov 16 21:43:44 raspberrypi xl2tpd[324]: "ipparam"
Nov 16 21:43:44 raspberrypi xl2tpd[324]: "1.1.1.1"
Nov 16 21:43:44 raspberrypi xl2tpd[324]: "/dev/pts/3"
Nov 16 21:43:44 raspberrypi xl2tpd[324]: Call established with 1.1.1.1, Local: 40246, Remote: 61140, Serial: -1593901249
Nov 16 21:43:45 raspberrypi xl2tpd[324]: network_thread: recv packet from 1.1.1.1, size = 38, tunnel = 45444, call = 40246 ref=0 refhim=0
Nov 16 21:43:45 raspberrypi xl2tpd[324]: network_thread: recv packet from 1.1.1.1, size = 39, tunnel = 45444, call = 40246 ref=0 refhim=0
Nov 16 21:43:45 raspberrypi ifplugd(ppp2)[476]: ifplugd 0.28 initializing.
Nov 16 21:43:45 raspberrypi ifplugd(ppp2)[476]: Using interface ppp2/00:00:00:00:00:00
Nov 16 21:43:45 raspberrypi ifplugd(ppp2)[476]: Using detection mode: IFF_RUNNING
Nov 16 21:43:45 raspberrypi ifplugd(ppp2)[476]: Initialization complete, link beat detected.
Nov 16 21:43:45 raspberrypi xl2tpd[324]: network_thread: recv packet from 1.1.1.1, size = 18, tunnel = 45444, call = 40246 ref=0 refhim=0
Nov 16 21:43:45 raspberrypi xl2tpd[324]: network_thread: recv packet from 1.1.1.1, size = 36, tunnel = 45444, call = 40246 ref=0 refhim=0
Nov 16 21:43:45 raspberrypi ifplugd(ppp2)[476]: Executing '/etc/ifplugd/ifplugd.action ppp2 up'.
Nov 16 21:43:45 raspberrypi ifplugd(ppp2)[476]: client: Ignoring unknown interface ppp2=ppp2.
Nov 16 21:43:45 raspberrypi xl2tpd[324]: network_thread: recv packet from 1.1.1.1, size = 25, tunnel = 45444, call = 40246 ref=0 refhim=0
Nov 16 21:43:45 raspberrypi xl2tpd[324]: network_thread: recv packet from 1.1.1.1, size = 38, tunnel = 45444, call = 40246 ref=0 refhim=0
Nov 16 21:43:45 raspberrypi xl2tpd[324]: network_thread: recv packet from 1.1.1.1, size = 26, tunnel = 45444, call = 40246 ref=0 refhim=0
Nov 16 21:43:45 raspberrypi ifplugd(ppp2)[476]: Program executed successfully.
Nov 16 21:43:45 raspberrypi xl2tpd[324]: network_thread: recv packet from 1.1.1.1, size = 38, tunnel = 45444, call = 40246 ref=0 refhim=0
Nov 16 21:43:45 raspberrypi xl2tpd[324]: network_thread: select timeout
Nov 16 21:43:45 raspberrypi xl2tpd[324]: Maximum retries exceeded for tunnel 50858.  Closing.
Nov 16 21:43:45 raspberrypi xl2tpd[324]: Terminating pppd: sending TERM signal to pid 370
Nov 16 21:43:45 raspberrypi xl2tpd[324]: Connection 35420 closed to 2.2.2.2, port 52115 (Timeout)
Nov 16 21:43:45 raspberrypi xl2tpd[324]: network_thread: select returned error 9 (Bad file descriptor)
Nov 16 21:43:45 raspberrypi xl2tpd[324]: network_thread: select returned error 4 (Interrupted system call)
Nov 16 21:43:45 raspberrypi xl2tpd[324]: network_thread: select timeout
Nov 16 21:43:46 raspberrypi ifplugd(ppp0)[382]: Link beat lost.
Nov 16 21:43:46 raspberrypi ifplugd(ppp0)[382]: Exiting.
Nov 16 21:43:46 raspberrypi xl2tpd[324]: network_thread: recv packet from 1.1.1.1, size = 87, tunnel = 45444, call = 40246 ref=0 refhim=0
Nov 16 21:43:46 raspberrypi xl2tpd[324]: network_thread: select timeout
Nov 16 21:43:47 raspberrypi xl2tpd[324]: network_thread: select timeout
Nov 16 21:43:48 raspberrypi xl2tpd[324]: network_thread: select timeout
Nov 16 21:43:48 raspberrypi xl2tpd[324]: network_thread: recv packet from 1.1.1.1, size = 87, tunnel = 45444, call = 40246 ref=0 refhim=0
Nov 16 21:43:49 raspberrypi xl2tpd[324]: network_thread: select timeout

Paso 10: Deshabilitar los registros de depuración

Si ya todo está en orden, los registros de depuración ya no se requieren, por lo que se deben deshabilitar las entradas de logs parametrizando a “no” o directamente borrando los siguientes valores en /etc/xl2tpd/xl2tpd.conf:

debug network = no
debug tunnel = no
ppp debug = no

Configuración de un cliente VPN (Roadwarrior) en un teléfono móvil Android

Para finalizar la configuración del túnel necesitaremos configurar un cliente. En este caso, se realizará la conexión empleando un dispositivo Android 4.4.

Desde Settings -> Wireless & networks -> VPN Settings se crea la conexión. Como hemos empleado IPSEC con PSK, se escoge esta opción en la configuración de la VPN:

Screenshot_2015-11-16-18-56-28

En esta pantalla se ingresa la dirección IP del router y la clave PSK configurada en el fichero /etc/ipsec.secrets:

Screenshot_2015-11-16-18-56-48

Cuando la conexión esté creada, se puede ver una entrada como la siguiente:

Screenshot_2015-11-16-19-06-46

Al hacer clic, se preguntará por un nombre de usuario y una contraseña, que fueron especificados en el fichero /etc/ppp/chap-secrets:

Screenshot_2015-11-16-19-09-06

Si todo funciona bien, se debería ver el siguiente icono en la barra de notificaciones (un pequeño candado en la parte superior izquierda):

Screenshot_2015-11-16-19-12-48

Observando las propiedades se puede visualizar algo como lo siguiente:

Screenshot_2015-11-16-19-13-20

Configuración de un cliente VPN (Roadwarrior) en Microsoft Windows (XP/7/8)

Otra opción de conexión que se puede emplear es usar el cliente nativo de VPN incluido en los sistemas operativos Microsoft Windows. Las siguientes instrucciones son para Windows XP/7/8 pero el concepto es el mismo en otras versiones:

1. Ir a Panel de Control -> Centro de redes y recursos compartidos y escoger Configurar una nueva conexión o red

0

2. Dentro del asistente, escoger Conectarse a un área de trabajo. Dar Siguiente y crear una nueva conexión. Luego, escoger Usar mi conexión a Internet (VPN)

1

3. En este punto, indicar la dirección IP o nombre del host que se ha configurado como servidor de VPN y habilitar “No conectarse ahora; configurar para conectarse más tarde”

2

4. Escribir el nombre de usuario y la contraseña empleada para la autenticación de la conexión PPTP definida en el paso 4 y crear la conexión.

4

5. En este punto, la red ya está creada y debería desplegarse al dar clic sobre el ícono de red ubicado en la barra de tareas. Ir ahí, identificar la red creada, dar clic derecho y Propiedades

5

6. En la pestaña Seguridad escoger Protocolo de túnel de nivel 2 con IPSec (L2TP/IPSec) y habilitar Protocolo por autenticación por desafío mutuo (CHAP) y Microsoft CHAP versión 2 (MSCHAP v2)

6

7. Por último, en Tipo de VPN ir a Configuración avanzada y agregar la contraseña pre-compartida (Pre-Shared Key) definida en el paso 2.

7

8. Aqui ya se tiene la VPN definida. Ahora se procede a conectar y validar que todo haya quedado bien. Si hay problemas, revisar que el personal firewall permite las conexiones IPSEC.

18connecting

NOTA: Para revisar que la navegación esté siendo enrutada a través de la red al final del túnel VPN, se puede comprobar la dirección IP con la que se está navegando en http://www.whatsmyip.org.

Con todo esto, ya se tiene una VPN IPSEC completamente funcional, en ejecución y con cifrado robusto para tunelizar nuestro tráfico empleando una Raspberry Pi. Genial, ¿no?

giphy

NOTA: Si se quiere investigar acerca de configuraciones más complicadas, este enlace puede ser de utilidad.

Comments

  • Hola.
    Ante todo agradecer el manual. Está muy bien explicado.
    El problema es que efectivamente no es válido para Jessie.
    A ver si se encuentra solución.
    Saludos y gracias.

    Alicia November 26, 2016
    • Hola Alicia:
      Después de intentar aplicando mil configuraciones diferentes e incluso haciendo un downgrade de sistema operativo, el problema persistió. Finalmente, mi opción fue instalar Softether (https://www.softether.org/). El proceso de instalación lo puedes encontrar aquí: https://jlnostr.de/en/blog/raspberry-pi-sstp-vpn-server-installieren. En mi caso, activé la VPN sobre IPSEC pero también tienes la opción de emplear SSL (entre otras opciones). La consola de configuración la instalé en Windows y funciona de maravilla.
      Este manual lo he dejado aquí para referencia. En cuanto liberen una nueva versión de OpenSWAN lo probaré e intentaré actualizarlo.
      Muchas gracias por tu mensaje.

      david December 8, 2016
  • Hola que tal, buenas tardes, de antemano agradeciendo de la gran ayuda que nos has proporcionado por este medio, lei que no es compatible con la nueva version de raspbian, que version recomendarias saludos

    Aaron January 26, 2017

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.