Desde hace unos años, gracias a un regalo que me hizo el rey mago autor del blog Babuleando.com, dispongo de una Raspberry Pi 2 y le doy bastante uso casero a nivel de pequeño servidor.

Ayer por la noche se me ocurrió probar a instalar un servidor VPN en ella, pensando en las ventajas que esto podría conllevar de cara a cuando me encuentre fuera de casa: acceder a servidores privados conectados en red local pero no accesibles desde Internet, reconfigurar mi robot aspirador Xiaomi Vacuum e incluso navegar haciendo uso de mi conexión en casa estando en China.

¿Qué es una VPN?

Bueno si has llegado hasta este post, seguramente ya sepas qué es una VPN, aún así, voy a describir brevemente qué es y qué usos puede tener.

VPN es la abreviatura de Virtual Private Network, o en español, Red Privada Virtual. Las VPNs actúan como un tunel que te permite conectarte a Internet haciendo uso de una conexión diferente a la que tienes. Te pongo un ejemplo y lo verás más claro:

  • Te encuentras conectado a Internet con tu ordenador a través de tu proveedor español (Yoigo, Jazztel, Movistar, Vodafone…) y lees que en un sitio web tienes restringido el acceso desde tu país, solo permiten visualizarlo desde Estados Unidos. Tu ip inicial la observas en Cualeesmiip.com y es una IP típica de tu proveedor de red.
  • A continuación te instalas un cliente VPN en tu ordenador y desde este, seleccionas que quieres conectarte desde un servidor alojado en Estados Unidos.
  • Vuelves a acceder a Cualeesmiip.com y la IP ha cambiado.
  • Además accedes al sitio web inicial y ya te permite visualizarlo correctamente.

¿Qué ha pasado? Básicamente que has pasado de estar conectado directamente a Internet a través de tu proveedor español, para estar conectado desde un proveedor Estadounidense. Como no hay nada mejor que una imagen para describir este hecho, os la dejo a continuación:

¿Qué ventajas tiene navegar desde un VPN?

Un VPN (privado o de pago) ofrece una serie de ventajas a nivel de seguridad. Entre las ventajas más destacadas tenemos las que se citan a continuación:

1.Acceso remoto a la oficina para teletrabajar

Además, si tenemos acceso a datos en una red local, por ejemplo en la red local de nuestro trabajo, no accesibles desde Internet, si podemos conectarnos a través de un VPN a esa red local (sin estar físicamente en la oficina), podremos acceder a dichos datos como si estuviéramos físicamente allí.

2.Evitar hackeos y robo de información por parte de nuestro proveedor de Internet (ISP)

Nos permite navegar teniendo una serie de ventajas a nivel de posibles ataques de hackers y robo de información personal.

3. Evitar que tu proveedor de Internet acceda a tus datos

Nuestro proveedor de Internet no podrá tener datos sobre las páginas webs que visitamos o la utilización que hacemos de Internet en general.

4. Esquivar la censura

Si viajas a un país que posee un gran Firewall global, como por ejemplo China, donde está restringido el acceso a aplicaciones y webs como: Twitter, Facebook, Instagram y todas las apps de Google, podrías navegar sin problema y mantener el uso de todas estas apps gracias al VPN.

5. Conectarte de forma segura a redes WiFi públicas

Este punto es importantísimo. Las redes WiFi públicas son muy poco recomendables por la facilidad que existe a la hora de obtener información por parte de los proveedores de dichas WiFis o de usuarios malintencionados de las mismas que se encuentren conectados a la misma red que tú. Con un VPN, no es posible que roben información.

Instalando OpenVPN en una Raspberry Pi

Partiendo de una Raspberry Pi que tenga instalado como distribución Raspbianlos comandos que debemos ejecutar son los siguientes:

1.Para comenzar la instalación de pivpn:

curl -L https://install.pivpn.io | bash

2.Tras este, comenzamos con la instalación y en esta presentación podéis ver una por una todas las pantallas que tenemos que aceptar:

El pase de diapositivas requiere JavaScript.

Destacar los siguientes elementos de la configuración:

  • Cuando se nos solicite el puerto a utilizar, es recomendable modificarlo y no mantener el 1194 que trae por defecto.
  • Antes de la pantalla en la que se aprecia vpn.jabenitez.com se nos solicita que indiquemos si deseamos indicar una entrada DNS o directamente una IP. Si tenéis oportunidad, podéis hacer uso del servicio gratuito de https://my.noip.com y aunque no tengáis una ip estática en casa, podréis mantener siempre un subdominio que apunte a ella. Para los que no los conozcáis, noip permite generar un script en el servidor que autoactualice la IP a la cual debe apuntar vuestro subdominio.
  • Tened paciencia en la pantalla en la que se genera la clave de 2048-bit porque tarda aproximadamente unos 20 o 25 minutos. Atención, ACTUALIZACIÓN (8 de mayo de 2020)*. 
  • Recuerda que si quieres acceder desde Internet, fuera de tu red local, a tu VPN, deberás abrir el puerto UDP de tu router que has elegido anteriormente, para la IP de tu raspberry. Es decir, si tu raspberry tiene como IP local 192.168.1.128 y abres el puerto 1194, en el panel de configuración de tu router deberás abrir el puerto UDP 1194 y decir que apunte al puerto 1194 de la ip local 192.168.1.128, sino, no podrás conectarte a tu VPN desde fuera de casa.

Actualización (8 de mayo de 2020):

Parece ser que actualmente la clave que s egenera es ECC-512 bit, según se puede ver en el repositorio github de pivpn:

https://github.com/pivpn/pivpn/issues/53

An ECC-256 key is generally equivalent to an RSA 2048-bit key, and an ECC-512 bit key is equivalent to RSA 4096-bits. If you’re going to choose just one, my vote is for ECC-512.

Creando usuarios con OpenVPN

El siguiente paso tras la instalación es añadir un usuario. Para ello únicamente debes escribir en el terminal:

pivpn add

Escribes un nombre para identificar a dicho usuario cuando se conecte al VPN y una contraseña de acceso.

Una vez agregado, debes tener instalado en tu móvil un cliente de OpenVPN. En mi caso, tengo un dispositivo Android, así que descargué:

Seguidamente te diriges al directorio /home/pi/ovpns/ y teniendo Python 3 instalado, estando conectado con tu teléfono móvil a la misma red local, puedes levantar un servidor HTTP rápidamente en la raspberry y conectarte a ella desde el navegador web de tu teléfono móvil. Para levantar el servidor debes ejecutar en la Raspberry:

python3 -m http.server 8080

Tras esto, abres el navegador de tu móvil y conectas a la ip de tu Raspberry, que en mi caso era mediante http://192.168.1.128:8080 , en el tuyo tendrás que ver qué ip tiene tu Raspberry (puedes verla ejecutando el comando ifconfig).

Una vez descargado, desde OpenVPN puedes importar el perfil creado clickando en import profile y eligiendo el fichero que hemos descargado previamente con extensión .ovpn.

El pase de diapositivas requiere JavaScript.

Y a partir de aquí ya estaremos disfrutando de estar conectados desde nuestra VPN particular :).

Espero que te haya servidor y si lo crees conveniente, se agradece un comentario y la difusión del artículo.