Hace ya más de un año que empecé con el proyecto del homelab. La verdad que en mis inicios lo sobrecompliqué todo: instalé Proxmox con varios contenedores, un router virtual, servicios que no necesitaba y un sinfín de rabbit holes que, si bien no fueron tan útiles al final, me sirvieron para aprender y acabar simplificando bastante las cosas.
Si Google o alguna IA te ha traído hasta aquí, probablemente ya sepas qué es un servidor DNS y qué es Pi-Hole, pero por si acaso, hago una intro rápida.
¿Qué es un servidor DNS y qué es Pi-Hole?
Un servidor DNS (Domain Name System) traduce nombres de dominio (como google.com) a direcciones IP que entienden los ordenadores (como 142.250.185.14). Es como la guía telefónica de internet.
Algunos ejemplos de servidores DNS:
- Los del ISP (vienen por defecto en tu router)
- Google DNS (8.8.8.8)
- Cloudflare (1.1.1.1)
- Quad9 (9.9.9.9)
Pi-Hole se coloca en medio de esta comunicación, interceptando todas las peticiones DNS que hacen los dispositivos de tu red local, y bloqueando aquellas que están en listas negras (trackers, publicidad, malware, etc.).
Mi homelab y mi uso concreto
Mi homelab es simple:
- Un ordenador principal con Arch Linux (host del homelab)
- Un MacBook Air
- El router del operador (sin modificar)
- Otros dispositivos conectados: portátil de mi pareja, móviles, TV, Google Home Mini…
¿Qué quiero conseguir?
Quiero que un contenedor Docker con Pi-Hole actúe como servidor DNS para toda mi red local.

Para evitar enrutar tráfico DNS desde mi host al contenedor, uso una red macvlan. Esto le da a Pi-Hole una IP propia dentro de la red local, como si fuera un dispositivo más.
¿Por qué usar Pi-Hole y cambiar los DNS?
Privacidad
Sin darte cuenta, todas tus consultas DNS suelen ir directamente a tu proveedor de internet (ISP), porque así viene configurado el router por defecto. Esos datos luego se venden para crear perfiles y segmentarte con publicidad.
Con Pi-Hole:
- Reduces el rastreo.
- Ganas privacidad.
- Filtras contenido malicioso antes de que llegue a tus dispositivos.
Seguridad
Un servidor DNS comprometido puede redirigir tus peticiones a sitios maliciosos sin que lo notes. Pi-Hole actúa como una capa de defensa adicional.
Rendimiento
Pi-Hole mantiene una caché de peticiones, así que muchas respuestas se resuelven más rápido sin necesidad de salir de tu red.
Red macvlan en Docker
Este tipo de red sólo funciona en Linux. En Windows o macOS no es compatible directamente. Si no usas Linux, más abajo te doy una alternativa.
Una red macvlan permite que el contenedor tenga su propia IP dentro de la red local. Lo bueno: cada contenedor se comporta como si fuera un dispositivo más en la red. Lo malo: hay que hacer algún truquito para que el host y el contenedor se puedan comunicar.
¿Por qué el contenedor no puede comunicarse con el host?
Por diseño del kernel de Linux, la interfaz del host y la del contenedor en red macvlan están aisladas. No se pueden comunicar entre sí directamente.
Mas información sobre la red maclvland docker en su documentación oficial: https://docs.docker.com/engine/network/drivers/macvlan/
Para solucionarlo, más abajo creo una interfaz virtual (macvlan-shim) que actúa de puente.

Instalación
Asumo que tienes Docker instalado y sabes lo básico. Aquí vamos al grano.
Crear red macvlan
docker network create -d macvlan \
--subnet=192.168.1.0/24 \ # subnet de la red
--gateway=192.168.1.1 \ # ip del router
-o parent=enp7s0 \ # la internace por la que recibes internet, en mi caso ethernet
--ip-range=192.168.1.240/28 \ # rango de la red
pihole_macvlan # nombre de la red
Crear directorios persistentes
mkdir -p ~/docker/pihole/etc-pihole
mkdir -p ~/docker/pihole/etc-dnsmasq.d
Crear docker-compose.yml
services:
pihole:
image: pihole/pihole:latest
container_name: pihole
hostname: pihole
restart: unless-stopped
networks:
pihole_net:
ipv4_address: 192.168.1.250 # asignacion manual de la ip del contenedor
volumes: #montaje de los volumenes para persistencia
- ./etc-pihole:/etc/pihole
- ./etc-dnsmasq.d:/etc/dnsmasq.d
environment:
TZ: Europe/Madrid
WEBPASSWORD: "cambiala123"
DNSMASQ_LISTENING: all
DNS1: 9.9.9.9 #no nos preocupamos mucho por eso, se puede cambiar luego
DNS2: 149.112.112.112
cap_add:
- NET_ADMIN
networks:
pihole_net:
external: true
name: pihole_macvlan #red que previamente hemos creado.
Después, levanta el contenedor:
# Comprobar que estamos en el directorio ~/docker/pihole
# si hacemos ls, deberiamos ver dos carpetas (etc-pihole y etc-dnsmasq.d) y el docker-compose.yml
docker-compose up -d
Acceder desde el host
No podrás entrar desde 192.168.1.250 si estás en el mismo host. Para solucionarlo:
sudo ip link add macvlan-shim link enp7s0 type macvlan mode bridge
sudo ip addr add 192.168.1.251/32 dev macvlan-shim
sudo ip link set macvlan-shim up
sudo ip route add 192.168.1.250 dev macvlan-shim
Si quieres saber que es lo que hace paso a paso, copia y pregunta a ChatGPT o Claude, que te lo van a exlicar mejor que yo, pero basicmamente lo que hace es que cuando tu host este buscando la ip 192.168.1.250 lo enrute a macvlan-shim que es donde esta conectado nuestro contenedor docker con pihole.
Ahora ya debería ir todo bien y podrás acceder a http:///192.168.1.250/admin desde el host.
Opción sin macvlan (modo bridge)
Si usas Windows o mac, o no quieres complicarte:
Si quieres saber que es lo que hace paso a paso, copia y pregunta a ChatGPT o Claude, que te lo van a exlicar mejor que yo, pero basicmamente lo que hace es que cuando tu host este buscando la ip 192.168.1.250 lo enrute a macvlan-shim que es donde esta conectado nuestro contenedor docker con pihole.
Ahora ya debería ir todo bien y podrás acceder a http:///192.168.1.250/admin desde el host.
services:
pihole:
container_name: pihole
image: pihole/pihole:latest
restart: unless-stopped
environment:
TZ: "Europe/Madrid"
WEBPASSWORD: "cambiala123"
DNS1: 1.1.1.1
DNS2: 1.0.0.1
volumes: #montaje de los volumenes para persistencia
- ./etc-pihole:/etc/pihole
- ./etc-dnsmasq.d:/etc/dnsmasq.d
ports:
- "53:53/tcp" # DNS TCP
- "53:53/udp" # DNS UDP
- "80:80" # Panel web
cap_add:
- NET_ADMIN
Recuerda abrir los puertos en el firewall si es necesario.
Configuración básica de Pi-Hole
Nada más instalarlo, accede a http://192.168.1.250/admin. Usa el comando pihole setpassword desde dentro del contenedor para cambiar la contraseña.

Te recomiendo revisar:
- Settings > DNS para seleccionar tus proveedores DNS preferidos
- Group Management > Adlists para gestionar listas de bloqueo
Qué DNS uso
Yo uso Quad9 (9.9.9.9 y 149.112.112.112). No tengo una razón técnica concreta más allá de que me generan más confianza y su política de privacidad es bastante clara.

Listas de bloqueo
Las que vienen por defecto ya bloquean bastante, pero puedes añadir otras desde Blocklist Project. Hay listas temáticas para trackers, anuncios, malware, juegos de azar, etc.

Configurar DNS en el router y dispositivos
Router
Entra en 192.168.1.1, busca la configuración DNS y pon:
- DNS 1: 192.168.1.250
- DNS 2: 9.9.9.9 (respaldo)
Reinicia el router tras guardarlo.
Dispositivos
Normalmente toman los DNS por DHCP (modo automático). Si los has configurado manualmente, cámbialos a:
- DNS 1: 192.168.1.250
- DNS 2: 9.9.9.9
Consideraciones adicionales
Navegadores y DNS over HTTPS (DoH)
Chrome y Firefox a veces fuerzan el uso de DoH (DNS sobre HTTPS), lo que hace que las peticiones DNS no pasen por Pi-Hole. En Chrome, puedes desactivar esto desde:
chrome://settings/security > Usar DNS seguro

Desactívalo o usa un proveedor actual del servicio “With your current service provider”
iCloud Private Relay
Si tienes dispositivos Apple, desactiva iCloud Private Relay. Este servicio redirige el tráfico DNS por sus propios servidores y por defecto en la lista que viene por defecto de pihole, el trafico hacia estos servicios de icloud estan blouqeados, estos dominios son: mask.icloud.com o similares
Tanto en chrome con cloudflare o safari/apple con icloud, tienes dos opciones, o enviar tu trafico dns a través de ellos, de modo que en pihole solo veras peticiones a esos dominios no a los dominos que realmente visitas y derivas en ellos tu privacidad y tus seguridad, o los desactivas y usas pihole.
Documentación oficial de apple sobre cómo funciona el relay privado de icloud
Conclusión
Este setup puede parecer un poco lioso al principio, pero una vez configurado, tener Pi-Hole en tu red es una de esas pequeñas mejoras que notas a diario. Menos anuncios, más privacidad, y control total sobre el tráfico DNS en tu red.
Si has llegado hasta aquí y has montado todo con éxito: enhorabuena. Mandame un email si tienes dudas o quieres comentar algo.