Pi-hole con Unbound: un DNS sin depender de nadie

Otra vez sin DNS.

Hace un tiempo os hablé de dns0, el DNS público europeo. Cerró. Así que puse el Pi-hole a tirar de xdp.es. Y hoy, xdp.es se ha caído.

Podría haber puesto los de Cloudflare y a correr, pero supongo que volvería a tener movidas con la pelotita. Llevo meses desgooglezando mi vida por lo que el famoso 8.8.8.8 de google también lo descarto. Así que me he montado el chiringuito en la raspberry y andando.

¿Qué es Unbound y por qué?

Cuando escribes una dirección en el navegador, alguien tiene que traducir ese nombre a una IP. Normalmente ese alguien es tu operadora, Google, Cloudflare o quien hayas puesto en el Pi-hole. Y ese alguien ve todo lo que consultas.

Unbound es un resolvedor recursivo. En vez de preguntarle a un intermediario, va directamente a la fuente y pregunta a los servidores raíz.

Lo bueno:

  • No dependes de ningún proveedor.
  • Nadie tiene un registro centralizado de todo lo que consultas.
  • Valida DNSSEC, así que es más difícil que te cuelen respuestas falsas.

Lo no tan bueno:

  • Las consultas a los servidores autoritativos no van cifradas, así que tu operadora puede verlas si quiere.
  • La primera vez que visitas un dominio tarda un poco más. Luego se guarda en caché y tarda menos.

Lo que necesitas

¡Al lío!

1. Instalar Unbound

sudo apt install unbound

2. Configurarlo

sudo nano /etc/unbound/unbound.conf.d/pi-hole.conf
server:
    verbosity: 0
    interface: 127.0.0.1
    port: 5335
    do-ip4: yes
    do-udp: yes
    do-tcp: yes
    do-ip6: yes
    prefer-ip6: no
    harden-glue: yes
    harden-dnssec-stripped: yes
    use-caps-for-id: no
    edns-buffer-size: 1232
    prefetch: yes
    num-threads: 1
    so-rcvbuf: 1m
    private-address: 192.168.0.0/16
    private-address: 169.254.0.0/16
    private-address: 172.16.0.0/12
    private-address: 10.0.0.0/8
    private-address: fd00::/8
    private-address: fe80::/10

Unbound escucha solo en 127.0.0.1, puerto 5335. Es decir, solo le habla al Pi-hole, nadie más de la red lo ve. Si no tienes IPv6 funcionando en casa, cambia do-ip6 a no.

3. Quitar el resolvconf de Unbound

En Debian 11 y posteriores, Unbound trae un servicio que puede hacer que acabe reenviando las consultas a otro DNS en vez de resolverlas él, así que lo quitamos del medio.

sudo systemctl disable --now unbound-resolvconf.service
sudo sed -Ei 's/^unbound_conf=/#unbound_conf=/' /etc/resolvconf.conf
sudo rm -f /etc/unbound/unbound.conf.d/resolvconf_resolvers.conf
sudo systemctl restart unbound

Si el sed te dice que no encuentra /etc/resolvconf.conf, como me pasó a mí, no pasa nada. Significa que no tienes el paquete resolvconf instalado, así que no hay nada que tocar ahí. Lo que importa es que se desactive el servicio, y eso lo hace la primera línea.

4. Comprobar que funciona

dig pi-hole.net @127.0.0.1 -p 5335

Tiene que salir status: NOERROR.

Ahora comprobamos DNSSEC:

dig fail01.dnssec.works @127.0.0.1 -p 5335
dig dnssec.works @127.0.0.1 -p 5335

El primero es un dominio con la firma rota a propósito y tiene que dar SERVFAIL. El segundo está bien firmado y tiene que dar NOERROR. Si es así, Unbound está rechazando respuestas falsas como debe.

5. Decirle al Pi-hole que use Unbound

Puedes hacerlo desde la web, pero ya que estamos en la consola…

sudo pihole-FTL --config dns.upstreams '["127.0.0.1#5335"]'

Esto sustituye la lista de servidores entera, así que el que tuvieras antes desaparece, comprueba en la web que todo es correcto.

6. Prueba final

Desde otro ordenador de la red:

dig pi-hole.net @IP_DE_TU_PIHOLE

Si responde y en el registro de consultas del Pi-hole aparece reenviada a 127.0.0.1#5335, ya está.

Y ya estaría.

Webmentions

Sukil Etxenike
@jpavonabian Buenas, lo que te comentaba el otro día de cambiar la preview de las páginas. Veo que el tema que utilizas tiene cinco años sin actualizarse, si quieres mira este que parece ser más o menos compatible y arregla esa parte. Usa webmention.io por detrás para hacer webmentions, no sé lo difícil que te será poner el tuyo. https://themes.gohugo.io/themes/indiepaper/ Indiepaper