Pi-Hole + Openvpn: Bloquea la publicidad en tus dispositivos

Con PI-Hole podemos filtrar y bloquear la publicidad de toda nuestra red, ya sean teléfonos, ordenadores, tablets, etc. Incluso llega a quitar los anuncios en las aplicaciones de los dispositivos Android e iOS. También cuenta con un servidor DHCP para ayudarnos en la configurar estos dispositivos.

Los anuncios son bloqueados mediante DNS, además se puede usar junto a Openvpn para bloquear publicidad y ahorrar datos en las conexiones 3g/4g.

Pasos previos

Doy por hecho que tenemos instalado Openvpn en nuestra raspberry, si no es así en este articulo explico como hacerlo.

Debemos averiguar la dirección IP del servidor OpenVPN, para ello escribimos el siguiente comando:

ip a show dev tun0

Muestra una salida parecida a esta:

4: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100
    link/none
    inet 10.8.0.1/24 brd 10.8.0.255 scope global tun0
       valid_lft forever preferred_lft forever
    inet6 ****::****:****:****:a161/64 scope link flags 800
       valid_lft forever preferred_lft forever

Vemos que la dirección IP del servidor es 10.8.0.1.

También debemos de conocer la dirección IP de la puerta de enlace o gateway, si no la saber la puedes averiguar con el siguiente comando:

ip r | grep default

default via 192.168.1.1 dev eth0  metric 202
default dev tun0  scope link   de metric 204

En mi caso es 192.168.1.1

Pi-hole tiene su propio servidor HTTP, es por eso de que si en tu sistema ya estas utilizando otro servidor HTTP (Nginx, Lighttpd, Apache, etc) escuchando en el puerto 80 deberás volver a configurarlo para que escuche por otro puerto diferente al 80.

Instalación

Comenzamos la instalación ejecutando el comando:

wget -O basic-install.sh https://install.pi-hole.net

sudo bash basic-install.sh

Actualizara el sistema y bajara los ficheros necesarios para realizar la instalación

Nos irán apareciendo una serie de ventanas, la primera nos informa que va a transformar nuestra raspberry en una bloqueador de publicidad.

Pi-Hole se licencia con GNU/GPL, aquí nos da su dirección por si deseamos hacer una donación al proyecto.

Nos informa que PI-Hole utiliza su propio servidor para funcionar por lo que necesita una dirección IP estática.

En esta pantalla es importante elegir tun0 como Interface de red, ya que es el que utiliza OpenVPN como vimos antes. Si no tuviésemos instalado OpenVPN eligiriamos eth0 en caso de tener la rpi conectada a Internet mediante un cable red o wlan0 en caso de estar conectada mediante wi-fi.

Aquí podemos elegir entre varios servicios de DNS para que Pi-Hole pueda resolver la dirección IP que no tenga cacheadas y que no tengan que ser filtradas, en mi caso elijo las de Google

Elegimos que trafico vamos a filtrar, yo selecciono tanto IPv4 como IPv6

Nos informa de la dirección IP estática que le va a asignar a la rpi así como la puerta de enlace, como antes, en caso de no utilizar Openvpn lo podríamos dejar así, pero en nuestro caso debemos cambiarla ya que queremos que el filtrado funcione para la red donde esta configurada nuestra VPN. Seleccionamos No

Ponemos la dirección IP del servidor Openvpn

Y la puerta de enlace

Verificamos que los datos son correctos y seleccionamos Si

En caso de tener IPv6, nos informa de la dirección usada para el bloqueo de la publicidad.

Debemos elegir si deseamos instalar la interfaz web para administrar pi-hole, recordar que si ya tenemos corriendo otro servidor HTTP en e puerto 80, debemos de cambiarlo a otro diferente para evitar conflictos.

Recomiendo activar el log de peticiones para así poder hacer un seguimiento y filtrado manual en caso de que sea necesario.

Termina la instalación

En mi caso tengo iptables como firewall, por lo que recibo un aviso de que se van modificar la reglas para poder permitir el trafico de los puertos 80 y 53 hacia el servidor de pi-hole

Cuando termina la instalación nos aparece la ventana con los datos de conexión a la interfaz web para poder administrar pi-hole y la contraseña de acceso

La contraseña de acceso se puede cambiar desde la terminal con el siguiente comando:

pihole -a -p nueva_contraseña

Ya podemos acceder a la interfaz web

Actualizar configuración de OpenVPN y pi-hole

Si no vas a utilizar OpenVPN puedes saltarte este punto.

Debemos actualizar la configuración de OpenVPN para que utilice pi-hole como servidor de DNS.

sudo nano /etc/openvpn/server.conf

Borramos o comentamos las entradas DNS

#Stop using Google DNS for our OpenVPN
#push "dhcp-option DNS 8.8.8.8"
#push "dhcp-option DNS 8.8.4.4"

Y añadimos la direcion de nuestro servidor pi-hole como servidor de DNS

push "dhcp-option DNS 10.8.0.1"

Guardamos los cambios y reiniciamos el servador Openvpn:

sudo systemctl restart openvpn@server.service

Ahora debemos configurar pi-hole para emparejarlo con OpenVPN

Editamos el fichero /etc/dnsmasq.conf

sudo nano /etc/dnsmasq.conf

Modificamos #listen-address= por listen-address=127.0.0.1, 192.168.xxx.xxx, 10.8.0.1

La segunda dirección IP (192.168.xxx.xxx) es la dirección IP local de nuestra rpi y la tercera IP (10.8.0.1) es el de la interface tun0.

Reiniciamos DNSMasq

sudo systemctl restart dnsmasq

Con esto ya tendremos configurado pi-hole para trabajar junto a Openvpn.

Configurando los clientes

Si utilizamos Openvpn en nuestros dispositivos no tendremos que hacer nada mas.

Si deseas utilizar pi-hole sin conectarte a tu VPN necesitas configurar tu red para que el servidor DNS sea la dirección IP de nuestro servidor pi-hole.

Lo ideal es configurar el router para que utilice el servidor pi-hole como servidor DNS, en mi caso, mi router no me permite modificar ese valor por lo que debo hacerlo manualmente en cada equipo.

Probando Pi-Hole

Desde esta pagina web https://pi-hole.net/pages-to-test-ad-blocking-performance/ podéis probar si realmente funciona el bloqueo de publicidad.

Para terminar os muestro unas capturas de pantalla del funcionamiento de pi-hole:

comentario powered by Disqus