Pi-hole & Docker

Adiós publicidad, hola dominios locales!

Roberto Lodeiro

Pi-hole es la mejor solución para terminar con la publicidad intrusiva, tanto de aplicaciones como de sitios web, en todos los dispositivos de nuestra red. Vamos a instalarlo en nuestra Raspberry Pi, la cual actuará como servidor DNS. Además, explicaré como configurar dominios locales.

Aunque existen otras formas de instalación, he elegido Docker por las múltiples ventajas que aporta. Algunas de estas ventajas son: facilidad a la hora de actualizar, no modificamos los archivos del sistema y tendremos la posibilidad de aprovechar al máximo nuestra Raspberry Pi instalando otros servicios.


1. Instalar Docker

Empezaremos por instalar Docker desde su repositorio oficial

  • Actualizar los paquetes e instalar los requisitos:
$ sudo apt update && sudo apt install \
apt-transport-https \
ca-certificates \
curl \
gnupg2 \
software-properties-common
  • Añadir la clave GPG:
$ curl -fsSL https://download.docker.com/linux/debian/gpg \
| sudo apt-key add -
  • Añadir el repositorio:
$ sudo add-apt-repository \
"deb [arch=armhf] https://download.docker.com/linux/debian \
$(lsb_release -cs) \
stable"
  • Instalar Docker:
$ sudo apt update && sudo apt install \
docker-ce docker-ce-cli containerd.io
  • Añadir nuestro usuario al grupo Docker:
$ sudo usermod -aG docker <tu_usuario>

2. Instalar Pi-hole

Una vez instalado Docker, vamos a desplegar el contenedor de Pi-hole.

Montaremos los directorios pihole y dnsmasq.d del contenedor en dos volúmenes locales. El directorio oculto .pihole situado en el home de nuestro usuario alojará ambos.

Además serviremos la interfaz web en el puerto 89 para no dar lugar a conflicto, estableceremos las DNS de Cloudfare por defecto y configuraremos la zona horaria a Europe/Madrid.

Puedes cambiar las opciones mencionadas anteriormente a tu gusto.

  • Desplegar el contenedor:
$ docker run -d \
--name pihole \
-p 53:53/tcp -p 53:53/udp \
-p 89:80 \
-p 443:443 \
-e TZ="Europe/Madrid" \
-v "$HOME/.pihole/pihole/:/etc/pihole/" \
-v "$HOME/.pihole/dnsmasq.d/:/etc/dnsmasq.d/" \
--dns=1.1.1.1 --dns=1.0.0.1 \
--restart=unless-stopped \
pihole/pihole:latest

Una vez finalice, la interfaz de Pi-hole estará disponible en http://localhost:89.

Tras configurar el servidor DNS con la ip de nuestra Raspberry Pi, todo funcionará según lo esperado. Esto podemos hacerlo en cada uno de los dispositivos, o en la configuración del router. Recomiendo esta última opción.

3. Dominios locales

Por último, vamos a utilizar Pi-hole para resolver nombres de dominio locales.

Gracias a los volúmenes que hemos creado, no tendremos que entrar en el contenedor para hacer esta configuración, ni se borrará en caso de que actualicemos Pi-hole.

  • Creamos el archivo local.list en $HOME/.pihole/pihole/:
$ nano $HOME/.pihole/pihole/local.list

En este archivo definimos los dominios deseados con el formato <dirección-ip> <dominio-completo> <dominio>.

  • Ejemplo de dominios locales en local.list:
192.168.1.1 router router
192.168.1.2 raspberry.local raspberry
192.168.1.100 pcmain.local pcmain
  • Creamos un segundo archivo de configuración para dnsmasq que referencie a local.list:
$ echo "addn-hosts=/etc/pihole/local.list" | sudo tee $HOME/.pihole/dnsmasq.d/02-local.conf
  • Reiniciamos el contenedor :
$ docker restart pihole

Listo!

Ya tenemos todos los dispositivos de la red libres publicidad intrusiva, así como nuestros propios dominios locales para acceder sin escribir la dirección ip.


Espero que sea útil, ¡gracias por leerme!