Configurar DNS por HTTPS en Pi-hole

Aprendemos juntos a configurar DNS por HTTPS en nuestra Pi-hole doméstica. De esta manera nos garantizamos, por lo menos en teoría, que las peticiones DNS que pasen por nuestra Pi-hole utilicen HTTPS. Para ello vamos a utilizar la herramienta cloudflared, ofrecida, como sugiere el nombre por Cloudflare.

Antes de continuar quiero agradecer a los compañeros de KillAllRadio por estar ahí, ya que gracias a las conversaciones que tenemos en el grupo de Telegram, se me ocurren ideas para estas entradas. En esta ocasión la idea ha surgido en un debate sobre la seguridad de los DNS y lo fácil que tienen los ISP para saber el tráfico de todos los usuarios. En esto el compañero Eduardo Collado es un hacha, y me ha hecho ver, inocente de mi, que la configuración que tenía montada hasta la fecha en mi casa, estaba bastante lejos de garantizar mi anonimato en la red.

Logo de Pi-hole

¿Por qué utilizar DNS por HTTPS?

DNS a través de HTTPS es un protocolo para realizar busquedas DNS a través del mismo protocolo que utilizamos normalmente para navegar de forma segura por la web, esto es, HTTPS. Se trata de un protocolo de seguridad, que busca poner más dificil al proveedor de turno de Internet, saber que páginas visitamos. Además de mejorar nuestra seguridad a la hora de navegar por los mares turbulentos de Internet.

Como seguramente ya sabrás gracias a los servidores DNS se pueden interpretar las direcciones IP como nombres amigables para los usuarios. Pues bien, con los servidores DNS estándar, las solicitudes se envían en texto sin formato, sin ningún método para detectar alteraciones o comportamientos indebidos. Esto significa que un actor malintencionado no solo puede ver todas las solicitudes de DNS que estamos realizando (y, por lo tanto, qué sitios web estamos visitando), sino que también puede alterar la respuesta y redirigir nuestro dispositivo a los recursos que están bajo su control.

Con este protocolo podemos evitar esto mediante HTTPS. Esto significa que la conexión desde el dispositivo al servidor DNS es segura y no se puede espiar, monitorear, manipular o bloquear fácilmente. (en teoría)

Configurar DNS a través de HTTPS con Pi-hole

Actualmente tengo instalado Pi-hole, el famoso bloqueador de publicidad, además de servidor de DNS y DHCP,  sobre una RaspBerryPi, por lo que explicaré como realizar la instalación y configuración sobre este dispositivo. Para ello vamos a utilizar el servicio y herramienta cloudflared, que he comentado anteriormente.

Antes de nada, el procesador que utiliza la RaspBerryPi que yo tengo es un ARMv7, con cuatro núcleos y un tecnología de 32 bits, para muestra un botón:

Pues bien, para esta arquitectura, debemos utilizar el siguiente repositorio para Raspbian:

wget https://bin.equinox.io/c/VdrWdbjqyF/cloudflared-stable-linux-arm.tgz
tar -xvzf cloudflared-stable-linux-arm.tgz
sudo cp ./cloudflared /usr/local/bin
sudo chmod +x /usr/local/bin/cloudflared
cloudflared -v

Una vez seguidos estos pasos, ya debemos ver la herramienta instalada y comprobar su versión:

pi@raspberrypi:/proc $ cloudflared -v
cloudflared version 2020.12.0 (built 2020-12-08-2302 UTC)

A continuación vamos a configurarla de manera manual. Primero creamos un nuevo usuario en el sistema que es el que utilizará este servicio:

sudo useradd -s /usr/sbin/nologin -r -M cloudflared

Creamos y editamos el fichero de configuración:

sudo nano /etc/default/cloudflared

Y añadimos:

# Argumentos para cloudflared, utilizando Cloudflare DNS
CLOUDFLARED_OPTS=--port 5053 --upstream https://1.1.1.1/dns-query --upstream https://1.0.0.1/dns-query

Guardamos y salimos. A continuación actualizamos el usuario y grupo de los ficheros de configuración:

sudo chown cloudflared:cloudflared /etc/default/cloudflared
sudo chown cloudflared:cloudflared /usr/local/bin/cloudflared

Y ya por último en esta parte, creamos la correspondiente unidad para Systemd

sudo nano /etc/systemd/system/cloudflared.service

Con el contenido:

[Unit]
Description=cloudflared DNS over HTTPS proxy
After=syslog.target network-online.target
 
[Service]
Type=simple
User=cloudflared
EnvironmentFile=/etc/default/cloudflared
ExecStart=/usr/local/bin/cloudflared proxy-dns $CLOUDFLARED_OPTS
Restart=on-failure
RestartSec=10
KillMode=process
 
[Install]
WantedBy=multi-user.target

Añadimos la nueva unidad al arranque y comprobamos su estado:

sudo systemctl enable cloudflared
sudo systemctl start cloudflared
sudo systemctl status cloudflared

Con el resultado en mi caso:

Comprobamos estado de cloudflared

Comprobamos que efectivamente las consultas DNS están funcionando como nosotros queremos:

Consulta de DNS con dig

Configurar Pi-hole

Por último debemos modificar la configuración de nuestro Pi-hole, desde la sección «Settings» y «DNS«, para que quede así:

Configuramos los DNS en Pi-hole

Y esto es todo, que ya ha quedado algo extensa la entrada. Si queréis saber como actualizar la herramienta o desinstalarla, aquí os dejo el enlace a la web de  Pi-hole, donde habla del tema:

Configurar DNS-over-HTTPS in Pi-hole