Un sistema de resolución de DNS es lo que nos permite navegar por decirlo de algún modo. El sistema de DNS transforma el nombre de dominio, al cual queremos acceder, en una ip, donde se aloja el contenido buscado. Este proceso de traducción de Ips a dominios es lo que realiza el sistema DNS.
Es por tanto un sistema tan básico como antiguo, el cual ha quedado obsoleto en materia de seguridad y privacidad.
Es muy común que las empresas de ISP que operan las redes auditen ese trafico para obtener información sobre los sitios a los que accedemos. Con ello pueden ofrecer publicidad selectiva, ofertas o conocer nuestros gustos o preferencias.
Ademas será fácil conocer los sitios que visitamos por cualquiera que mínimanente sepa capturar ese trafico.
También algunos proveedores pueden bloquear algunos sitios donde accedemos.
Por todo ello nace DNS over HTTPS (DoH), en Octubre de 2018, como un nuevo protocolo que es igual que el antiguo DNS pero con la diferencia que la totalidad de tráfico para resolver la peticiones DNS se hará usando los protocolo https y http/2. Por lo tanto las peticiones DNS estarán cifradas y se realizarán por el puerto 443 en vez del puerto 53.
Estas son las ventajas principales:
- Para los usuarios, la ventaja más importante es que la resolución de las peticiones DNS será más rápida. La latencia será menor y las webs que visitaremos cargarán más rápido.
- Nadie, a excepción de la empresa que nos proporciona la resolución de peticiones DNS, podrá conocer las webs que visitamos. Por lo tanto, nuestro operador ISP no podrá bloquearnos el acceso a determinadas web mediante los DNS.
- Incremento de la seguridad y privacidad ya que de este modo se podrán evitar ataques Man in the Middle. Por lo tanto podremos evitar ataques de DNS spoofing, DNS hijacking, etc.
- El protocolo DNS over HTTPS usa el protocolo https y http/2. Por lo tanto se beneficiará automáticamente de todas las mejoras que se realicen en los protocolo https y https/2.
Pero como cualquier nuevo protocolo en desarrollo, puede presentar problemas, incluso llegar a ser lento en la resolución de DNS.
Siempre debemos de probar si es lo mas efectivo en nuestro sistema y bajo nuestras pruebas decidir si queremos implementarlo o no.
Por lo tanto, DNS over HTTPS traducirá las direcciones URL convencionales a sus correspondientes direcciones IP, pero con la particularidad que todo el tráfico entre el cliente DNS y el servidor DNS estará completamente cifrado. Por lo tanto, DoH no cifra el tráfico de extremo a extremo, pero si cifra el tráfico DNS.
Cloudflare, Mozilla y Chrome están trabajando en soluciones para que permitan usar este nuevo protocolo.
Nosotros vamos a implementar Cloudflare en PiHole, dentro de nuestra Raspberry, así nos aseguramos de que todo el trafico use este protocolo ya que la Raspberry actuara como único cliente DNS.
Vamos alla!:
Instalar cliente (demonio) en Raspberry:
Descargamos el cliente ejecutando:
wget https://bin.equinox.io/c/VdrWdbjqyF/cloudflared-stable-linux-arm.tgz
Descomprimiremos el archivo:
tar -xvzf cloudflared-stable-linux-arm.tgz
Copiaremos el archivo binario cloudflared en la ubicación /usr/local/bin:
sudo cp ./cloudflared /usr/local/bin
Daremos permisos de ejecución al archivo binario que acabamos de copiar:
sudo chmod +x /usr/local/bin/cloudflared
Para comprobar la versión que estamos usando podemos ejecutar el siguiente comando:
cloudflared -v
El resultado debe parecerse a esto:
cloudflared version 2020.5.1 (built 2020-05-12-1417 UTC)
Crear un usuario para Cloudflared:
Ahora creamos un usuario para usar el cliente:
sudo useradd -s /usr/sbin/nologin -r -M cloudflared
Configuramos el cliente Cloudflared DNS:
Generamos el archivo de configuración de Cloudflared:
sudo nano /etc/default/cloudflared
En el editor de texto, pegamos lo siguiente, luego guardamos con ctrl+o y cerramos con ctrl+x:
# Commandline args for cloudflared
CLOUDFLARED_OPTS=--port 5053 --upstream https://1.1.1.1/dns-query --upstream https://1.0.0.1/dns-query
Cambiamos grupo y usuario el archivo binario y al archivo de configuración de Cloudflared:
sudo chown cloudflared:cloudflared /etc/default/cloudflared
sudo chown cloudflared:cloudflared /usr/local/bin/cloudflared
Crear un servicio de Systemd para Cloudflare
Para gestionar el de servicio Cloudflare deberemos crear un servicio de systemd:
sudo nano /lib/systemd/system/cloudflared.service
Cuando se abra el editor de textos nano pegaremos el siguiente código y guardamos:
[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
Haremos que Cloudflare se inicie de forma automática cada vez reiniciemos la Raspberry Pi.
sudo systemctl enable cloudflared
Finalmente arrancaremos el servicio:
sudo systemctl start cloudflared
Comprobamos que el servicio se haya levantado de forma correcta:
sudo systemctl status cloudflared
Verificar que Cloudflare está funcionando correctamente
Para comprobar que Cloudflare funciona de forma adecuada ejecutaremos el siguiente comando en la terminal:
dig @127.0.0.1 -p 5053 google.com
Modificar la configuración de Pi-Hole para que pueda usar DNS over HTTPS:
Para que Pi-hole pueda utilizar el cliente DNS over HTTPS de Cloudflare deberemos realizar lo siguiente:
- Accedemos al panel de administración de Pi-hole.
- Opción Settings.
- Pestaña DNS.
- Desmarcamos todos los DNS que tengamos activados.
- Marcamos el campo Custom 1 (IPv4) y en el mismo campo pegamos 127.0.0.1#5053
Finalmente guardamos
Ahora comprobamos en un navegador poniendo 1.1.1.1/help, debiendo salir lo siguiente:
Y por fin esta!! DoH funcionando!!
Ah, una reseña!:
En el caso de obtener un error ante el comando cloudflared -v sobre todo en caso de usar una Raspberry 1 o 2, debemos instalar una versión mas antigua, es decir descargar la versión siguiente al inicio:
wget https://bin.equinox.io/a/4SUTAEmvqzB/cloudflared-2018.7.2-linux-arm.tar.gz
El resto del proceso es el mismo, exceptuando el nombre a descomprimir claro.
Nos vemos!!