Pi-hole DNS · Estudio Digital Nexo

Configuración de bloqueo de anuncios y DNS seguro para toda la red · Sede Madrid

● ACTIVO
Preparado por CULTIVA IA
Junio 2026
🛡️
284.150
Dominios bloqueados
3 listas activas compiladas
23,4%
Queries bloqueadas
De ~4.200 consultas/día
8 ms
Latencia DNS media
vs 42 ms con ISP DNS
🔒
DoH
DNS cifrado activo
Cloudflare 1.1.1.1 via cloudflared
🌐 Arquitectura de red
Flujo de consultas DNS con Pi-hole activo · Red 192.168.1.0/24
💻
Dispositivos
40 devices
DHCP automático
DNS query →
🕳️
Pi-hole
192.168.1.10
Pi 4 · v5.18
bloqueado = 0.0.0.0
🚫
Bloqueados
ads, trackers
malware domains
← DoH :5053
☁️
Cloudflare
1.1.1.1 / DoH
TLS cifrado
Consulta legítima (permitida)
Dominio bloqueado → 0.0.0.0
DNS-over-HTTPS (cifrado)
Router (fallback emergencia solo)
🐳 docker-compose.yml
Bare-metal / Docker
# /opt/pihole/docker-compose.yml
services:
pihole:
image: pihole/pihole:2024.07.0
container_name: pihole
ports:
- "53:53/tcp" # DNS
- "53:53/udp" # DNS
- "80:80/tcp" # Web admin
environment:
TZ: "Europe/Madrid"
WEBPASSWORD: "${PIHOLE_WEBPASSWORD}"
PIHOLE_DNS_: "127.0.0.1#5053"
DNSMASQ_LISTENING: "all"
volumes:
- "./etc-pihole:/etc/pihole"
- "./etc-dnsmasq.d:/etc/dnsmasq.d"
restart: unless-stopped
network_mode: "host"
⚠️
Seguridad .env
Guardar PIHOLE_WEBPASSWORD en .env con chmod 600. No incluir en git.
🔒 DNS-over-HTTPS · cloudflared
Cifrado activo
# Instalar cloudflared (ARM64 para Pi 4)
CLOUDFLARED_VERSION="2024.11.0"
curl -LO "https://github.com/cloudflare/cloudflared/releases/
download/${CLOUDFLARED_VERSION}/cloudflared-linux-arm64"
# Verificar checksum antes de instalar
sudo mv cloudflared-linux-arm64 /usr/local/bin/cloudflared
sudo chmod +x /usr/local/bin/cloudflared
# /etc/cloudflared/config.yml
proxy-dns: true
proxy-dns-port: 5053
proxy-dns-upstream:
- https://1.1.1.1/dns-query
- https://1.0.0.1/dns-query
# Instalar y arrancar servicio systemd
sudo cloudflared service install
sudo systemctl start cloudflared
sudo systemctl enable cloudflared

# Pi-hole apunta a: 127.0.0.1#5053
🚫 Listas de bloqueo activas
284.150 dominios
Lista Dominios Tipo Estado
StevenBlack hosts
Unified hosts + extras
202.418 Ads Activa
BlocklistProject · Malware
malware.txt
51.892 Malware Activa
BlocklistProject · Tracking
tracking.txt
29.840 Tracking Activa
Actualización automática: cada lunes a las 03:00 via pihole -g (cron)
Último gravity update: Lunes 16 Jun 2026 · 03:00 · 18 min
🗺️ Registros DNS locales
home.arpa
Dominio IP Servicio
pi.home.arpa 192.168.1.10 Pi-hole admin
nas.home.arpa 192.168.1.20 Synology NAS
printer.home.arpa 192.168.1.30 HP LaserJet Pro
grafana.home.arpa 192.168.1.10 Métricas red (futuro)
backup.home.arpa 192.168.1.21 CNAME → nas.home.arpa
Acceso: Pi-hole admin → Local DNS → DNS Records
CNAME: Local DNS → CNAME Records
📊 Top dominios bloqueados hoy
Query Log (últimas 24h)
doubleclick.net 412 bloqueos
googlesyndication.com 378 bloqueos
facebook.com/tr 291 bloqueos
hotjar.com 187 bloqueos
scorecardresearch.com 134 bloqueos
moatads.com 89 bloqueos
✅ Lista blanca · Herramientas SaaS
22 dominios permitidos
Dominio SaaS Motivo
api.hubspot.com HubSpot CRM live data
cdn.figma.com Figma Assets diseño
slack-edge.com Slack Media / archivos
tracking.metabase.com Metabase Licencia validación
lemon.squeezy.com Lemon Squeezy Checkout pagos
Añadir falso positivo: pihole -w dominio.com
Consultar si bloqueado: pihole -q dominio.com
📋 Pasos de instalación
Completado
  • 1
    IP estática en Raspberry Pi
    Asignar 192.168.1.10/24 en /etc/dhcpcd.conf antes de instalar Pi-hole.
    sudo nano /etc/dhcpcd.conf
  • 2
    Docker Engine instalado
    Docker + docker-compose en Raspberry Pi OS Lite 64-bit.
    curl -fsSL https://get.docker.com | sh
  • 3
    Pi-hole desplegado vía Docker Compose
    docker-compose.yml + .env con PIHOLE_WEBPASSWORD (chmod 600).
    docker compose up -d
  • 4
    cloudflared instalado y activo (DoH)
    Proxy DNS-over-HTTPS escuchando en 127.0.0.1:5053.
    systemctl status cloudflared
  • 5
    Router apuntado a 192.168.1.10
    DNS primario del router DHCP cambiado. Dispositivos renuevan DHCP automáticamente.
    Router admin → DHCP → DNS Primary
  • 6
    Gravity compilado + listas activas
    3 blocklists descargadas y compiladas. 284.150 dominios.
    pihole -g
🔧 Troubleshooting habitual
Referencia rápida
🔌
Dispositivo sin internet tras instalar Pi-hole
Verificar que pihole-FTL está corriendo: pihole status. Test directo: dig @192.168.1.10 google.com. Reiniciar DNS: pihole restartdns
🚨
SaaS bloqueado (falso positivo)
Consultar qué lista lo bloquea: pihole -q dominio.com. Añadir a whitelist: pihole -w dominio.com. También desde admin web → Whitelist.
🔋
Pi pierde corriente = red sin DNS
Documentar fallback en router: cambiar DNS primario temporalmente a 1.1.1.1. La Pi tiene UPS de 18.000 mAh para cortes breves.
🔄
Actualizar blocklists (gravity)
Manual: pihole -g. Automático: cron configurado en /etc/cron.d/pihole (lunes 03:00). Tarda ~15 min, DNS operativo durante el update.

Live monitoring:
pihole -t — tail de todas las queries en tiempo real
pihole -c — estadísticas en consola (cronomonitor)
http://192.168.1.10/admin — panel web Pi-hole
⛔ Anti-patrones evitados
Mejores prácticas
DNS fallback público en router
Un segundo DNS (1.1.1.1) en el router permite que los dispositivos salten el bloqueo cuando Pi-hole tarda. Configurado sin fallback secundario.
Tag :latest en docker-compose
Usar pihole:latest en DNS crítica es peligroso. Fijado a pihole:2024.07.0 para upgrades deliberados y revisables.
Dominio .local para DNS local
Conflicto con mDNS/Bonjour en macOS. Usado .home.arpa (RFC 8375) para los registros DNS locales de Nexo.
Pi-hole DHCP sin deshabilitar router DHCP
Dos servidores DHCP en la misma red causan conflictos de IPs. Nexo mantiene DHCP en el router (suficiente para la escala actual).
Gravity sin actualización programada
Nuevos dominios de malware y ads no se bloquean con listas estancadas. Cron semanal configurado: pihole -g cada lunes 03:00.
✓ Checklist de verificación
Post-instalación
  • IP estática asignada a la Pi (192.168.1.10)
    Verificado con ip addr show eth0
  • Pi-hole resuelve DNS correctamente
    dig @192.168.1.10 google.com devuelve A record
  • Pi-hole bloquea dominio de prueba
    dig @192.168.1.10 doubleclick.net devuelve 0.0.0.0
  • cloudflared activo en :5053
    dig @127.0.0.1 -p 5053 google.com resuelve
  • Router DHCP apunta a 192.168.1.10
    Todos los dispositivos obtienen Pi-hole como DNS
  • HubSpot, Slack, Figma funcionan correctamente
    Dominios críticos whitelisteados tras prueba en oficina
  • Cron de gravity update configurado (lunes 03:00)
    cat /etc/cron.d/pihole muestra la tarea
  • Segunda instancia Pi-hole para redundancia
    Pendiente: añadir Pi Zero 2W como réplica (fase 2)
  • Grafana + dashboard de métricas DNS
    Planificado para Q3 2026 (Prometheus + Pi-hole exporter)
🌍 Apuntar la red a Pi-hole · Configuración router Vodafone HFC
Paso clave
Método recomendado (red completa)
# Router admin UI
→ Configuración DHCP
→ DNS Primario
192.168.1.10

# DNS Secundario: DEJAR VACÍO
# (no poner 1.1.1.1 como fallback)

# Renovar DHCP en devices:
reconectar WiFi
# o en Linux:
sudo dhclient -r && dhclient
Test por dispositivo (antes del rollout)
# macOS
System Settings → Network
→ Details → DNS
→ Añadir 192.168.1.10

# Windows
Panel Control → Red
→ IPv4 → DNS manual
192.168.1.10

# Verificar desde terminal:
nslookup google.com 192.168.1.10
Rollback de emergencia
# Si Pi-hole falla completamente:

# 1. Router: cambiar DNS primario
1.1.1.1 (Cloudflare)

# 2. Reiniciar Pi-hole:
docker compose restart pihole

# 3. Restaurar DNS en router
192.168.1.10

# Todo el proceso: ~3 minutos