En el post de hoy vamos a instalar un servidor VPN para poder conectarnos desde cualquier lado de forma segura a nuestra red. En este caso utilizaremos un OpenVPN dockerizado, sobre nuestra RaspberryPi; de esta forma conseguimos utilizar una mínima infraestructura, con un bajo consumo de energía y de recursos.

En el caso que tu router tenga servidor VPN obvia esta información 😀

En anteriores Post hemos hablado de como instalar Raspbian y como instalar docker, tras ellos continuamos con el post de hoy.

Instalar cualquier imagen de docker en Raspberry, tenemos que tener cuidado, ya que contamos con restricciones a nivel de performance de la propia Raspberry (procesador, arquitectura, etc…).

Vamos a instalar una imagen que aunque no es la oficial de OpenVPN, sabemos que funciona sobre Raspberry PI, en este caso será evolvedm/openvpn-rpi.

Es necesario que nuestro router abramos un puerto externo, y lo redirijamos al puerto que queramos utilizar en nuestro docker para la conexión VPN. En este caso yo he abierto el 1194, y en docker usaré también el 1194.

Necesitamos conocer IP pública de nuestro router, para configurar en nuestro servidor VPN, podéis utilizar cualquier servicio DynDNS o No-IP si queréis conectar siempre a la misma dirección y olvidaros de cambios de IP recurrentes. Yo de momento he vinculado la IP pública(dinámica) de mi casa con una entrada DNS de nuestro hosting(ip.labsdemo.com). Si queremos saber cual es la IP de nuestro router simplemente tenemos que buscar cualesmiip en cualquier buscador o desde la terminal:

curl ifconfig.me

Vamos a crear un volumen, donde se guardará toda la información de forma persistente de nuestro contenedor y no se elimine cuando se pare, vamos a inicializar la configuración, e indicar cual será la dirección ip de nuestro servidor VPN.

Ejecutamos docker, le especificamos el volumen que vamos a utilizar con la ruta mapeada interna del contenedor, usamos la imagen evolvedm/openvpn-rpi y comenzamos la configuración general indicandole ovpn-genconfig y la ruta externa de nuestro servidor VPN.

docker run -v ovpn_data:/etc/openvpn --rm evolvedm/openvpn-rpi ovpn_genconfig -u udp://ip.labsdemo.com

Iniciamos la configuración de la entidad certificadora:

docker run -v ovpn_data:/etc/openvpn --rm -it evolvedm/openvpn-rpi ovpn_initpki nopass

Esto tarda bastante en nuestras Raspberrys.

Iniciamos el servicio y lo configuramos para que esté siempre encendido:

docker run -v ovpn_data:/etc/openvpn -d -p 1194:1194/udp --cap-add=NET_ADMIN -e --restart=always --name ovpn_server evolvedm/openvpn-rpi

En el caso de haber configurado un puerto especial en el router, tenemos que especificarlo puerto que le va a llevar a la raspberry 3000, puerto donde va a escuchar el docker 1194, sería 3000:1194

Creamos una variable con el nombre del usuario que queremos generar:

CLIENTNAME="vjrodilla"

Generamos el perfil de usuario:

docker run -v ovpn_data:/etc/openvpn --rm -it evolvedm/openvpn-rpi easyrsa build-client-full $CLIENTNAME

Nos solicitará una contraseña para el perfil

Exportamos el certificado:

docker run -v ovpn_data:/etc/openvpn --rm evolvedm/openvpn-rpi ovpn_getclient $CLIENTNAME > $CLIENTNAME.ovpn

Si listamos la ubicación donde nos encontramos en el terminal, veremos que tenemos un vjrodilla.ovpn, lo exportamos al dispositivo donde queramos configurar la VPN y lo importamos.

En mi caso lo he probado con mi movil, al tener Internet sin estar conectado con el Wifi, me he descargado la aplicación de OpenVPN e importo el vjrodilla.ovpn

Le doy a conectar, y … eureka!

Si realizamos vemos cual es la IP que estamos utilizando para navegar:

Es la IP de mi servidor VPN, la IP publica del router de casa.

Con esto y un bizcocho…!!