Pihole es un servidor de DNS (y opcionalmente también un servidor DHCP) que permite bloquear parte de los anuncios y rastreadores que contienen las diversas páginas web que visitamos al navegar por Internet.
La instalación de Pihole se puede hacer de diversas maneras y aquí explicaremos cómo hacerlo usando dockers.
Si solo queremos instalar Pihole, podemos hacerlo fácil y rápidamente usando la receta que indicamos a continuación.
Sin embargo, resulta mucho más interesante enlazar nuestra instalación de Pihole con cloudflare porque permite conexiones a sus servidores DNS usando conexiones seguras, lo que impedirá al operador de red que estemos utilizando rastrear los sitios a los que nos conectamos. A esta combinación se la conoce como Pihole + Cloudflared DoH y su instalación es muy sencilla siguiendo los siguientes pasos.
-
Crearemos un directorio ‘pihole’ en el directorio en el que vayamos a ubicar la receta para el docker-compose.
-
Creamos un archivo dockerfile en dicho directorio con el contenido que indicamos a continuación.
(observad que este archivo dockerfile se basa en el docker estándar de pihole pero con unos pequeños cambios).
- Crearemos un archivo config.yml en dicho directorio con el contenido que indicamos a continuación.
- Creamos la receta docker fuera del directorio que hemos creado anteriormente.
(Darse cuenta que en esta receta hacemos referencia al archivo pihole/dockerfile que hemos creado en el paso 1)
Tanto si usamos la versión normal de Pihole como la versión Pihole + cloudflared DoH, levantaremos el docker con el comando
Lo más probable es que nuestra instalación de Linux incluyera ya un servidor de DNS, en cuyo caso recibiremos un error al iniciar el docker: Error starting userland proxy: listen tcp4 0.0.0.0:53: bind: address already in use.
Eso se debe a que ya hay una aplicación escuchando (y sirviendo peticiones) en el puerto 53 (que es el puerto estándar de DNS). Procederemos a configurar dicha app para que no lo haga, tras lo cual tendremos que reiniciar el servicio o la máquina. El archivo es /etc/systemd/resolved.conf y básicamente tendremos que añadir la siguiente directiva:
Hecho esto podremos reiniciar el contenedor de Pihole, esta vez ya sin ningún error…
Una vez iniciado el contenedor, podemos acceder a los logs con el comando docker logs pihole -f. Es posible que observemos en los logs un mensaje indicando que la resolución DNS no está disponible ([✗] DNS resolution is currently unavailable* o [✗] DNS resolution is not available). Esto se debe a que el contenido del archivo */etc/resolv.conf no es el correcto, por lo que procederemos a editarlo y dejarlo como indicamos a continuación.
En este punto volveremos a reiniciar el contenedor de Pihole, si fuera el caso, procediendo a comprobar que la resolución DNS está ahora activa…
Antes de acceder a la configuración web de Pihole, procederemos a crear un password de administración, que será el que utilicemos para autenticarnos en la interfaz de gestión.
Ahora sí, podremos ya acceder a la interfaz de Pihole para la configuración: http://[ip]:8080/admin (la IP será la de la máquina en la que estamos ejecutando el docker).
Lo primero que haremos es apuntar nuestro Pihole a la instalación de Cloudflare DoH, para lo que accederemos a Settings -> DNS, desmarcaremos todas las opciones que se hayen activas en la columna de la izquierda, introduciremos 127.0.0.1#5053 en el campo valor de Custom 1 (IPv4) (columna de la derecha) y guardaremos los cambios haciendo clic en el botón save abajo a la derecha.
Adicionalmente, accederemos a la configuración de nuestro router y, si es un router neutro, procederemos a cambiar la configuración DNS para que el servidor primario sea nuestro Pihole, y el secundario el que prefiramos (1.1.1.1 para Cloudflare, que sería el recomendado, 8.8.8.8 para el caso de Google o cualquier otro de nuestra elección) procediendo a continuación a reiniciar el router para que los cambios sean efectivos.
En caso que nuestro router sea de operador, lo más probable es que no nos permita cambiar el servidor de DNS, por lo que tendremos que cambiarlo manualmente en cada uno de los equipos que queramos.