Page cover

DNS y bloqueador de anuncios con Pi-hole

Pi-hole es un servidor DNS que bloquea publicidad y rastreadores a nivel de red.

Funciona interceptando las peticiones DNS de los dispositivos conectados y bloqueando dominios conocidos de publicidad antes de que carguen. Se instala normalmente en un servidor local (como una Raspberry Pi o máquina virtual) y protege toda la red sin necesidad de instalar extensiones en cada equipo.

En nuestro caso planteamos el siguiente escenario para su funcionamiento:

Escenario actual

Debemos primero plantear el escenario de máquinas virtuales con el que nos encontramos:

Máquina
Adaptadores de red
IP
Función

Ubuntu Server (Pi-hole)

1. Adaptador puente 2. Red interna “LAB”

1. IP LAN real 2. 10.0.0.5

DNS y puerta de enlace interna

Ubuntu Desktop (Cliente)

1. Red interna “LAB”

10.0.0.x

Cliente

👉 El problema es que la máquina cliente no tiene acceso a Internet, ya que solo está en la red interna y no hay NAT configurado. Para ello, la solución general va a pasar por configurar el Pi-hole como gateway y NAT. Básicamente:

  1. El cliente usa el Pi-hole como DNS y puerta de enlace.

  2. El servidor hace NAT hacia el adaptador puente.

Esto se hace con unas pocas configuraciones en el servidor:


1. Asignar IP estática al adaptador interno (Pi-hole)

Edita /etc/netplan/01-netcfg.yaml (o el archivo correspondiente a tu versión de Ubuntu Server):

network:
  version: 2
  renderer: networkd
  ethernets:
    enp0s3:   # Adaptador puente
      dhcp4: true
    enp0s8:   # Adaptador interno
      addresses:
        - 10.0.0.5/24

Luego:

2. Habilitar el reenvío de paquetes IP en el servidor y configurar NAT con iptables

Edita /etc/sysctl.conf con nano y descomenta o agrega:

Aplica los cambios:

Ahora vamos a configurar el servicio NAT para permitir la entrada de datos de Internet a través de la segunda interfaz. Para ello, si tu adaptador puente es enp0s3 y el interno enp0s8 escribe lo siguiente:

Para hacerlo persistente tras reinicio, puedes instalar iptables-persistent:

3. Configurar Pi-hole para escuchar en la red interna

Durante o después de la instalación de Pi-hole, asegúrate que:

  • Escuche en la IP 10.0.0.5.

  • Resuelva DNS usando, por ejemplo, 1.1.1.1 o 8.8.8.8 como upstream.

  • Permita solicitudes de toda la red interna.

4. Instalar pihole

Primero empezaremos por actualizar el sistema como buena práctica:

También nos aseguraremos que esté instalado curl

y, si no lo tienes, lo instalas con:

Ahora, ejecuta el instalador oficial de Pi-hole:

Sigue ahora el asistente interactivo:

  • Elegir interfaz de red con IP estática, en nuestro caso enp0s8 (red interna).

  • Elegir activar DHCP.

  • Seleccionar DNS upstream (Google, Cloudflare, etc.).

Al final te mostrará la contraseña de acceso a la interfaz web y como acceder:

  • Desde un navegador de tu máquina host (Windows): http://<IP-del-servidor>/admin:80

Si ya lo instalaste previamente (por el motivo que sea) puedes "reconfigurarlo" con:

y seleccionas reconfigure.

5. Probar conectividad y Uso

Desde la interfaz de pi-hole, accede a la opción de DHCP y configúrala tal que así:

Ahora para probar si ha funcionado todo, desde el cliente probamos:

En el servidor:

Deberías ver las consultas DNS pasando por Pi-hole, si hacemos una prueba entrando a una web con anuncios veremos la diferencia:

A la izquierda, sin pi-hole, a la derecha, con pi-hole

Prueba ahora a acceder a la interfaz de pihole y entra a alguna página potencialmente maliciosa (Por ejemplo, www.annualconsumersurvey.com), verás que no te deja acceder y ahora las queries bloqueadas en pihole:

Si pruebas con youtube, te darás cuenta que pi-hole no funciona, ¿Por qué?

La respuesta es muy sencilla, Pi-hole solo trabaja a nivel de DNS (dominios), no puede distinguir si esa IP sirve un anuncio o el video en sí. Si bloqueas ese dominio, también bloqueas el video 😅. Además, los anuncios se insertan dinámicamente en la misma conexión HTTPS y YouTube cambia constantemente los endpoints de anuncios por lo que aunque instales algunas blacklist concretas, youtube las romperá en cuestión de dias.

Que listos son estos de youtube! Pero recuerda que siempre puedes usar adblocker 😉

Puedes tratar ahora tú de configurar un dominio excluido, es una buena forma de establecer un "control parental" o filtrar en tu empresa o domicilio.

Última actualización