Pi-hole es un sinkhole de DNS que protege los dispositivos de contenido no deseado, sin instalar ningún software del lado del cliente, usando las siguientes tecnologías:

  • dnsmasq, un servidor DNS/DHCP ligero
  • lighttpd, un servidor web diseñado y optimizado para alto rendimiento

La instalación en Docker se realiza usando la imagen pihole/pihole.

La forma más sencilla es usar un fichero docker-compose.yml con el siguiente contenido:

version: "3"
services:
  pihole:
    image: pihole/pihole:latest
    container_name: pihole
    environment:
      - TZ=Europe/Madrid
      - FTLCONF_LOCAL_IPV4=192.168.1.80
    volumes:
      - /home/pi/volumes/pihole/etc:/etc/pihole
      - /home/pi/volumes/pihole/dnsmasq.d:/etc/dnsmasq.d
    ports:
      - 53:53/tcp
      - 53:53/udp
      - 8080:80/tcp # Porque habitualmente el 80 estará ocupado por un dashboard o un proxy
    restart: always

Nota: Si se utiliza Pi-hole como servidor DCHP hay que cambiar algunas cosas, como per ejemplo añadir la capability NET_ADMIN.

Se puede usar docker-compose up -d o usar el contenido del fichero en Portainer.

Configuración

Una vez en marcha, se puede acceder a Pi-hole a través del puerto 8080 (en este ejemplo http://192.168.1.180:8080) y comenzar la configuración.

La contraseña inicial se genera de forma aleatoria, por lo que es necesario mirar cuál es mediante el comando docker logs pihole | grep random.

Lo primero y más importante es cambiar esa contraseña por otra que hayamos generado nosotros:

  • Desde el host ejecutar: docker exec -it pihole /bin/bash
  • Desde el contenedor de Pi-hole ejecutar: pihole -a -p e introducir la nueva contraseña

A continuación hay que configurar el servidor de DNS upstream que se quire utilizar:

  • Acceder al menú Settings
  • Acceder a la pestaña DNS
  • Marcar los dos servidores de Quad9 (filtered, DNSSEC) en IPv4
    • 9.9.9.9
    • 149.112.112.112

Listas

Si en algún momento es necesario borras las blocklist se puede hacer desde terminal sqlite3 /etc/pihole/gravity.db "DELETE FROM adlist" o accediendo a la opción Adlists del menú lateral.

Para restaurar la lista por defecto únicamente hay agregar la siguiente URL:

  • https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts

Cada vez que se añaden o borran listas hay que actualizar Gravity (ToolsUpdate Gravity) para que se genere la base de datos completa, sin errores ni duplicados.

Actualizar

Si ya se había instalado Pi-hole anteriormente, se puede actualizar de la siguiente manera:

docker stop pihole
docker rm pihole
docker rmi pihole/pihole
docker-compose up -d

Soporte

Algunos comandos para gestionar la configuración del contenedor:

# Acceder al shell mientras el contenedor está ejecutándose
docker exec -it pihole /bin/bash

# Monitorizar los logs del contenedor en tiempo real
docker logs -f pihole

Referencias