Instalación de OpenVPN en Raspberry Pi

Una de las principales razones por la que me compré una Raspberry Pi era el poder tener una VPN (Red Virtual Privada), sale mas barata y productiva que comprar un router neutro.

Introducción

A grandes rasgos, cuando nos conectamos a un servidor VPN, todo el trafico de datos que se genera entre nosotros y el servidor VPN irá encriptado a través de un túnel, da igual que estemos conectados dentro de nuestra casa que desde una red publica, todos los datos irán encriptados.

Por ejemplo, si queremos consultar nuestro correo electrónico o acceder a nuestra red social favorita desde nuestro dispositivo ( teléfono, ordenador, tablet, etc. ) primero se conectará hasta el servidor VPN, que como he dicho antes se hará de una forma enccriptada, y el servidor VPN será el que nos dé el acceso a Internet, ya si encriptar, y nos devolverá la información solicitada otra vez a través del túnel encriptado.

Posibles usos

Te puedes preguntar “Vale ¿ y para que quiero yo esto?”, pues muy fácil, imagínate que estás en el hotel disfrutando de tus vacaciones y el hotel tiene un red wifi publica, la cual quieres usar, pero claro, como vas a consultar tu correo o red social en una red publica, puede haber alguien husmeando el tráfico de esa red, y ya te puedes imaginar las consecuencias.

Pero si disponemos de una VPN , podemos conectarnos tranquilamente a esa red publica, ya que nuestro trafico irá encriptado hasta nuestro servidor VPN, que en nuestro caso será nuestra rpi que esta en nuestra casa, parecerá que estamos navegando por internet desde nuestra casa, ya que es la VPN quien nos da el acceso a internet, la red wifi publica solo la usaremos para conectarnos de una forma segura hasta nuestra rpi.

También podemos usar una VPN para evitar bloqueos por geolocalización (podemos simular que estamos en Suiza utilizando una VPN que esté allí ), o tener varios dispositivos en diferentes sitios físicamente, y utilizando la misma VPN formaran parte de una misa red local, etc.

VPN desde cualquier lugar

Por defecto el servidor VPN de la rpi escuchará las peticiones de conexión por el puerto 4441 si es trafico UDP o 1194 si es TCP. por lo que deberemos redirigir todas las peticiones de ese puerto a la dirección IP de la rpi. Esto lo haremos dentro de la conflagración del router, como vimos en el articulo anterior.

Evidentemente cuando estamos fuera de casa debemos de conocer la dirección IP publica de nuestro router para poder conectarnos a la VPN, el problema es que salvo que tengas una IP pública fija, es decir que siempre sea la misma, la mayoría de los proveedores de Internet utilizan IP dinámicas, cada cierto tiempo cambian la dirección IP asignada a nuestro router.

Para solucionar esto podemos darnos de alta en servicios como duckdns o noip, que mediante un nombre de dominio tipo micasa.duckdns.com nos permitirá acceder al router de nuestra casa sin necesidad saber su dirección IP, tal y como vimos en este otro artículo.

Ip fija para la rpi

Todo lo explicado en el paso anterior no servirá de nada si nuestra rpi no tiene una IP fija dentro de nuestra red local, ya que el router debe redirigir el trafico que le llegue al puerto que hemos configurado en el servidor VPN, hacia nuestra rpi que es la que hace de servidor VPN.

Si la dirección IP de la rpi va cambiando, el router puede mandar las peticiones a otro equipo que no sea el servidor VPN, por ejemplo, si apagas la rpi, el router puede asignar esa IP que acaba de quedar libre a otro dispositivo que se conecte a nuestra red local, cuando volvamos a encender la rpi, el router le asignará otra dirección IP a la que tenia anteriormente porque ya está siendo utilizada por otro dispositivo.

Hay mucha gente que configura la rpi dándole un IP fija desde el sistema pero se pueden encontrar con el problema que acabo de explicar.

La mejor forma es asignar y reservar una dirección IP al la rpi desde el router.

Utilizando PiVPN para montar nuestra VPN

Tras esta pequeña introducción de lo que es una VPN, sus posibles usos, y preparación de la rpi, vamos a ver como crear nuestra propia VPN en la rpi.

La forma mas fácil es utilizando el script PiVPN, que mediante la ayuda de una serie de pantallas que debemos ir rellenando nos permitirá crear de forma sencilla una VPN en cuestión de minutos.

Instalación

Como siempre lo primero que debemos actualizar el sistema antes de comenzar con la instalación, nos conectamos mediante ssh a la rpi y actualizamos:

sudo apt-get update && sudo apt-get upgrade -y

Nos conectaremos via ssh a la rpi y para comenzar con la instalación ejecutamos:

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

A partir de ahora debemos de ir rellenando las diversas pantallas que nos van apareciendo, la primera pantalla que aparce nos informa que transformará nuestra rpi en un servidor VPN

La siguiente pantalla nos avisa de que nuestro servidor VPN debería de tener una dirección IP fija, tal y como explique antes.

Nos pregunta si queremos usar la actual configuración de red como nuestra dirección IP fija.

Nos avisara que de que si no hemos reservado la dirección IP de la rpi en el router, es posible que el router le asigne dicha dirección IP a otro dispositivo, como explique párrafos atrás.

Nos informa de que deberemos elegir un usuario local de la rpi para la configuración del servidor.

En este caso vamos a utilizar el usuario que viene por defecto, aunque se puede utilizar cualquier otro, siempre y cuando no sea un administrador del sistema por motivos seguridad.

Nos informa que es recomendable activar las actualizaciones desatendidas y de que ademas de vez en cuando es bueno reiniciar el servidor para que estas actualizaciones se instalen completamente.

Ahora nos pregunta se queremos activar las actualizaciones desatendidas.

Al decirle que si, buscara si hay alguna actualización antes de continuar.

Debemos de elegir el protocolo que vamos a usar, en mi caso elijo UDP.

Elegimos el puerto por el que escuchara el servidor VPN, por defecto es el 1194, yo recomiendo cambiarlo, primero por seguridad y segundo porque hay sitios que bloquean el trafico hacia ese puerto ya que es el habitual en VPNs

Confirmamos el puerto

Elegimos el tamaño de la clave, seleccionamos la recomendada, 2048 bits.

Nos avisa de que se van generar la claves

Comienza la generación de claves, tardara un buen rato.

Una vez terminado el proceso de generación de claves, nos preguntará la forma en la que se acedará al servidor, bien mediante la IP publica que nos da nuestro proveedor de Internet, que normalmente suele cambiar con el problema de que el servidor sea inaccesible, o mediante un nombre de dominio, que seria la opción mas correcta.

Te recuerdo que en este articulo explico como instalar duckdns en la rpi. En el ejemplo elegimos usar un DNS publico

Introducimos nuestro DNS

Confirmamos los datos

Ahora seleccionamos el servidos de DNS de Internet que usará nuestra VPN, yo suelo utilizar las DNS de google.

Nos indica la forma de crear usuarios, la forma de obtener ayuda y la ruta del log de la instalación.

Para finalizar se nos recomienda reiniciar la rpi para terminar la instalación y nos pregunta si queremos reiniciar el sistema o seguir, reiniciamos.

Creación de usuarios

Tras reiniciar deberemos crear los clientes que queremos que se conecten al servidor VPN.

Lo haremos con el siguiente comando

pivpn add

Nos pregunta por el nombre del usario que vamos a crear

Enter a Name for the Client:  carlos

Introducimos la contraseña del usuario

Enter the password for the client:

Confirmamos la contraseña

Enter the password again to verify:  

Y nos genera los certificados necesarios

spawn ./easyrsa build-client-full carlos

Note: using Easy-RSA configuration from: ./vars
Generating a 2048 bit RSA private key
................................................................................................................................................+++
....................................................+++
writing new private key to '/etc/openvpn/easy-rsa/pki/private/carlos.key'
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
-----
Using configuration from /etc/openvpn/easy-rsa/openssl-1.0.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName            :ASN.1 12:'carlos'
Certificate is to be certified until Jun  9 20:19:13 2027 GMT (3650 days)

Write out database with 1 new entries
Data Base Updated
Client's cert found: carlos.crt
Client's Private Key found: carlos.key
CA public Key found: ca.crt
tls-auth Private Key found: ta.key


========================================================
Done! carlos.ovpn successfully created!
carlos.ovpn was copied to:
  /home/pi/ovpns
for easy transfer.
========================================================

Además de los certificados, se creará una carpeta llamada ovpns en /home/pi y en el interior de la misma tendremos un fichero con el nombre del usuario que hemos creado y con la extensión ovpn.

Éste fichero es el que usará el cliente VPN para conectarse al servidor.

Este proceso lo deberemos hacer por cada nuevo usuario al que demos acceso al servidor.

Configuración clientes

Tras instalar y configurar nuestro servido VPN, el siguiente paso será configurar los clientes que se conectaran al servidor.

Solo pondré los ejemplos de configuración sobre clientes GNU/linux y dispositivos con android, lo siento, pero no uso Windows y no puedo poner capturas de pantalla del proceso ;-)

Clientes Linux

Vamos a configurar un cliente para trabajar sobre nuestro servidor VPN, empezaremos a configurarlo sobre GNOME.

Tendremos que tener guardado el fichero .ovpn que generaremos cuando añadimos nuestro usuarios al servidor VPN , tal y como vimos en el articulo anterior.

Gnome

Empezamos abriendo Configuración y seleccionamos Red

Pulsaremos sobre + para añadir una nueva conexión

Seleccionamos Importar desde un archivo

Buscamos y seleccionamos el fichero .openvpn

Como vemos en la captura, tendremos rellenos todos los campos menos la contraseña, recordar que esta es la contraseña que nos pidió cuando creamos el usuario VPN.

Ponemos la contraseña y pinchamos en Añadir.

Con estos pasos ya tendremos creada nuestra conexión con el servidor VPN. Solo no que da activarla

Lo podemos activar desde Red

O desde la barra de notificaciones

Una vez realizada la conexión podes veis que el icono de red ha cambiado.

KDE

El proceso es similar, desde Preferencia del Sistema -> Red seleccionamos Conexiones

Pulsaremos sobre + para añadir una nueva conexión

Seleccionamos Importar conexión VPN

Buscamos y seleccionamos el fichero .openvpn

Le decimos que si, para que importe copie el certificado a nuestro home

Ponemos la contraeña y pinchamos en Aceptar.

En las redes disponibles ahora veremos la red VPN que acabos de crear, pulsamos en conectar

Podéis ver que ahora estamos conectados a la red usando la conexión VPN, además fijaros que en el icono de red aparece un candado.

Clientes Android

Al igual que antes, tendremos que tener accesible el fichero .ovpn del usuario, ademas instalaremos la aplicación OpenVPN Connect para android, lo puedes hacer desde f-droid o desde google play

Ejecutamos la aplicación y pulsamos en los tres puntos para que aparezca el menú y seleccionamos import.

Ahora vamos a importar el certificado, en mi caso lo tengo guardado en la memoria interna del teléfono.

Navegamos por las carpetas donde tenemos el fichero .ovpn

Introducimos la contraseña del usuario VPN.

Ya estaremos conectados con nuestro servidor VPN

En mi caso uso duckdns para acceder al servidor VPN.

Comprobando que funciona

Podemos comprobar fácilmente si estamos conectados al servidor VPN desde el teléfono móvil.

Sin estar conectados al servidor VPN miramos cual es la dirección IP que tenemos

Ahora nos conectamos al servidor mediante OpenVPN Connect y volvemos a mirar que dirección IP tenemos asignada,

Además la nueva dirección IP será la dirección IP publica que tu proveedor de Internet haya asignado a tu router, lo puedes comprobar desde cualquier equipo de tu red.

comentario powered by Disqus