En este post vamos a ver como montar/configurar un servidor OpenVPN (PiVPN) con Pi-Hole. Con este setup, bloquearemos los anuncios a nivel de red local así cómo en cualquier dispositivo en el cual nos conectemos a nuestra VPN.
He hecho este proyecto para dar uso a mi «vieja» Raspberry Pi 2B que tengo parada por casa, espero que os resulte de utilidad.
Para hacerlo, necesitaremos lo siguiente:
- Una Raspberry Pi B, B+, 2B, 3B, 3B+
- Una tarjeta SD con Raspbian Stretch Lite
- Un Router con conexión a internet
Una vez contemos con todo ello, hallamos arrancado la Raspberry y hecho la configuración inicial de Raspbian, podemos comenzar.
Instalación del servidor OpenVPN con Pi-Hole
Esta guía asume que hemos conectado nuestra Raspberry Pi al router mediante un cable Ethernet en la interfaz eth0. Si estás utilizando Wifi, interfaz wlan0, los pasos descritos a continuación pueden variar.
Antes de comenzar con la instalación es recomendable realizar una actualización del sistema:
1 2 3 | sudo apt-get update sudo apt-get upgrade sudo apt-get dist-upgrade |
Puesto que la Raspberry Pi actuará como servidor DNS necesitaremos darle una IP estática. Yo he escogido la IP 192.168.0.254. Vosotros podéis escoger la que queráis, siempre y cuando pertenezca a vuestra red y esté fuera del rango DHCP (IPs dinámicas que reparte vuestro router).
Para asignar una IP estática, editaremos el archivo /etc/dhcpd.conf con el comando sudo nano /etc/dhcpcd.conf :
1 2 3 4 | interface eth0 static ip_address=192.168.0.254 static routers=192.168.0.1 static domain_name_servers=8.8.8.8 |
A continuación reiniciamos la Raspberry Pi, y continuamos.
1. Instalación de OpenVPN con PiVPN
Vamos entonces a instalar el servidor VPN, en este caso OpenVPN. Para hacerlo nos ayudaremos de PiVPN, un script que facilita la tarea de instalar, configurar y añadir usuarios a OpenVPN.
La instalación de PiVPN es de lo más sencillo, basta con ejecutar un comando y seguir los pasos del instalador:
1 | curl -L https://install.pivpn.io | bash |
Para completar la instalación, aceptaremos todos los pasos y opciones por defecto EXCEPTO en la siguiente pantalla, en la que deberemos decidir si queremos usar la IP de nuestra Raspberry o un nombre de dominio para acceder a nuestra VPN.
Al finalizar la instalación, reiniciaremos la Raspberry.
Por último, para poder acceder a nuestro servidor VPN desde fuera de la red local necesitaremos redirigir el puerto 1194 UDP hacia la IP de la Raspberry Pi. Esto lo haremos en la configuración de nuestro router, no voy a entrar en cómo hacerlo puesto que cada router es distinto.
2. Instalación de Pi-hole
La instalación de Pi-hole es igual de sencilla que la anterior. Simplemente ejecutamos el siguiente comando y seguimos los pasos indicados:
1 | curl -sSL https://install.pi-hole.net | bash |
Al igual que antes, seleccionaremos todas las opciones marcadas por defecto, asegurándonos de seleccionar la interfaz de red requerida, en este caso eth0:
Tras instalar Pi-hole estableceremos una contraseña para la interfaz web con el comando:
1 | pihole -a -p |
Podremos acceder a la interfaz en la URL <ip_raspberry_pi>/admin en este caso, 192.168.0.254/admin.
Al igual que antes, cuando finalice la instalación, reiniciaremos la Raspberry.
Testeando la instalación
En este punto deberíamos verificar que tanto OpenVPN cómo Pi-hole funcionan de manera independiente. Estableciendo el servidor DNS de nuestro router a la IP de nuestra Raspberry Pi debería bloquear los servidores de anuncios (página test). Por su parte deberíamos ser capaces de conectarnos a nuestra VPN y ver nuestros equipos de la red local.
3. Probando OpenVPN
Antes de poder acceder a nuestra VPN necesitaremos crear un archivo de configurtacion .ovpn. Gracias a piVPN es realmente fácil, puesto que solo necesitamos ejecutar el siguiente comando:
1 | pivpn add |
Se nos pedirá un nombre de cliente, el que queramos, y una contraseña. Una vez introducidos se generará el archivo .ovpn en el directorio /home/pi/ovpns, el cual copiaremos a nuestro móvil.
Para probar nuestra VPN utilizaremos el cliente OpenVPN para Android. Lo descargamos en el teléfono, iniciamos la aplicación e importamos el archivo de configuración generado anteriormente.
Con el perfil importado, deberíamos acceder a nuestra VPN desde el móvil sin problema.
4. Probando Pi-hole
Para probar Pi-hole, estableceremos cómo servidor DNS en nuestro router la IP que hemos escogido para nuestra Raspberry Pi. En este ejemplo sería 192.168.0.254
Una vez hecho esto accedemos a la siguiente página de test debería aparecer lo siguiente:
Configurar Pi-hole para que funcione junto con OpenVPN
Si ya tenemos lo anterior funcionando, al comprobar la VPN veremos que los anuncios no están siendo bloqueados. Esto es porque el servidor DNS definido en la configuración de OpenVPN no es el correcto.
Debemos establecerlo a la dirección de nuestra Raspberry Pi editando el siguiente archivo: sudo nano /etc/openvpn/server.conf , y eliminando todas las referencias a dhcp-option DNS dejando sólo la siguiente:
1 | push "dhcp-option DNS 10.8.0.1" |
Además de esto, debemos establecer la interfaz tun0 de la VPN cómo una de las interfaces de Pi-hole editando el archivo sudo nano /etc/pihole/setupVars.conf y añadir la siguiente línea (resaltada, debajo de eth0):
1 2 | PIHOLE_INTERFACE=eth0 PIHOLE_INTERFACE=tun0 |
Por último, crearemos el archivo /etc/dnsmasq.d/02-ovpn.conf , con el siguiente comando sudo nano /etc/dnsmasq.d/02-ovpn.conf y añadiremos lo siguiente:
1 2 | interface=eth0 interface=tun0 |
Reiniciamos la Raspberry Pi y ya tendremos nuestro servidor OpenVPN con Pi-hole funcionando. Por lo que sólo quedaría acceder a la página de prueba indicada anteriormente desde nuestro móvil conectado a la VPN para comprobar que funciona.
Espero que os haya sido de ayuda!