Hemos visto en anteriores tutoriales cómo instalar un sistema operativo ligero a una raspberry y posteriormente cómo instalarle y configurarle Pi-Hole para eliminar la publicidad en nuestra red doméstica, todo explicado de forma que cualquier persona pueda montarlo en su casa. Ahora veremos cómo montar un servidor VPN en la misma raspberry para bloquear la publicidad cuando estemos fuera de casa (Sobre 3G o sobre una Wifi que no sea la nuestra) y que además nos permita acceder desde cualquier lado a los dispositivos de nuestro hogar.

1) Requisitos.

Para poder seguir este tutorial necesitamos que tengáis una Raspberry con Raspbian instalado. Si habéis seguido el tutorial para instalar Raspbian Lite que hemos publicado, entonces ya tenéis la base preparada.

Necesitamos también que el proveedor de internet os dé una dirección IP pública. No es necesario que tengáis una IP fija, pero sí una que sea públicamente accesible por internet. Está muy de moda que los proveedores de internet compartan una única dirección IP pública con varios clientes, y si tú eres uno de los afectados por esta práctica, este tutorial no te va a funcionar hasta que no os cambien a una IP pública sólo para vosotros. Con algunos proveedores (me viene a la cabeza Pepephone) esto se soluciona llamando a su servicio técnico y solicitando una dirección IP privada, pero no tengo nada claro que sea algo tan sencillo con algunos otros (y me viene a la cabeza Vodafone). Tendréis que averiguar qué tipo de conexión os da vuestro proveedor, y en caso de tener ip privada mirar si podéis realizar alguna gestión para que os den una IP pública.

Por cierto… si únicamente necesitáis un VPN para acceder remotamente a vuestros equipos, entonces podéis ir directamente al punto 2 del tutorial. Pero si además queréis quitar la publicidad en vuestros dispositivos móviles, entonces necesitamos que la Raspberry tenga instalado Pi-Hole. Hemos explicado cómo hacerlo en este tutorial.

2) Vamos a registrarnos en un servicio de DNS dinámico.

Supongamos que ya habéis comprobado que vuestra conexión disfruta de una IP accesible públicamente. Si tienes una conexión a internet doméstica, lo más probable es que la IP que te otorga tu ISP sea dinámica. Las direcciones IP fijas suponen un coste mayor en la conexión (tendrías que pagar más cada mes a tu ISP por disfrutar de una IP Fija) y suelen estar destinadas a usos empresariales.

El tener una IP dinámica tiene una gran desventaja, y es que cada vez que enciendes y apagas el router, tu dirección IP cambia. Desde fuera de nuestra casa necesitamos conectarnos a algo «fijo», puesto que si ha habido algún apagón momentáneo en nuestro hogar la IP pudo haber cambiado. Por poner un simil, es como si tienes que llamar a un amigo pero cada poco tiempo está cambiando de número de teléfono. Si no tienes algún servicio que te diga en cada momento qué número tiene, va a ser difícil contactar con él. Para resolver este problema están los servicios de DNS dinámico. Vamos a usar uno de ellos para que un programa en la raspberry esté diciéndole contínuamente a sus servidores cuál es nuestra IP en cada momento. De esta forma, este servicio nos permitirá tener una dirección web que apunta siempre a nuestra raspberry, aunque nuestra IP esté cambiando contínuamente.

¿Cuál usar? Pues hay varios y esto ya es cuestión de gustos, pero como tengo que centrarme en alguno vamos a usar DNS Exit, que suele funcionar bastante bien.

Primero nos registramos en el servicio en esta página, poniendo nuestros datos.

Una vez registrados, nos vamos a «Sign up services» en la columna de la izquierda.

Entre las opciones que hay, debajo de todo nos vamos a «free second level domains».

Y ahí completamos las distintas opciones. Ponemos un nombre de dominio (será algo del tipo «loquesea@linkpc.net»), la dirección ip nos viene ya cubierta (la que tenemos en este momento) y dejamos marcada la casilla de ip dinámica.

En el siguiente paso nos dice que se ha creado correctamente el dominio de segundo nivel. Debemos pulsar el botón de «Download Dynamic DNS Clients» para descargarnos un programa que nos permita actualizar ese nombre de dominio cada vez que cambie nuestra dirección IP.

En la pantalla que nos aparece, en la zona de «Linux/Unix/MacOSX» debemos pulsar con el botón derecho del ratón en el archivo que tiene la extensión «.tar.gz». Pulsamos en «copiar la ruta del enlace». Así tendremos la ruta del enlace en el portapapeles y la podremos pegar en otro sitio. Si queréis, pegad ese enlace en algún archivo de texto para tenerlo a mano y poder usarlo más adelante.

Ahora debemos acceder al terminal de nuestra raspberry (ya sea mediante Putty o usando el comando SSH desde otro terminal). Antes de empezar con la instalación del cliente de DNSExit vamos a hacer un ajuste (porque la versión actual del cliente tiene un pequeño fallo y si no hacemos esto obtendremos un error más adelante. Si hacemos este pequeño «apaño» nos va a ir todo bordado). Tenemos que ir a la ruta /etc y ahí crear un archivo llamado dnsexit.conf. Para ello teclearemos lo siguiente:

cd /etc
sudo nano dnsexit.conf

Vamos a dejar en archivo en blanco. Simplemente tecleamos «Control + O» para guardar cambios y salimos del programa pulsando «Control + X». Ahora vamos a darle permisos a ese archivo para que el programa de instalación pueda escribir en él, con este comando

sudo chmod 777 dnsexit.conf

Con estas dos cosas ya hemos dejado todo preparado para realizar la instalación. Vamos a irnos a la carpeta de nuestro usuario para empezar a realizar la instalación. Lo haremos con este comando.

cd /home/pi

hora vamos a teclear lo siguiente para, primero, crear la carpeta «exitdns» (la llamamos así para diferenciarla de una segunda carpeta que se creará dentro). El segundo comando es para situarnos dentro de esa ruta.

mkdir exitdns
cd exitdns

Ahora debemos poner «wget» y pegar la dirección que copiamos antes, con el enlace de descarga del programa que vamos a instalar. Quedará algo así.

wget http://downloads.dnsexit.com/ipUpdate-1.71.tar.gz

Una vez realizada la descarga, debemos descomprimir ese archivo con este comando.

tar xzvf ipUpdate-1.71.tar.gz

De forma que lo que tengamos en la pantalla debería ser algo similar a esto.

Nos metemos dentro de la carpeta que acabamos de descomprimir con este comando

cd dnsexit

Y antes de continuar nada vamos a escribir este comando para instalar unas librerías que necesita el programa para funcionar. Va a instalar bastantes cosas, así que no os asustéis.

sudo apt-get install libwww-perl

y vamos a hacer también un pequeño ajuste para que el programa funcione correctamente, introduciendo este comando:

export PERL5LIB=/home/pi/exitdns/dnsexit/

Ahora ya podemos lanzar el programa de instalación de DNSExit mediante este comando.

./setup.pl

Ese comando nos va a preguntar varias cosas:

  • Nuestro usuario de DNSExit (el usuario que hemos creado para logarnos en la página web de DNSExit).
  • La contraseña de ese usuario
  • El dominio que quieres que se actualice automáticamente (el sistema permite actualizar más de uno). Como sólo tenemos uno, seleccionamos la opción «0».
  • Los distintos hosts dentro del dominio. De nuevo volvemos a tener uno sólo, así que seleccionamos la opción «0».
  • Nos pregunta si queremos correr este programa como un demonio (lo equivalente a un servicio en Windows). Eso hará que el programa corra siempre en segundo plano actualizando la ip siempre que se cambie. Tecleamos «yes»
  • Nos pregunta la frecuencia de las actualizaciones. 10 Minutos entre actualizaciones es más que suficiente, así que ponemos «10».
  • Nos pregunta si queremos que este demonio se «autoarranque» cada vez que se reincie la Raspberry. Escribimos «yes».
  • Nos pregunta el directorio dónde va a instalar el script. Dejamos puesta la opción «0».

Y con esto queda lista esta parte. Ahora cada vez que cambie nuestra IP, en un intervalo de un máximo de 10 minutos el servicio de DNSExit se enterará y la direccion que hemos creado apuntará a la nueva IP.

3) Instalamos PiVPN en la Raspberry.

Al igual que con Pi-hole, la instalación de PiVPN es muy sencilla y sólo debemos responder a preguntas. Debemos acceder de nuevo al terminal de nuestra raspbery y teclear el siguiente comando:

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

Este comando nos empezará a abrir pantallas a las que hay que responder. Pimero un mensaje de bienvenida que aceptamos.

En la siguiente pantalla nos advierte de que para que esto funcione, necesita una IP estática. En el primer tutorial le hemos puesto una ip estática a nuestra raspberry, así que todo correcto

Ahora te preguntará si la ip de tu rapberry es estática. Dile que sí.

siguiente pantalla: Advertencia acerca de que puedes liarla si hay un conflicto de IP’s. Vamos a aceptar y esperar que no sea así.

Siguiente pantalla de advertencia: nos dice que en la pantalla que veremos en unos instantes debemos escoger un usuario del equipo en el que estamos instalando PiVPN para guardar las configuraciones. Tenemos sólo uno (pi), así que no va a haber mucha duda.

En esta pantalla seleccionamos el único usuario que tenemos. (¿Por qué no han unido esta pantalla y la anterior?)

Ahora nos recomienda activar actualizaciones desatendidas. Es algo que nos interesa mucho y que deberíamos haber activado ya al instalar la raspberry… pero como lo activa ya PiVPN prefiero que lo haga este programa de forma automática y nos ahorramos una configuración.

Activamos las actualizaciones que nos decían en el punto anterior dándole a «sí» (De nuevo ¿No podían unir estas dos pantallas?).

Ahora nos pide escoger un protocolo de comunicación. Dejamos el que está por defecto (UDP) y aceptamos.

Siguiente pantalla (y esta es importante). Nos pide un puerto para comunicarse. Dejamos el que nos pone por defecto y ANTES DE CONTINUAR LO APUNTAMOS EN ALGÚN SITIO. Cuando terminemos esta instalación hay que mapear ese puerto en el router hacia la IP de la raspberry, así que no lo olvidéis.

La siguiente pantalla es para confirmar la pantalla anterior. A ver… ¿Estamos tontos? ¡Esto está lleno de pantallas duplicadas!

Siguiente pantalla. Nos pregunta si vamos a aplicar una encriptación fuerte y nos advierte que si la usamos puede que alguna versión vieja del cliente no nos fucione. Sin problema. le decimos que sí.

Ahora nos pregunta por el tamaño del certificado. Como en muchas otras cosas, el tamaño no es lo importante. El certificado más básico es suficiente para securizar nuestra VPN (Es más que seguro para lo que se ve por ahí en algunas aplicaciones que usamos a diario). Así que lo dejamos en «256» y aceptamos.

¿Vamos a usar una ip pública para conectarnos desde fuera o una dirección web? Aquí aprovechamos lo que hicimos en el punto 2. Seleccionamos DNS.

En la siguiente pantalla ponemos la dirección que hemos creado en el punto 2

Ahora viene una pregunta crítica. ¿Qué proveedor de dns vamos a usar? Si no queremos unir Pi-hole con PiVPN (queremos usar la VPN sólo para acceder a nuestros dispositivos desde fuera), escoged alguno de la lista (os recomiendo CloudFlare). Si vamos a unirlos (para quitar la publicidad desde fuera de casa) entonces escoged la última opción (Custom). Vamos a hacer una cosa «rara» que os explicaré en el siguiente paso.

Nos pide el servidor de DNS que vamos a usar. En principio deberíamos poner la IP 10.8.0.1 (que sería lo correcto), pero vamos a poner una IP que nos falle. Os explicaré al final del apartado 6 por qué. Por el momento hacedme caso y poned la ip de nuestra Raspberry que en mi caso es la 10.0.1.222, pero tenéis que poner la vuestra.

Pantalla de confirmación. Sí… la ip está mal… pero a la vez está bien porque queremos obtener un fallo en un momento concreto. Luego sabréis por qué.

Ahora nos pregunta si activa una opción para usuarios avanzados. Le decimos que no.

Ahora nos da instrucciones de cómo usar PiVPN una vez instalado. Os las esplicaré luego. Aceptamos.

…y por fin llegamos al final de la instalación. Nos pregunta si reiniciamos el equipo ahora. Le decimos que sí.

Después del reinicio vamos a hacer una comprobación rutinaria. Nos conectamos de nuevo por SSH a la consola de nuestra Raspberry y tecleamos el siguiente comando:

sudo service openvpn status

El resultado nos dirá si PiVPN está funcionando. Si es así, obtendremos algo similar a esto.

Fijaos que en verde nos pone que el servicio está activo y en la última línea vemos que el servicio está iniciado. Así que todo está bien.

4) Mapeamos el puerto en el router.

¿Os acordáis que durante la instalación os dije que debíais anotar el puerto en el que funcionaría PiVPN? Pues ahora es el momento ideal para mapear ese puerto en nuestro router. Tenemos que decirle al router con el que nos conectamos a internet que cualquier petición que venga desde fuera por el puerto 1194 debe dirigirla a la ip de nuestra Raspberry. ¿Cómo? Pues cada router es un mundo y tiene una interfaz distinta. Lo más normal es que tengáis que entrar desde el navegador de internet a la ip del router (192.168.0.1 o 192.168.1.1) y entrando con un usuario y contraseña tengáis alguna opción dónde cambiarlo. En todo caso os voy a explicar cómo tengo que hacerlo yo en mi modelo de router (Time Capsule de Apple), pero vosotros debéis mirar cómo se cambia esa configuración en vuestro modelo de router, porque salvo que sea un router de Apple, vais a tener que hacerlo de forma distinta.

Yo tengo que ir al interface de administración del router e ir al apartado «red». Allí, en ajustes de puerto debo añadir un nuevo puerto

En «Descripción» pongo algo del estilo «Raspberry PiVPN». En los puertos «UDP» pongo el puerto 1194, los puertos TCP los dejo vacíos y en «Dirección IP privada» pongo la ip de nuestra Raspberry.

Una vez hecho esto, acepto todos los cambios, el router se reinicia y listo: puerto mapeado y un problema menos.

5) Creamos un usuario para acceder desde fuera.

Vamos a crear uno (o varios) usuarios con los que podremos conectarnos a nuestra Raspberry. En el terminal tecleamos lo siguiente:

pivpn add

Ahora cubrimos los siguientes datos (y los apuntamos, porque los necesitaremos luego).

  • Nombre del cliente: El nombre de usuario que vamos a crear. Yo voy a crear un usuario que se llama «darthvader», pero vosotros poned el usuario que queráis.
  • Días que va a durar el certificado: ponemos 3650 (10 años)
  • Contraseña: Nos la va a preguntar dos veces. Intentad poner una contraseña segura, por favor. Es importante usar contraseñas seguras y que no habéis usado en ningún otro sitio.

Y listo. Nos generará un fichero llamado «usuario.ovpn» (usuario es vuestro nombre de usuario. En mi caso me crea «darthvader.ovpn). Con este método creamos tantos usuarios como necesitemos, y de hecho lo ideal es crear un usuario diferente para cada dispositivo que se vaya a conectar a la VPN. Una vez creado el usuario el terminal debería ser algo similar a esto:

Ahora debemos mover ese archivo a algún sitio en el que podamos cogerlo, porque lo necesitamos llevar al dispositivo en el que queramos conectarnos. Después de darle muchas vueltas, voy a sugeriros un método para ello que no es el más «elegante», pero sí el más sencillo.

Una opción sería crear una carpeta compartida en la raspberry para acceder a ella desde el ordenador (Eso lo haremos cuando expliquemos cómo instalar aMule en esta misma raspberry, pero ahora no quiero complicaros más el tutorial). Incluso podríamos copiar el archivo en la carpeta dónde se almacena el interface de pi-hole (su página web) y cogerlo accediendo a través del navegador. Pero en un intento por simplificar las cosas voy a sugeriros otro método «poco convencional» pero que va a ser muy sencillo de realizar y con el que no vamos a necesitar instalar ni configurar nada a mayores.

El último mensaje de la raspberry era que el archivo «darthvader.ovpn» estaba en la carpeta /home/pi/ovpns. Pues vámonos a esa carpeta con este comando.

cd /home/pi/ovpns

Lo que haremos será copiar ese fichero en la carpeta /boot (bueno… realmente no es una carpeta, sinó una partición separada). Ahí se pueden almacenar muy pocas cosas porque es una partición pequeñita, pero ese archivo ocupa muy muy poco, así que no habrá problema alguno con el espacio que ocupa. Lo copiamos con este comando.

 sudo cp darthvader.ovpn /boot/

Evidentemente, sustituimos el nombre del archivo por el de tu usuario (Espero que no seas tan friki como para tener de nombre de usuario a Darth Vader).

Vale… ya tenemos ese archivo en /boot. ¿Y ahora? Pues simplemente apagamos la raspberry. Para apagarla de forma segura usaremos este comando.

sudo shutdown now

Una vez introducido y después de pulsar «enter», vamos a esperar unos segundos hasta que veamos que en la raspberry sólo hay una luz fija roja (no hay actividad de disco). Entonces le quitamos el cable de corriente, le quitamos la tarjeta y la introducimos en nuestro ordenador, y veremos que podemos acceder a la partición «/boot» sin problemas (está formateada en fat32, por lo que va a poder leerla cualquier equipo). Movemos el archivo a nuestro escritorio (lo movemos, para que quede borrado de la partición «/boot» y expulsamos correctamente la tarjeta del ordenador. Volvemos a poner la tarjeta en la Raspberry y le conectamos de nuevo el cable de corriente.

6) Instalamos el usuario que hemos creado en el cliente VPN de nuestro dispositivo.

Ya tenemos el archivo de configuración en nuestro ordenador. Ahora necesitamos instalar un programa en nuestro dispositivo para poder conectarnos a nuestra recién creada VPN. Estos serán los programas que necesitamos para los distintos dispositivos que podemos tener:

En cualquiera de estas aplicaciones debemos importar el archivo que hemos generado y que ya tenemos en el ordenador de escritorio, pero os vuelvo a advertir de que no funcionará a la primera debido a una configuración que hemos hecho mal a posta en el paso 3. Os explicaré como corregirlo en el paso 7, pero en todo caso os explico cómo importar el archivo en cada aplicación.

En windows, una vez instalado OpenVPN Client, pulsamos con el botón derecho a su icono en la barra de herramientas, y seleccionamos la opción de «importar».

Importamos el archivo, ponemos la contraseña y marcamos la casilla para que la guarde y no nos la vuelva a pedir. La próxima vez que queramos conectar, desplegamos de nuevo el menú del icono de OpenVPN Client, conectamos con nuestro usuario y nos saldrá la confirmación de que ya estamos conectados.

En un Mac con Tunnelblick instalado, para añadir la configuración simplemente debemos hacer doble click en el archivo con la extensión «.ovpn» y nos saldrá una pantalla similar a ésta. Dependiendo de si queremos que nuestro VPN lo usen todos los usuarios del equipo o sólo nuestro usuario, le damos a «Todos los usuarios» o a «Sólo yo».

Luego nos preguntará por la contraseña de administrador del equipo. La ponemos e inmediatamente nos saldrá esta notificación.

Ahora para conectarnos sólo habría que desplegar el menú de Tunnelblick y pulsar en nuestro usuario de VPN.

En Android, iOS y iPadOS el procedimiento es casi idéntico. Primero debéis enviar el archivo al teléfono (por telegram, correo electrónico, alguna nube como nextcloud, google drive o dropbox…). Una vez que tengáis el archivo localizado en el teléfono tenéis que abrirlo en OpenVPN Connect.

Por ejemplo, en iOS debemos pulsar sobre el archivo y nos aparecerá una opción similar a esta, en la que debemos pulsar en «Copiar en OpenVPN»

Así se abrirá el archivo en el programa adecuado. Nos preguntará si añade ese perfil. Le decimos que lo añada.

Al añadirlo nos pregunta si guarda la clave privada. Pulsamos en la casilla de verificación, ponemos la clave que hemos generado al crear nuestro usuario, y pulsamos arriba a la derecha en el botón «ADD».

Acto seguido se nos pregunta si deseamos añadir una VPN al dispositivo. Le decimos que sí.

Y listo. Ya tenemos lista la VPN en el teléfono para conectarnos. Os recomiendo desconectar el wifi del teléfono. Teniéndo únicamente la conexión 3G activada, pulsad este botón de la aplicación.

Si pulsáis el botón de la aplicación ¡¡¡Ya funciona!!! Espera… ¿Ya funciona? Pues a medias. Aparentemente el botón se pone en verde y estamos conectados, pero si intentamos navegar obtenemos un error diciendo que no podemos acceder a la página ¿Por qué?

Pues sencillo… porque hemos hecho una configuración incorrecta durante la instalación. Si hubiésemos hecho la configuración correctamente estaríamos navegando, pero tendríamos que perder tiempo comprobando si nos funciona todo correctamente o no. Si os podéis conectar a la VPN y os da error cuando intentáis navegar sabemos:

  • Que el VPN funciona (al menos conecta).
  • Que la navegación se está haciendo a través del VPN (que como está mal configurado nos está dando error).

Si hubiéramos hecho la configuración bien, estaríamos navegando, pero no sabríamos si la página web la estamos cogiendo de nuestra conexión a internet sin pasar por el VPN o estamos cogiéndola por el VPN. Ese error nos garantiza que estamos navegando por el VPN y que vamos bien encaminados.

7) Corregimos la configuración y hacemos los últimos ajustes.

Vamos a entrar de nuevo en la raspberry por SSH (por teminal o Putty). Vamos a ir a la ruta /etc/openvpn y ahí vamos a editar el archivo server.conf, tecleando el siguiente comando.

sudo nano /etc/openvpn/server.conf

A estas alturas seguro que ya sabéis que podemos hacerlo de este otro modo.

Dentro de ese archivo vamos a buscar la línea que pone lo siguiente:

push "dhcp-option DNS 10.0.1.222"

Como habréis supuesto, debe poner la ip de vuestra raspberry. Vamos a cambiar esa línea por esta otra…

push "dhcp-option DNS 10.8.0.1"

Esa IP es la que usa PiVPN siempre como puerta de enlace y servidor de DNS para los clientes que se conecten al servicio. El archivo quedaría de esta forma.

Con este cambio realizado, pulsamos «Control+O» para guardar los cambios y salimos del editor Nano pulsando «Control + X».

Por cierto… si no usáis pi-hole y sólo queríais usar un VPN para conectaros con vuestros dispositivos, esa IP debería ser «1.1.1.1», y además con este cambio este tutorial ya ha acabado para vosotros. El resto vamos a hacer un par de configuraciones a mayores para que Pi-hole nos bloquee la publicidad mediante el VPN.

Para terminar la conexión entre Pi-hole y PiVPN vamos a ir a la ruta /etc/pihole y vamos a editar el archivo «setupVars.conf»

sudo nano /etc/pihole/setupVars.conf

En ese archivo la primera línea debe poner algo como ésto si la raspberry se conecta por WiFi.

PIHOLE_INTERFACE=wlan0

O ésto si la raspberry se conecta mediante cable de red.

PIHOLE_INTERFACE=eth0

Justo debajo de esa línea, debemos añadir otra que ponga esto otro.

PIHOLE_INTERFACE=tun0

Para que el archivo quede de esta forma.

De nuevo pulsamos «Control+O» para guardar cambios y «Control + X» para salir del editor. Esto hará que el Pi-hole permita entregar datos a PiVPN.

Por último vamos a crear un archivo que no existe en nuestra Raspbery. Tenemos que ir a la ruta /etc/dnsmasq.d y crear allí un archivo llamado 02-ovpn.conf de esta forma.

sudo nano /etc/dnsmasq.d/02-ovpn.conf

Dentro de ese archivo debemos escribir una única línea, que será ésta.

interface=tun0

Guardamos cambios con «Control+O» y con esto ya hemos terminado. Reiniciamos la raspberry por precaución con este comando:

sudo shutdown -r now

Una vez reiniciada podéis probar de nuevo la conexión que intentamos en el punto 6. Teniendo sólo 3G activado, intentad conectaros al VPN y abrid alguna página web. Ahora ya deberíamos poder navegar con el VPN conectado y el Pi-hole debería quitarnos toda la publicidad de las páginas web y de todas las aplicaciones del teléfono (o del ordenador).

Por cierto… si estáis pensando que seguramente la raspberry está ahora echando humo, estáis muy equivocados. Aún está muy ociosa, así que podemos usarla para más cosas además de tener un servidor de Pi-Hole y otro de PiVPN. En el próximo tutorial veremos cómo instalarle a esa misma raspberry un cliente de aMule para poder realizar descargas largas sin tener que dejar el ordenador principal encendido y consumiendo muchísima electricidad (os recuerdo que el consumo eléctrico de una Raspberry es casi anecdótico)

Share