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