Implementando Pi-hole con Docker en el laburo

Hace rato tenía ganas de implementar Pi-hole en el entorno de laburo. ¿Por qué? Porque me parece una herramienta clave por varias razones:

  • Podés bloquear anuncios a nivel de red (sí, todos los dispositivos de la LAN disfrutan de internet más limpio).
  • Tenés métricas en tiempo real sobre el tráfico DNS: quién consulta qué, cuánto y cuándo.
  • Si algún directivo en el futuro dice “che, ¿no se puede bloquear tal sitio?”, la respuesta es: sí papá, ya está todo listo.

Así que con eso en mente, arranqué a armar el entorno.

⚙️ Preparando el terreno

Me pasaron una máquina bastante gauchita y le metí Proxmox. Dentro, levanté una VM con Ubuntu Server y durante la instalación me preguntó si quería instalar Docker… ¡de una!

Una vez adentro de Ubuntu, fui a la doc oficial de Pi-hole para Docker y preparé el archivo docker-compose.yml con nano. Le cargué todos los parámetros necesarios, ajusté el timezone, las IPs, etc.,

y ejecuté:

🚨 Problema inesperado

Cuando todo parecía funcionar… Pi-hole no levantaba.

Al tirar comando:

Mostraba esto:

🧩 Diagnóstico

  • Pi-hole necesita el puerto 53 (DNS).
  • Ubuntu tiene corriendo systemd-resolved, que escucha en 127.0.0.53:53.
  • Resultado: conflicto de puertos y Pi-hole no puede iniciar ni recibir consultas.

🔧 Solución 1 – Funcional pero medio “a lo guapo”

Apagué systemd-resolvedcon:

y edité /etc/resolv.conf para que use DNS externos:

Reinicié parámetros IP

Con eso volvió el internet en la VM y Pi-hole arrancó joya. Pero no me cerraba andar matando servicios del sistema como si nada…

💡 Solución 2 – Más elegante (ya implementada)

Una mejor práctica es hacer que Pi-hole escuche solo en la IP LAN de la VM:

Editar el archivo:

Tendría que quedar algo asi modificando solo parte de ip y puertos:

Borramos el contenedor y lo volvemos a crear con compose, si el volume esta bien cargado, no se deberían perder los datos persistentes del contenedor.

Ahora vemos a docker llevándose de 10 con systemd-resolved (no miren los flags que uso con netstat, es la unica forma que los he podido memorizar):

✅ Así:

  • systemd-resolved sigue funcionando para la VM.
  • Pi-hole atiende a toda la LAN sin conflicto.
  • No matás ningún proceso base del sistema.

🌐 Configurando el DHCP

Una vez funcionando bien Pi-hole, fui al servidor DHCP (en mi caso, el router) y cambié la configuración para que el DNS principal sea la IP del Pi-hole. Así todos los dispositivos conectados empiezan a usarlo automáticamente.

¡Ojo! También dejé los clásicos 1.1.1.1 y 8.8.8.8 como secundarios, por si Pi-hole se cae, que la red siga funcionando y no se me venga nadie con antorchas.

📊 Pi-hole en acción

Con todo configurado, abrí el dashboard web de Pi-hole y ahí estaban: las métricas en tiempo real, dominios bloqueados, clientes conectados, consultas por segundo… un golazo.


¿Y vos, qué esperás para meter un Pi-hole en tu red? ¿Lo tenés en una Raspi, en Docker, en una VM, o en una caja de cartón con cinta aisladora y una gallina picoteando maíz arriba del aparato?

Contame abajo y tirá tus tips. 👇