--- title: "Cómo instalar Pi-hole en Ubuntu 24.04 para bloquear anuncios" description: "Instala Pi-hole 6 en Ubuntu 24.04 como servidor DNS que bloquea anuncios y rastreadores, protégelo con UFW, gestiona listas de bloqueo y configura tus equipos." category: "DNS Avanzado" language: es source: https://cubepath.com/es/docs/dns-avanzado/pi-hole-servidor-dns-bloqueador-de-anuncios updated: 2026-09-25 --- # Cómo instalar Pi-hole en Ubuntu 24.04 para bloquear anuncios Pi-hole es un servidor DNS que bloquea publicidad, rastreadores y dominios maliciosos para todos los dispositivos que lo usen, sin instalar nada en cada navegador. Cuando un dispositivo pregunta por un dominio de una lista de bloqueo, Pi-hole responde con `0.0.0.0` y la petición nunca sale. En este tutorial instalarás Pi-hole 6 en un servidor con Ubuntu 24.04, lo protegerás para que solo lo usen tus dispositivos, gestionarás listas de bloqueo y excepciones y configurarás los clientes. ## Requisitos previos - Un servidor con Ubuntu 24.04 LTS y una IP fija, por ejemplo un VPS de CubePath. Basta con 1 vCPU y 512 MB de RAM. - Un usuario no root con privilegios `sudo`. - La IP pública desde la que se conectarán tus dispositivos (la de tu casa u oficina), que en los ejemplos aparece como `your_home_ip`. La IP del servidor aparece como `your_server_ip`. > Advertencia: si el servidor tiene IP pública, no dejes el puerto 53 abierto a todo Internet. Un resolvedor DNS abierto se usa para ataques de amplificación. En esta guía solo se permite el acceso desde `your_home_ip`. Si tus dispositivos cambian de IP a menudo (móviles), conéctalos al servidor por una VPN como WireGuard y usa Pi-hole a través de ella. ## Paso 1: Descargar y ejecutar el instalador Pi-hole se instala con su propio script, que es el método oficial. Descárgalo primero para poder revisarlo antes de ejecutarlo como root: ```bash curl -sSL https://install.pi-hole.net -o basic-install.sh less basic-install.sh ``` Ejecútalo: ```bash sudo bash basic-install.sh ``` El asistente te pedirá varias opciones. Estas son razonables para un servidor: - **Interface**: la interfaz con la IP pública (normalmente `eth0` o `ens3`). - **Upstream DNS Provider**: el resolvedor al que Pi-hole reenviará las consultas que no bloquee, por ejemplo Cloudflare o Quad9. - **Blocklists**: acepta la lista por defecto (StevenBlack's Unified Hosts List). - **Query logging** y **privacy mode**: activa el registro con el nivel de privacidad que prefieras; se puede cambiar después. Si `systemd-resolved` ocupa el puerto 53, el instalador desactiva su *stub listener* automáticamente creando `/etc/systemd/resolved.conf.d/90-pi-hole-disable-stub-listener.conf`. Al terminar, el instalador muestra la URL del panel y una contraseña generada. Comprueba que el servicio está en marcha: ```bash sudo pihole status ``` ```output [✓] FTL is listening on port 53 [✓] UDP (IPv4) [✓] TCP (IPv4) [✓] UDP (IPv6) [✓] TCP (IPv6) [✓] Pi-hole blocking is enabled ``` ## Paso 2: Establecer la contraseña del panel Cambia la contraseña generada por una tuya: ```bash sudo pihole setpassword ``` El comando la pide de forma interactiva, así que no queda en el historial de la shell. ## Paso 3: Permitir consultas desde tus dispositivos Pi-hole 6 arranca en modo de escucha `LOCAL`: solo responde a equipos de las subredes conectadas directamente al servidor. Es un valor seguro para una red doméstica, pero en un VPS tus dispositivos están en otra red y sus consultas se ignorarían. Cambia el modo a `ALL`: ```bash sudo pihole-FTL --config dns.listeningMode ALL ``` A partir de ahora el filtrado lo hace el firewall. Activa UFW permitiendo SSH y el puerto 53 solo desde tu IP: ```bash sudo ufw allow OpenSSH sudo ufw allow from your_home_ip to any port 53 sudo ufw enable sudo ufw status ``` ```output To Action From -- ------ ---- OpenSSH ALLOW Anywhere 53 ALLOW your_home_ip ``` El panel web de Pi-hole escucha en los puertos 80 y 443, pero no los abras: accederás a él por un túnel SSH en el paso 5. ## Paso 4: Verificar el bloqueo Desde un equipo de tu casa u oficina, consulta a Pi-hole un dominio normal y otro de publicidad: ```bash dig @your_server_ip cubepath.com +short dig @your_server_ip doubleclick.net +short ``` ```output 0.0.0.0 ``` El primero se resuelve con normalidad y el segundo devuelve `0.0.0.0`, que es la respuesta de bloqueo por defecto. En Windows puedes usar `nslookup doubleclick.net your_server_ip`. En el servidor, `pihole -q` indica en qué lista está un dominio: ```bash sudo pihole -q doubleclick.net ``` ## Paso 5: Acceder al panel web Abre un túnel SSH desde tu equipo que redirija un puerto local al puerto 80 del servidor: ```bash ssh -L 8080:127.0.0.1:80 your_user@your_server_ip ``` Mientras la sesión siga abierta, entra en `http://localhost:8080/admin` con la contraseña del paso 2. El panel muestra las consultas totales, el porcentaje bloqueado, los dominios más consultados y los clientes que usan Pi-hole. ## Paso 6: Añadir listas de bloqueo La lista por defecto bloquea unos cientos de miles de dominios de publicidad y malware. Puedes añadir más desde el panel en **Lists**, pegando la URL de la lista y pulsando **Add blocklist**. Algunas listas conocidas y mantenidas: - `https://raw.githubusercontent.com/hagezi/dns-blocklists/main/adblock/pro.txt` (HaGeZi Pro: publicidad, rastreo y telemetría) - `https://urlhaus.abuse.ch/downloads/hostfile/` (URLhaus: dominios que distribuyen malware) Cuantas más listas, más riesgo de bloquear algo legítimo; añade pocas y revisa el efecto. Después de añadir listas, reconstruye la base de datos de bloqueo (*gravity*): ```bash sudo pihole -g ``` La salida termina con el número de dominios únicos bloqueados: ```output [i] Number of gravity domains: 412337 (389021 unique domains) ``` Pi-hole ya actualiza las listas automáticamente una vez por semana, así que no necesitas programar esta tarea. ## Paso 7: Gestionar excepciones y bloqueos manuales Si una web deja de funcionar porque un dominio necesario está en una lista, añádelo a la lista de permitidos: ```bash sudo pihole allow cdn.example.com ``` Para bloquear un dominio concreto que no está en ninguna lista: ```bash sudo pihole deny telemetry.example.com ``` Para bloquear por expresión regular (en este caso, cualquier subdominio que empiece por `ads.`): ```bash sudo pihole --regex '^ads\.' ``` Muestra y elimina entradas con `-l` y `-d`: ```bash sudo pihole allow -l sudo pihole allow -d cdn.example.com ``` Los cambios se aplican al momento. Compruébalo repitiendo el `dig` del paso 4 con el dominio afectado. ## Paso 8: Configurar los dispositivos Para que todos los equipos de tu red usen Pi-hole, lo más cómodo es cambiarlo en el router: en la configuración DHCP o LAN, pon `your_server_ip` como servidor DNS primario y deja el secundario vacío. Si pones un segundo DNS público, los dispositivos lo usarán a veces y los anuncios volverán a aparecer. Si no puedes tocar el router, configúralo en cada dispositivo. En un Linux con `systemd-resolved`: ```bash sudo mkdir -p /etc/systemd/resolved.conf.d sudo nano /etc/systemd/resolved.conf.d/pihole.conf ``` ```ini [Resolve] DNS=your_server_ip Domains=~. ``` ```bash sudo systemctl restart systemd-resolved resolvectl query doubleclick.net ``` La consulta debe devolver `0.0.0.0`. Recuerda que la IP pública de tu casa debe coincidir con la que permitiste en UFW; si tu proveedor te la cambia, actualiza la regla. ## Paso 9: Mantenimiento Actualiza Pi-hole cuando haya versión nueva (el panel lo avisa en el pie de página): ```bash sudo pihole -up pihole -v ``` Para seguir en tiempo real las consultas que llegan: ```bash sudo pihole -t ``` Para hacer una copia de seguridad de toda la configuración (listas, excepciones, ajustes), usa **Settings > Teleporter** en el panel y descarga el archivo. El mismo menú permite restaurarla en otra instalación. ## Solución de problemas - **Los clientes no obtienen respuesta**: comprueba que su IP pública coincide con la regla de UFW (`sudo ufw status`) y que `dns.listeningMode` es `ALL` (`sudo pihole-FTL --config dns.listeningMode`). - **El puerto 53 está ocupado**: identifica el proceso con `sudo ss -lntup 'sport = :53'`. Si es `systemd-resolved`, revisa que exista el fichero `90-pi-hole-disable-stub-listener.conf` y reinicia el servicio. - **Una web ha dejado de funcionar**: en el panel, **Query Log** muestra los dominios bloqueados recientemente para ese cliente. Añade el necesario con `pihole allow`. - **Informe de diagnóstico**: `sudo pihole -d` revisa la instalación completa y genera un informe útil para pedir ayuda. Los logs están en `/var/log/pihole/FTL.log` y `/var/log/pihole/pihole.log`. ## Conclusión Pi-hole ya bloquea publicidad y rastreadores para los dispositivos que lo usen como DNS, está protegido para que solo tus IP puedan consultarlo y tienes el panel accesible por túnel SSH. Como siguientes pasos puedes instalar Unbound en el mismo servidor y usarlo como resolvedor de origen de Pi-hole para no depender de un proveedor externo, o montar WireGuard para usar Pi-hole desde el móvil fuera de casa.