miércoles, 20 de junio de 2018

Tu servidor OpenVPN en Raspberry PI


Afortunadamente o no, me toca hacer muchos viajes al año. Lograr conectarse a internet suele ser un gran desafío, en especial cuando somos paranoicos sobre la red a la cual nos vamos a conectar. En mi caso se torna "de vida o muerte" avisar de inmediato a mi familia que llegué sana y salva al país a donde viajaba... y el tema de conectarse a las redes WiFi del aeropuerto... uhmm..

La cuestión es que como no hay demasiadas alternativas a las redes WiFi que vamos encontrando por ahí, se torna indispensable contar con un servicio VPN. Tampoco nos vamos a confiar de esos servicios que se ofrecen gratuitamente, así que para solventar este problema vamos a levantar nuestro propio servidor VPN utilizando una Raspberry PI.

Partiré de la base de que ya tienen una RPI, con Raspbian instalado y actualizado. Por si alguno no lo ha hecho, aquí dejo la guía oficial de la página de Raspbian para que puedan realizar su instalación.

CONFIGURACIÓN DE IP ESTÁTICA EN LAN
Dentro de nuestra red LAN, cada dispositivo tiene asignada una IP de tipo privada. Lo primero que haremos será configurar una IP privada estática para la Raspberry PI, de manera que la misma pueda ser identificada siempre por la misma dirección. Para ello editaremos la configuración del archivo /etc/network/interfaces.

pi@vpn:~ $ sudo nano /etc/network/interfaces


En la configuración que vemos en la imagen, estamos utilizando la interfaz wlan0 para conectarnos a internet. La IP estática será la 192.168.0.30 y luego tenemos los parámetros acordes a la configuración de red, en mi caso esos son los parámetros correctos, podrían variar en tu red.

Al final vemos una línea "pre-up /home/pi/openvpn-fw-rules.sh" de la cual hablaremos más adelante.

Guardando esa configuración, nuestra RPI siempre tendrá la misma IP privada, aunque podemos opcionalmente "avisarlo" en el router también, especificando la dirección MAC de la RPI.


CONFIGURACIÓN DE NO-IP (opcional)
Ya hemos configurado una IP privada estática para nuestra RPI, un paso necesario para algo que veremos posteriormente. Sin embargo, nuestra IP pública podría ser dinámica y eso significa un problema.

Si nuestro I.S.P nos ha otorgado una IP pública estática, este paso no es necesario. Si en cambio, nuestra IP pública cambia cada cierto tiempo, o cuando el router se reinicia, tendremos que solventar el problema utilizando un DNS.

Una opción para esto es el servicio de no-ip.com, que nos ofrece lo que necesitamos de forma gratuita por 30 días, si lo queremos extender en el tiempo tendremos que pagar, pero el precio es aceptable.


Una vez que nos registramos en no-ip.com, nos dirigimos a Dynamic DNS -> Create Hostname y nos inventamos un nombre de dominio que nos guste y esté disponible.

Tras ello, vamos a instalar en nuestra RPI el software de NO-IP que se encargará de actualizar en el servicio la nueva IP pública que tengamos.

Ejecutamos en la RPI los siguientes comandos:
cd /usr/local/src
wget http://www.no-ip.com/client/linux/noip-duc-linux.tar.gz
tar xzf noip-duc-linux.tar.gz
cd no-ip-2.1.9
sudo make
sudo make install


Finalmente, añadiremos al final del archivo /etc/rc.local la siguiente línea:

/usr/local/bin/noip2 & 

Eso es para que cuando iniciemos la RPI, se inicie el programa de NO-IP.


CONFIGURACIÓN DE OPENVPN CON PIVPN
Continuaremos configurando OpenVPN en nuestra RPI. Para ello haremos uso de PIVPN, un proyecto que facilita en gran manera este proceso.

Abrimos una terminal en nuestro Raspbian y ejecutamos:
curl -L https://install.pivpn.io | sudo bash


Inmediatamente nos aparecerá una pantalla de configuración sobre la que iremos avanzando paso a paso indicando los pertinentes parámetros para nuestro servidor VPN.


Lo primero que nos dice es que necesita una IP privada estática, en la próxima pantalla nos mostrará la configuración de red actual, la cual es la que hemos hecho en el primer paso de esta guía. Le diremos que utilice esa misma y continuamos.

En el siguiente paso nos listará los usuarios diponibles en nuestra RPI preguntándonos sobre cual queremos que se configure OpenVPN.


Continuará preguntándo si deseamos que las actualizaciones de seguridad se hagan automáticamente, le indicaremos que si. Luego tendremos que especificar el protocolo y el puerto en que funcionará nuestro servidor VPN.




En mi elección funcionará sobre TCP en el puerto 3128. Los motivos de esa configuración es porque suele ser útil para evadir algunos portales cautivos :o. Sin embargo, ustedes pueden elegir el protocolo y el puerto que deseen.

Continuamos indicando la fortaleza del cifrado, pueden elegir entre 2048 y 4096.


Luego nos preguntará si queremos usar las mejoras de la versión de OpenVPN 2.4, le indicaremos que si.

El siguiente es un paso fundamental, nos preguntará si utilizaremos la IP pública que tenemos o un DNS. Como ya he mencionado antes, si la IP pública que tenemos es estática, dejaremos esa configuración. Si por el contrario hemos utilizado un DNS e instalado NO-IP, seleccionaremos la opción DNS Entry y escribiremos allí el hostname que hayamos creado en no-ip.com


We finished!


Nuestro servidor OpenVPN ya está configurado!.

CONFIGURAR ROUTER Y REGLAS DEL FIREWALL
Nos falta un detalle más que es fundamental para que todo funcione: abrir los puertos y redireccionar el tráfico que recibe nuestro router al puerto 3128 hacia nuestra RPI.

Recuerdan la línea "pre-up /home/pi/openvpn-fw-rules.sh" en la configuración de /etc/network/interfaces? El archivo openvpn-fw-rules.sh tiene las reglas de iptables necesarias para poder recibir correctamente las conexiones en nuestro servidor VPN. Su contenido es el siguiente:


#!/bin/sh
iptables -A INPUT -i wlan0 -m state --state NEW -p tcp --dport 3128 -j ACCEPT
iptables -A INPUT -i tun+ -j ACCEPT
iptables -A FORWARD -i tun+ -j ACCEPT
iptables -A FORWARD -i tun+ -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i wlan0 -o tun+ -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o wlan0 -j MASQUERADE



Tengan en cuenta modificar las interfaces si están utilizando eth0 en lugar de wlan0.

Por otro lado, entraremos a la configuración de nuestro router y en la pestaña de port forwarding haremos la redirección del tráfico del puerto 3128.


Ya tenemos todo listo! :).

CONECTARSE AL SERVIDOR OPENVPN
Ahora que ya tenemos el servidor configurado y andando, veamos cómo conectarnos.
Primero debemos crear en la RPI un perfil para el cliente, en realidad, debemos crear tantos perfiles como dispositivos vayamos a conectar a nuestro servidor VPN. Para ello utilizaremos el comando "pivpn add"





Tal como se observa al finalizar el proceso, el archivo de configuración (.ovpn) para el perfil que hemos creado se ha copiado a /home/pi/ovpns/.



Ese archivo debemos copiarlo al dispositivo que se conectará al servidor VPN.
Por supuesto, el dispositivo debe tener instalado el cliente de OpenVPN, en el sitio web los tenemos disponibles para descargar: https://openvpn.net/.

En mi caso he copiado el perfil android-home.ovpn a mi teléfono Android. En la aplicación de OpenVPN importamos el archivo .ovpn y nos conectamos simplemente haciendo click sobre el nombre del mismo.


Eso es todo! espero que les sea de utilidad :)
Hasta la próxima!

Author: Sheila A. Berta
Twitter: @UnaPibaGeek.
Web: www.semecayounexploit.com.

No hay comentarios.:

Publicar un comentario