Despliegue de Pi-hole y Unbound en un VPS: DNS privado y bloqueo de anuncios
TL;DR
En esta guía, configuraremos la combinación de Pi-hole y Unbound en un servidor privado virtual (VPS) para crear nuestro propio servidor DNS privado y recursivo con función de bloqueo de anuncios y rastreadores. Esto proporcionará mayor privacidad, seguridad y control sobre el tráfico de internet para todos los dispositivos de su red.
- Bloqueo completo de anuncios y rastreadores a nivel de DNS para todos los dispositivos.
- Mayor privacidad mediante el uso de nuestro propio DNS recursivo (Unbound), que no depende de proveedores de DNS de terceros.
- Rendimiento mejorado gracias al almacenamiento en caché de las consultas DNS en su VPS.
- Gestión centralizada de consultas DNS y bloqueos a través de la cómoda interfaz web de Pi-hole.
- Máximo control sobre los datos y sin transferencia de consultas DNS a terceros.
- Instrucciones detalladas paso a paso para configurar el servidor en Ubuntu 24.04 LTS.
¿Qué configuramos y por qué?
En la internet moderna, la publicidad y los rastreadores se han convertido en una parte integral de la experiencia del usuario, afectando negativamente la velocidad de carga de las páginas, el consumo de tráfico y, lo más importante, la privacidad. Los servidores DNS estándar, proporcionados por proveedores de internet o grandes empresas (Google, Cloudflare), aunque rápidos, recopilan datos sobre sus consultas, lo que puede utilizarse para la elaboración de perfiles y publicidad dirigida.
Este artículo está dedicado al despliegue de la combinación de Pi-hole y Unbound en su propio VPS. Pi-hole es un bloqueador de anuncios y rastreadores a nivel de red, que funciona a nivel de DNS. Intercepta las consultas DNS de todos los dispositivos de su red y bloquea las consultas a dominios conocidos de publicidad y rastreo, devolviéndoles una respuesta vacía. Como resultado, los anuncios simplemente no se cargan, lo que mejora significativamente la velocidad de navegación y reduce el consumo de datos.
Unbound es un resolvedor DNS validador, recursivo y con caché. A diferencia de los servidores DNS tradicionales, que simplemente reenvían sus consultas a otros servidores, Unbound realiza de forma independiente todo el proceso de resolución de nombres de dominio, comenzando desde los servidores DNS raíz y descendiendo gradualmente por la jerarquía de dominios. Esto significa que sus consultas DNS no pasan por proveedores de terceros, lo que garantiza la máxima privacidad y resistencia a la censura, ya que nadie, excepto su VPS, sabe qué sitios web visita.
En resumen, el lector obtendrá un servidor DNS completamente privado y eficiente que:
- Bloquea anuncios, ventanas emergentes y rastreadores en todos los dispositivos (ordenadores, smartphones, Smart TV, dispositivos IoT) conectados a su red.
- Aumenta la privacidad al no transferir sus consultas DNS a terceros.
- Acelera la carga de páginas web gracias al bloqueo de contenido innecesario y al almacenamiento en caché de las consultas DNS.
- Proporciona estadísticas detalladas de consultas DNS y bloqueos a través de una cómoda interfaz web.
- Proporciona un nivel adicional de seguridad mediante la validación DNSSEC.
Alternativas y por qué autoalojado en un VPS
Existen varias alternativas para el bloqueo de anuncios y la mejora de la privacidad DNS:
- Extensiones del navegador: Son efectivas solo para un navegador específico y no funcionan para aplicaciones, Smart TV u otros dispositivos.
- Servidores DNS públicos con bloqueo de anuncios: Por ejemplo, AdGuard DNS o NextDNS. Bloquean anuncios, pero usted sigue confiando sus consultas DNS a un proveedor externo que puede recopilar y analizar datos.
- Servicios VPN: Muchos VPN ofrecen bloqueo de anuncios y protección de la privacidad. Sin embargo, usted sigue confiando en el proveedor de VPN, y las consultas DNS a menudo son procesadas por sus propios servidores, no de forma recursiva.
- Soluciones gestionadas en la nube: Algunos proveedores ofrecen servicios DNS gestionados con funciones avanzadas, pero suelen ser más caros y menos flexibles en la configuración que una solución propia.
El despliegue de Pi-hole y Unbound en su propio VPS ofrece una combinación única de ventajas:
- Control total: Usted controla completamente sus datos y configuraciones.
- Máxima privacidad: Unbound garantiza que sus consultas no pasen por servidores DNS de terceros.
- Flexibilidad: Posibilidad de añadir cualquier lista de bloqueo, crear reglas propias, integrar con otros servicios.
- Economía: El costo de un VPS pequeño a menudo es comparable al de los servicios DNS de pago, pero con mucha más funcionalidad y privacidad.
- Acceso desde cualquier lugar: Su servidor Pi-hole/Unbound estará disponible desde cualquier parte del mundo con acceso a internet, si configura un acceso seguro (por ejemplo, a través de una VPN en el mismo VPS).
Esta es una solución ideal para quienes valoran la privacidad, la seguridad y desean tener control total sobre su experiencia en internet.
¿Qué configuración de VPS se necesita para esta tarea?
Para el despliegue de Pi-hole y Unbound no se requieren recursos computacionales significativos. Estos servicios son bastante ligeros y pueden funcionar incluso en las configuraciones más modestas.
Requisitos mínimos:
- CPU: 1 núcleo (virtual). Los procesadores modernos ofrecen un rendimiento suficiente.
- RAM: 512 MB. Para el funcionamiento básico de Pi-hole y Unbound, esto es suficiente. Si planea un gran número de clientes (más de 50-100) o listas de bloqueo muy grandes, podría necesitar 1 GB.
- Disco: 10-20 GB SSD. Pi-hole y Unbound ocupan poco espacio, pero el sistema operativo y los registros requieren algo de espacio. SSD es preferible para un mejor rendimiento de las consultas DNS y una carga más rápida del sistema.
- Red: 100 Mbps. Las consultas DNS consumen muy poco tráfico, por lo que incluso una velocidad de canal básica será más que suficiente.
- Sistema operativo: Ubuntu Server 24.04 LTS (o Debian 12/13).
Plan de VPS recomendado para la tarea:
Para un funcionamiento cómodo, con margen para el futuro y la posibilidad de instalar servicios adicionales pequeños (por ejemplo, WireGuard VPN en el mismo VPS), se recomienda la siguiente configuración:
- CPU: 2 vCPU
- RAM: 2 GB
- Disco: 40 GB SSD
- Red: Puerto de 1 Gbps (con tráfico a partir de 500 GB/mes)
Un VPS con las características indicadas garantizará el funcionamiento estable de Pi-hole y Unbound, y también permitirá ampliar la funcionalidad del servidor en el futuro sin necesidad de una actualización. Puede elegir una tarifa adecuada de cualquier proveedor confiable que ofrezca un VPS con estos parámetros.
Cuándo se necesita un dedicado, no un VPS
Para Pi-hole y Unbound como tarea única o principal, un servidor dedicado (dedicated) generalmente no es necesario. Un VPS maneja completamente esta carga. Sin embargo, un servidor dedicado puede justificarse en los siguientes casos:
- Carga muy alta: Si planea atender a cientos o miles de clientes (por ejemplo, una oficina grande, una red pública) y utilizar listas de bloqueo muy agresivas y voluminosas.
- Muchos otros servicios que consumen muchos recursos: Si su servidor no solo alojará Pi-hole/Unbound, sino también servidores de juegos, aplicaciones web de alta carga, bases de datos con un gran volumen de operaciones de entrada/salida.
- Requisitos de rendimiento del disco: Si necesita el máximo IOPS para tareas específicas que no están directamente relacionadas con DNS.
- Control total sobre el hardware: Para algunas tareas relacionadas con la seguridad o requisitos de hardware específicos, un servidor dedicado puede ser preferible.
Para la mayoría de los usuarios que desean un DNS privado y bloqueo de anuncios, un VPS es la solución óptima y económicamente ventajosa. Si, sin embargo, decide que necesita un servidor dedicado, puede considerar un dedicado adecuado con características similares o superiores.
Ubicación: ¿en qué influye?
La ubicación de su VPS influye principalmente en la latencia de las consultas DNS. Cuanto más cerca esté el servidor geográficamente de usted, más rápido se resolverán los nombres de dominio. Para la mayoría de las tareas, una diferencia de 50-100 ms es imperceptible, pero para juegos en línea o trading de alta frecuencia, esto puede ser crítico.
- Centro de datos más cercano a usted: Ideal para uso personal, para minimizar las latencias.
- Ubicación central: Si atiende a usuarios de diferentes regiones, elija un centro de datos en un punto central para promediar la latencia para todos.
- Leyes y regulaciones: En algunos casos, la elección de la ubicación puede depender de la legislación del país, especialmente si le preocupa la privacidad de los datos.
Para la mayoría de los usuarios que despliegan Pi-hole y Unbound, es suficiente elegir un VPS en un país o región que esté relativamente cerca de su ubicación principal.
Preparación del servidor
Preparación del servidor
Se asume que ya ha obtenido acceso a su VPS por SSH con derechos de usuario root. Utilizaremos Ubuntu Server 24.04 LTS, como la versión actual y estable para 2026.
1. Actualización del sistema
En primer lugar, actualicemos la lista de paquetes y el sistema a su estado actual. Esto garantizará la disponibilidad de los últimos parches de seguridad y versiones estables de software.
sudo apt update && sudo apt upgrade -y # Actualizamos la lista de paquetes e instalamos las actualizaciones
sudo apt autoremove -y # Eliminamos paquetes innecesarios
sudo reboot # Reiniciamos el servidor si hubo una actualización del kernel o de componentes críticos
2. Creación de un nuevo usuario y configuración de sudo
Trabajar directamente con la cuenta root no se recomienda por razones de seguridad. Crearemos un nuevo usuario y le otorgaremos derechos sudo.
sudo adduser username # Creamos un nuevo usuario. Reemplace 'username' con el nombre deseado.
sudo usermod -aG sudo username # Agregamos el usuario al grupo sudo para que pueda ejecutar comandos con derechos de root
Ahora, salga de la sesión root e inicie sesión con el nuevo usuario:
exit # Salir de la sesión root
ssh username@your_vps_ip # Iniciar sesión con el nuevo usuario
3. Configuración de la autenticación por claves SSH (recomendado)
El uso de claves SSH en lugar de contraseñas aumenta significativamente la seguridad. Si aún no lo ha configurado, hágalo ahora. Genere una clave SSH en su máquina local (si no tiene una):
ssh-keygen -t ed25519 -C "[email protected]" # Crea una nueva clave SSH Ed25519
Luego, copie la clave pública a su VPS:
ssh-copy-id username@your_vps_ip # Copia su clave pública al servidor
Después de una configuración exitosa, desactive la autenticación por contraseña en el archivo /etc/ssh/sshd_config. Ábralo:
sudo nano /etc/ssh/sshd_config # Abrimos el archivo de configuración del servidor SSH
Encuentre y modifique las siguientes líneas (o agréguelas si no existen):
# Prohibimos el inicio de sesión como root por SSH
PermitRootLogin no
# Desactivamos la autenticación por contraseña
PasswordAuthentication no
# Activamos la autenticación por claves
PubkeyAuthentication yes
Guarde los cambios (Ctrl+O, Enter, Ctrl+X) y reinicie el servicio SSH:
sudo systemctl restart sshd # Reiniciamos el servidor SSH
Asegúrese de poder iniciar sesión por SSH con la clave antes de cerrar la sesión actual.
4. Configuración del firewall (UFW)
Para proteger el servidor del acceso no autorizado, configuraremos el firewall UFW (Uncomplicated Firewall).
sudo apt install ufw -y # Instalamos UFW
sudo ufw default deny incoming # Denegamos todas las conexiones entrantes por defecto
sudo ufw default allow outgoing # Permitimos todas las conexiones salientes
sudo ufw allow ssh # Permitimos SSH (puerto 22)
sudo ufw allow 53/tcp # Permitimos DNS (TCP) para Pi-hole
sudo ufw allow 53/udp # Permitimos DNS (UDP) para Pi-hole y Unbound
sudo ufw allow 80/tcp # Permitimos HTTP (TCP) para la interfaz web de Pi-hole
sudo ufw enable # Activamos el firewall
sudo ufw status # Verificamos el estado del firewall
Si planea usar HTTPS para la interfaz web de Pi-hole (a través de Caddy, como veremos más adelante), también necesitará permitir el puerto 443:
sudo ufw allow 443/tcp # Permitimos HTTPS (TCP)
sudo ufw reload # Recargamos las reglas de UFW
5. Instalación de Fail2Ban
Fail2Ban protege el servidor de ataques de fuerza bruta, bloqueando las direcciones IP desde las cuales se producen numerosos intentos fallidos de inicio de sesión.
sudo apt install fail2ban -y # Instalamos Fail2Ban
sudo systemctl enable fail2ban # Activamos el inicio automático de Fail2Ban al arrancar
sudo systemctl start fail2ban # Iniciamos el servicio Fail2Ban
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local # Copiamos la configuración para cambios locales
sudo nano /etc/fail2ban/jail.local # Abrimos el archivo para configurar
En el archivo jail.local, asegúrese de que la sección [sshd] esté activa (enabled = true) y, posiblemente, configure bantime (tiempo de bloqueo) y findtime (período para detectar intentos) a su discreción. Por defecto, la configuración es bastante buena. Por ejemplo, puede aumentar bantime para un bloqueo más prolongado:
[DEFAULT]
bantime = 1h # Tiempo de bloqueo de la dirección IP (por defecto 10m)
findtime = 10m # Período en el que se cuentan los intentos (por defecto 10m)
maxretry = 5 # Número de intentos antes del bloqueo (por defecto 5)
[sshd]
enabled = true
Guarde los cambios y reinicie Fail2Ban:
sudo systemctl restart fail2ban # Reiniciamos Fail2Ban para aplicar los cambios
sudo fail2ban-client status # Verificamos el estado de Fail2Ban
sudo fail2ban-client status sshd # Verificamos el estado de la protección SSH
Ahora su servidor está listo para la instalación de Pi-hole y Unbound.
Instalación de software — paso a paso
Instalaremos Unbound primero, y luego Pi-hole, configurando Pi-hole para usar Unbound como su único servidor DNS ascendente (upstream).
1. Instalación de Unbound
Unbound es un resolvedor DNS recursivo que interactuará directamente con los servidores DNS raíz, garantizando la máxima privacidad. Lo instalaremos desde los repositorios oficiales de Ubuntu 24.04 LTS.
sudo apt update # Actualizamos la lista de paquetes
sudo apt install unbound -y # Instalamos Unbound versión 1.19.0 (actual para Ubuntu 24.04 LTS)
Después de la instalación, es necesario configurar Unbound para que funcione con Pi-hole. Crearemos un archivo de configuración separado para no modificar el principal.
sudo nano /etc/unbound/unbound.conf.d/pi-hole.conf # Creamos un nuevo archivo de configuración para Unbound
Pegue el siguiente contenido en el archivo pi-hole.conf. Esta configuración establece que Unbound escuche solo en la interfaz local, realice consultas recursivas, habilite la validación DNSSEC y almacene en caché las respuestas.
server:
# Puerto en el que Unbound escuchará las consultas
port: 5335
# Escuchar solo en la interfaz local (para Pi-hole)
interface: 127.0.0.1
# Desactivar la escucha en todas las interfaces
do-not-query-address: 0.0.0.0/0
do-not-query-address: ::0/0
# Permitir consultas solo desde localhost (donde estará Pi-hole)
access-control: 127.0.0.1 allow
# Habilitar la validación DNSSEC
auto-trust-anchor-file: "/var/lib/unbound/root.key"
# Habilitar el registro de consultas
verbosity: 0 # 0 para registro mínimo, 1 para más detallado
# Optimización del rendimiento
num-threads: 1 # Número de hilos (normalmente 1 es suficiente para un VPS)
msg-cache-size: 128m # Tamaño de la caché de mensajes (recomendado 128MB para 2GB de RAM)
rrset-cache-size: 256m # Tamaño de la caché de registros de recursos
# Aumento de límites para prevenir errores bajo alta carga
outgoing-range: 8192
num-queries-per-thread: 4096
aggressive-nsec: yes # Acelera la resolución de dominios inexistentes
do-ip4: yes
do-ip6: no # Desactivamos IPv6 si no se usa o si el proveedor no lo soporta
prefer-ip6: no
harden-glue: yes # Fortalece la verificación de registros glue
harden-dnssec-stripped: yes # Prohíbe la devolución de respuestas DNSSEC inválidas
harden-referral-path: yes # Fortalece la verificación de la ruta de referidos
use-caps-for-id: yes # Mejora la protección contra ataques de caché
private-address: 192.168.0.0/16 # Especificamos rangos de IP privados para que Unbound no intente resolverlos
private-address: 10.0.0.0/8
private-address: 172.16.0.0/12
private-address: 169.254.0.0/16
private-address: fd00::/8
private-address: fe80::/10
hide-version: yes # Ocultamos la versión de Unbound
# Desactivamos DNS64 si no es necesario
do-daemonize: yes
root-hints: "/var/lib/unbound/root.hints" # Ruta al archivo con los servidores DNS raíz
Guarde el archivo (Ctrl+O, Enter, Ctrl+X). Ahora descargaremos los servidores DNS raíz y la clave DNSSEC actualizados.
sudo wget -O /var/lib/unbound/root.hints https://www.internic.net/domain/named.root # Descargamos los servidores DNS raíz actualizados
sudo unbound-anchor -a /var/lib/unbound/root.key # Generamos y actualizamos el trust anchor para DNSSEC
sudo systemctl enable unbound # Activamos el inicio automático de Unbound al arrancar
sudo systemctl restart unbound # Reiniciamos Unbound para aplicar la nueva configuración
sudo systemctl status unbound # Verificamos el estado de Unbound. Debe ser 'active (running)'
Verifiquemos que Unbound esté escuchando en el puerto 5335 y pueda resolver dominios:
dig @127.0.0.1 -p 5335 google.com # Verificamos la resolución de dominio a través de Unbound
Debería ver una respuesta con las direcciones IP de google.com. Si ve un error, verifique la configuración y los registros de Unbound (sudo journalctl -u unbound).
2. Instalación de Pi-hole
Pi-hole utilizará Unbound como su servidor DNS ascendente. La instalación de Pi-hole se realiza mediante un script conveniente.
sudo apt install curl -y # Instalamos curl, si aún no está
curl -sSL https://install.pi-hole.net | sudo bash # Ejecutamos el script de instalación de Pi-hole (versión 5.x, actual para 2026)
El instalador de Pi-hole lo guiará a través de varios pasos:
- Static IP Address: El instalador le sugerirá configurar una dirección IP estática para su servidor. Confirme el uso de la dirección IP actual, que es la IP externa de su VPS.
- Upstream DNS Provider: En este paso, es MUY IMPORTANTE seleccionar
Custom(Personalizado) e ingresar127.0.0.1#5335. Esto indica a Pi-hole que use su Unbound local ejecutándose en el puerto 5335. - Select Blocklists: Seleccione las listas de bloqueo predeterminadas. Siempre podrá agregar más tarde a través de la interfaz web.
- Install Web Admin Interface: Asegúrese de seleccionar "On" para instalar la interfaz web.
- Install Lighttpd Web Server: Confirme la instalación del servidor web Lighttpd.
- Log Queries: Seleccione el nivel de registro (por defecto "Log all queries" — recomendado).
Una vez completada la instalación, Pi-hole le mostrará una pantalla con la URL de la interfaz web y una contraseña de administrador temporal. ¡Asegúrese de guardar esta contraseña!
Ejemplo de salida después de la instalación:
...
[✓] Enabling Pi-hole automated updates
[✓] Enabling Pi-hole blocklist updates
[✓] Restarting lighttpd service
[✓] FTL is listening on port 53
[✓] Pi-hole blocking is enabled
The Pi-hole Web interface is now available!
http://your_vps_ip/admin
You are strongly advised to change the default password.
Default password: your_generated_password
Installation Complete!
Ahora Pi-hole está instalado y configurado para usar Unbound. Los servidores DNS en su VPS funcionarán en el puerto 53 (Pi-hole), y Pi-hole reenviará las consultas a Unbound en el puerto 5335.
Configuración
Después de instalar Pi-hole y Unbound, es necesario seguir varios pasos para su configuración óptima y verificación de funcionamiento.
1. Acceso a la interfaz web de Pi-hole
Abra un navegador web y vaya a la dirección http://your_vps_ip/admin (reemplace your_vps_ip con la dirección IP real de su VPS). Verá la página de inicio de sesión de Pi-hole.
# Если вы забыли пароль, можете его сбросить
pihole -a -p # Установит новый случайный пароль
pihole -a -p your_new_password # Установит заданный пароль
Inicie sesión usando la contraseña que se mostró después de la instalación. Después de iniciar sesión, verá el panel de control con estadísticas de consultas DNS, anuncios bloqueados y otra información útil.
2. Cambio de la contraseña de administrador de Pi-hole
Inmediatamente después del primer inicio de sesión, se recomienda cambiar la contraseña temporal por una más segura. Esto se puede hacer en la interfaz web: Settings > Web Interface > Password.
3. Adición y gestión de listas de bloqueo (Blocklists)
Pi-hole viene con varias listas de bloqueo predeterminadas. Puede añadir más para una filtración más agresiva. Vaya a Group Management > Adlists en la interfaz web.
Algunas listas populares:
- OISD Full:
https://abp.oisd.nl/ - StevenBlack's Unified Hosts File:
https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts - Lightswitch05's Blocklist:
https://raw.githubusercontent.com/Lightswitch05/Hosts/master/ads-and-tracking-extended.txt
Después de añadir nuevas listas, actualice la base de datos de gravedad de Pi-hole:
pihole -g # Обновит все списки блокировки
Esto también se puede hacer a través de la interfaz web: Tools > Update Gravity.
4. Configuración de Whitelist/Blacklist
Si algún sitio web no funciona correctamente debido al bloqueo de Pi-hole, puede añadir su dominio a la "lista blanca" (Whitelist). Si desea bloquear un dominio específico que no está en las listas, añádalo a la "lista negra" (Blacklist). Esto se hace a través de Domains en la interfaz web.
5. Opcional: Configuración de Conditional Forwarding
Si utiliza Pi-hole en su red doméstica y desea ver los nombres de los dispositivos en lugar de solo las direcciones IP en los registros de Pi-hole, puede configurar "Conditional Forwarding". Esto hará que Pi-hole reenvíe las solicitudes de su red local (por ejemplo, .local o .lan) a su router o servidor DNS local. Vaya a Settings > DNS > Advanced DNS settings y active Use Conditional Forwarding, especificando la dirección IP de su router y el dominio local.
6. Opcional: Configuración de HTTPS para la interfaz web de Pi-hole con Caddy
Por defecto, la interfaz web de Pi-hole está disponible a través de HTTP. Para mejorar la seguridad, se recomienda configurar HTTPS. Utilizaremos Caddy, un servidor web moderno que gestiona automáticamente los certificados Let's Encrypt.
Instalación de Caddy:
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https # Устанавливаем необходимые пакеты
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg # Добавляем GPG-ключ Caddy
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list # Добавляем репозиторий Caddy
sudo apt update # Обновляем список пакетов
sudo apt install caddy -y # Устанавливаем Caddy (актуальная версия 2.x на 2026)
Configuración de Caddyfile:
Cree un registro DNS (A/AAAA) para su dominio (por ejemplo, pihole.yourdomain.com) que apunte a la dirección IP de su VPS. Luego, configure Caddy para proxy las solicitudes a Pi-hole.
sudo nano /etc/caddy/Caddyfile # Открываем конфигурационный файл Caddy
Reemplace su contenido con lo siguiente, cambiando pihole.yourdomain.com por su dominio:
pihole.yourdomain.com {
# Автоматическое получение SSL-сертификата от Let's Encrypt
tls {
dns cloudflare {env.CLOUDFLARE_API_TOKEN} # Пример для Cloudflare. Укажите свой DNS-провайдер и API-токен.
}
# Проксируем запросы к веб-интерфейсу Pi-hole
reverse_proxy 127.0.0.1:80
# Настройки для скрытия реального IP-адреса клиента от Pi-hole (опционально)
header_up X-Forwarded-For {remote_host}
header_up Host {host}
header_up X-Real-IP {remote_host}
}
Nota: Para la obtención automática de certificados Let's Encrypt a través de DNS (para que Caddy pueda funcionar en el puerto 80/443, incluso si están ocupados por Pi-hole), necesitará un proveedor de DNS con acceso API (por ejemplo, Cloudflare, Namecheap, DigitalOcean). Deberá instalar el plugin de Caddy correspondiente y especificar el token API. Si no desea utilizar el desafío DNS, asegúrese de que los puertos 80 y 443 estén libres, o utilice otro puerto para Caddy.
En caso de utilizar el desafío DNS, guarde su token API en una variable de entorno por seguridad.
# Пример для Cloudflare
echo 'CLOUDFLARE_API_TOKEN="your_cloudflare_api_token"' | sudo tee -a /etc/environment
source /etc/environment # Загружаем переменную окружения
Reinicie Caddy para aplicar los cambios:
sudo systemctl reload caddy # Перезагружаем Caddy
sudo systemctl enable caddy # Включаем автозапуск Caddy
sudo ufw allow 80,443/tcp # Убедитесь, что порты 80 и 443 разрешены в файрволе
Ahora su interfaz web de Pi-hole estará disponible a través de HTTPS en la dirección https://pihole.yourdomain.com/admin.
7. Verificación de funcionamiento
Después de todas las configuraciones, es necesario asegurarse de que todo funciona correctamente.
- Verificación de resolución DNS a través de Pi-hole:
dig @your_vps_ip example.com # Проверяем обычный домен dig @your_vps_ip doubleclick.net # Проверяем рекламный домен - должен быть заблокирован (0.0.0.0 или ::)Debería ver que
example.comse resuelve en su IP real, ydoubleclick.neten0.0.0.0o::. - Verificación de los registros de Pi-hole:
pihole -t # Просмотр логов Pi-hole в реальном времениVerá todas las consultas DNS que pasan por Pi-hole y su estado (
OK,Blocked,Cached). - Configuración del dispositivo cliente:
Para empezar a usar su servidor Pi-hole/Unbound, es necesario configurar el servidor DNS en los dispositivos cliente (ordenador, smartphone) o en el router de su red doméstica. Especifique la dirección IP de su VPS como servidor DNS principal.
- Windows: Configuración de red e Internet -> Cambiar opciones del adaptador -> Propiedades de su conexión -> Protocolo de Internet versión 4 (TCP/IPv4) -> Propiedades -> Usar las siguientes direcciones de servidor DNS.
- macOS: Preferencias del Sistema -> Red -> Seleccionar conexión -> Avanzado -> DNS.
- Linux: Normalmente en
/etc/resolv.confo a través de NetworkManager. - Router: Inicie sesión en la interfaz web de su router y busque la configuración de WAN/LAN DNS. Se recomienda establecer la dirección IP de su VPS como servidor DNS principal para toda la red local.
- Prueba en el cliente:
Después de configurar el DNS en el cliente, abra un navegador web y visite varios sitios con publicidad (por ejemplo, portales de noticias). Debería notar una reducción significativa o la ausencia total de publicidad. Verifique también la interfaz web de Pi-hole para asegurarse de que las consultas de su cliente se muestran y se bloquean.
¡Ahora su servidor DNS privado con bloqueo de anuncios está completamente funcional!
Copias de seguridad y mantenimiento
Las copias de seguridad regulares y el mantenimiento oportuno son cruciales para el funcionamiento estable y seguro de su servidor Pi-hole y Unbound.
1. Qué respaldar
Para Pi-hole y Unbound, es necesario guardar regularmente los siguientes datos:
- Configuración de Pi-hole: Archivos en el directorio
/etc/pihole/, que contienen la configuración, listas de bloqueo, listas blancas y negras. - Base de datos FTL: La base de datos principal de Pi-hole (
/etc/pihole/pihole-FTL.db), que contiene registros de consultas, estadísticas e información del cliente. - Configuración de Unbound: Archivos en el directorio
/etc/unbound/, especialmente/etc/unbound/unbound.conf.d/pi-hole.conf. - Clave Unbound DNSSEC: Archivo
/var/lib/unbound/root.key. - Sugerencias raíz de Unbound: Archivo
/var/lib/unbound/root.hints.
2. Script simple de copia de seguridad automática
Puede crear un script simple para la copia de seguridad automática. Este script archivará archivos importantes y los guardará en un directorio separado.
sudo mkdir -p /opt/backups/pihole_unbound # Creamos la carpeta para las copias de seguridad
sudo chown username:username /opt/backups/pihole_unbound # Damos permisos a su usuario
nano /home/username/backup_pihole_unbound.sh # Creamos el script de copia de seguridad
Agregue el siguiente contenido al archivo backup_pihole_unbound.sh:
#!/bin/bash
# Directorio para guardar las copias de seguridad
BACKUP_DIR="/opt/backups/pihole_unbound"
# Nombre del archivo de copia de seguridad con fecha
DATE=$(date +%Y%m%d%H%M%S)
BACKUP_FILE="$BACKUP_DIR/pihole_unbound_config_$DATE.tar.gz"
# Detenemos Pi-hole FTL y Unbound para una copia de seguridad consistente de la BD
sudo systemctl stop pihole-FTL.service
sudo systemctl stop unbound.service
# Creamos un archivo de configuración y base de datos
sudo tar -czvf "$BACKUP_FILE" \
/etc/pihole \
/etc/unbound/unbound.conf.d/pi-hole.conf \
/var/lib/unbound/root.key \
/var/lib/unbound/root.hints \
--exclude='/etc/pihole/pihole-FTL.db' # Excluimos la BD del archivo principal, la copiaremos por separado
# Copiamos la base de datos Pi-hole FTL
sudo cp /etc/pihole/pihole-FTL.db "$BACKUP_DIR/pihole-FTL.db.$DATE"
# Iniciamos los servicios de nuevo
sudo systemctl start pihole-FTL.service
sudo systemctl start unbound.service
# Eliminamos copias de seguridad antiguas (más de 7 días), dejando las 7 últimas
find "$BACKUP_DIR" -type f -name "pihole_unbound_config_*.tar.gz" -mtime +7 -delete
find "$BACKUP_DIR" -type f -name "pihole-FTL.db.*" -mtime +7 -delete
echo "Backup created: $BACKUP_FILE and pihole-FTL.db.$DATE"
Haga el script ejecutable:
chmod +x /home/username/backup_pihole_unbound.sh # Hacemos el script ejecutable
Ahora agregue este script a la programación de Cron para su ejecución diaria:
crontab -e # Abrimos crontab para el usuario actual
Agregue la siguiente línea al final del archivo para que el script se ejecute todos los días a las 03:00 de la mañana:
0 3 * * * /home/username/backup_pihole_unbound.sh >> /var/log/pihole_unbound_backup.log 2>&1
Guarde y cierre el archivo. Ahora sus copias de seguridad se crearán automáticamente.
3. Dónde almacenar las copias de seguridad
Almacenar las copias de seguridad en el mismo VPS donde se ejecutan los servicios no es seguro. En caso de fallo del disco del VPS, perderá tanto los datos como las copias de seguridad. Se recomienda utilizar almacenamiento externo:
- Almacenamiento de objetos externo compatible con S3: (por ejemplo, Amazon S3, DigitalOcean Spaces, Backblaze B2, MinIO). Esta es una solución fiable y escalable. Puede usar utilidades como
rcloneos3cmdpara la sincronización automática de copias de seguridad. - Otro VPS: Si tiene un segundo VPS, puede usar
rsyncoscppara copiar las copias de seguridad a él. - Ordenador local: Para instalaciones muy pequeñas, puede descargar manualmente las copias de seguridad por SSH/SFTP.
Ejemplo de uso de rclone para S3:
sudo apt install rclone -y # Instalamos rclone
rclone config # Configuramos rclone para su proveedor S3 (siga las instrucciones)
Luego, agregue la siguiente línea a su script de copia de seguridad después de crear el archivo para copiarlo a S3:
rclone copy "$BACKUP_DIR" "your_s3_remote:your_bucket_name" # Copiamos el directorio de copias de seguridad a S3
4. Actualizaciones: modo continuo vs. ventana de mantenimiento
Las actualizaciones regulares del software son importantes para la seguridad y para obtener nuevas funciones.
- Actualizaciones del sistema operativo:
Se recomienda realizarlas mensualmente. Para Ubuntu 24.04 LTS, esto es:
sudo apt update && sudo apt upgrade -y # Actualización de paquetes sudo apt autoremove -y # Eliminación de paquetes innecesariosSi hubo una actualización del kernel, será necesario reiniciar:
sudo reboot. Planifique esto para el momento de menor actividad. - Actualizaciones de Pi-hole:
Pi-hole tiene su propio mecanismo de actualización:
pihole -up # Actualizará Pi-hole a la última versión (válida para 2026)Es seguro realizar esto en modo "continuo", es decir, sin una planificación previa de la detención del servicio. Pi-hole reiniciará automáticamente sus componentes.
- Actualizaciones de Unbound:
Unbound se actualiza junto con los paquetes del sistema a través de
apt upgrade. Normalmente, esto no requiere intervención manual, pero después de la actualización es aconsejable verificar el estado consudo systemctl status unbound. - Actualizaciones de las listas de bloqueo de Pi-hole:
Pi-hole actualiza automáticamente las listas de bloqueo según un horario (por defecto, una vez a la semana). Puede ejecutar esto manualmente:
pihole -g # Actualizará la base de datos de gravedad
Para sistemas críticamente importantes, se recomienda realizar las actualizaciones dentro de una "ventana de mantenimiento" para minimizar los riesgos y tener tiempo para revertir en caso de problemas. Para un servidor Pi-hole/Unbound doméstico, se puede ser menos estricto, pero siempre haga una copia de seguridad antes de actualizaciones importantes.
Solución de problemas + Preguntas frecuentes
Interfaz web de Pi-hole no accesible.
Si no puede acceder a la interfaz web de Pi-hole en http://your_vps_ip/admin o https://pihole.yourdomain.com/admin, verifique lo siguiente:
- Verifique el estado del servidor web Lighttpd:
sudo systemctl status lighttpd. Debería estaractive (running). Si no, intentesudo systemctl restart lighttpd. - Verifique el firewall UFW: Asegúrese de que los puertos 80 (HTTP) y/o 443 (HTTPS) estén permitidos:
sudo ufw status. Si no, agregue las reglas:sudo ufw allow 80/tcpysudo ufw allow 443/tcp, luegosudo ufw reload. - Verifique los registros de Pi-hole:
cat /var/log/pihole/pihole.logycat /var/log/lighttpd/error.logen busca de errores. - Si usa Caddy: Asegúrese de que Caddy esté en ejecución (
sudo systemctl status caddy) y que su configuración (/etc/caddy/Caddyfile) sea correcta. Verifique los registros de Caddy:sudo journalctl -u caddy.
Los anuncios siguen apareciendo en los dispositivos cliente.
Si la publicidad sigue apareciendo a pesar de la configuración de Pi-hole:
- Verifique la configuración de DNS del cliente: Asegúrese de que su dispositivo cliente (ordenador, teléfono, router) esté configurado para usar la dirección IP de su VPS como servidor DNS principal.
- Borre la caché de DNS en el cliente: En Windows:
ipconfig /flushdns. En macOS:sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder. En Linux:sudo systemctl restart systemd-resolvedosudo /etc/init.d/nscd restart. - Verifique los registros de Pi-hole: En la interfaz web de Pi-hole (
Query Log), vea si las consultas de su cliente están llegando y si los dominios publicitarios están siendo bloqueados. Si las consultas no llegan, el problema está en la configuración de DNS del cliente. Si llegan pero no se bloquean, es posible que el dominio publicitario no esté en sus listas de bloqueo. - Actualice la base de datos de gravedad:
pihole -go a través de la interfaz webTools > Update Gravity. - Agregue el dominio a la Blacklist: Si ve un dominio publicitario específico que no se bloquea, agréguelo manualmente a la Blacklist a través de la interfaz web.
Resolución de DNS lenta o fallida.
La resolución de nombres de dominio lenta o fallida puede indicar problemas con Unbound o con la combinación Pi-hole/Unbound.
- Verifique el estado de Unbound:
sudo systemctl status unbound. Debería estaractive (running). Si no, intentesudo systemctl restart unbound. - Verifique la configuración de Unbound:
sudo unbound-checkconf. Asegúrese de que no haya errores. - Verifique que Pi-hole use Unbound: En la interfaz web de Pi-hole, en
Settings > DNS, asegúrese de que127.0.0.1#5335esté especificado como servidor DNS Upstream. - Verifique que Unbound esté escuchando en el puerto 5335:
sudo netstat -tulnp | grep 5335. Debería ver el proceso de Unbound. - Verifique la conectividad externa del VPS: Asegúrese de que su VPS pueda acceder a Internet:
ping 8.8.8.8. - Verifique los registros de Unbound:
sudo journalctl -u unbounden busca de errores o advertencias.
¿Qué configuración mínima de VPS es adecuada?
Para Pi-hole y Unbound en Ubuntu Server 24.04 LTS, un VPS con 1 vCPU, 512 MB de RAM, 10-15 GB de disco SSD y un canal de red de 100 Mbps o más será suficiente. Esta configuración será adecuada para una pequeña red doméstica o varios usuarios. Sin embargo, para un funcionamiento más estable y la posibilidad de escalar o agregar otros servicios ligeros, se recomiendan 2 vCPU, 2 GB de RAM y 40 GB de SSD.
¿Qué elegir: VPS o dedicado para esta tarea?
Para la implementación de Pi-hole y Unbound, en la mayoría de los casos, un VPS es suficiente. Estos servicios no consumen muchos recursos y funcionan perfectamente en recursos virtualizados. Un servidor dedicado suele ser excesivo para esta tarea específica. Un servidor dedicado debe considerarse si planea atender a un gran número de clientes (cientos o miles), ejecutar muchas otras aplicaciones que consumen muchos recursos en el mismo servidor, o si tiene requisitos específicos de hardware y control total sobre él. Para la mayoría de las necesidades personales o de equipos pequeños, un VPS será una opción más económica y adecuada.
¿Cómo actualizar Pi-hole y Unbound?
La actualización de los componentes se realiza de la siguiente manera:
- Actualización del sistema operativo y Unbound:
sudo apt update && sudo apt upgrade -y. Unbound se actualiza como parte de los paquetes del sistema. - Actualización de Pi-hole:
pihole -up. Este comando actualizará Pi-hole y sus componentes (FTL, Web Interface) a las últimas versiones estables. - Actualización de las listas de bloqueo de Pi-hole:
pihole -g. Esto actualizará todas sus adlists. Pi-hole lo hace automáticamente una vez a la semana, pero puede ejecutarlo manualmente.
¿Puedo usar Pi-hole como servidor DHCP?
Sí, Pi-hole puede actuar como servidor DHCP para su red local. Esto es muy conveniente, ya que todos los dispositivos que obtienen una dirección IP de Pi-hole la usarán automáticamente como servidor DNS. Para habilitar el servidor DHCP de Pi-hole, vaya a la interfaz web en Settings > DHCP, active la opción "DHCP server enabled" y configure el rango de direcciones IP. IMPORTANTE: Antes de habilitar DHCP en Pi-hole, desactive el servidor DHCP en su router para evitar conflictos en la red.
¿Cómo configurar DNS over HTTPS/TLS para clientes?
Pi-hole y Unbound proporcionan privacidad y bloqueo de anuncios, pero el tráfico entre su cliente y el VPS generalmente viaja a través de DNS normal (UDP/TCP 53). Si desea cifrar este tráfico, hay varias opciones:
- En el lado del cliente: Usar aplicaciones como Stubby (para DNS over TLS) o Cloudflared (para DNS over HTTPS) en cada dispositivo cliente, configurándolas para usar su VPS como servidor DoT/DoH.
- VPN en el VPS: Implementar WireGuard u OpenVPN en el mismo VPS, y todos los clientes conectados a la VPN usarán automáticamente su servidor DNS privado a través de un túnel cifrado. Esta es la solución más completa y segura para el acceso remoto.
- Caddy con DoH/DoT: Caddy se puede configurar para proporcionar un proxy DoH/DoT, redirigiendo las consultas a su Pi-hole. Esto es más complejo, pero posible.
En el marco de esta guía, nos hemos centrado en la configuración básica, pero la expansión a DoH/DoT o VPN es un paso lógico siguiente para la máxima seguridad y privacidad.
Conclusión
Conclusiones y próximos pasos
¡Felicidades! Ha desplegado y configurado con éxito Pi-hole y Unbound en su VPS, creando un servidor DNS potente, privado y eficiente que bloquea anuncios y rastreadores a nivel de red. Esto mejora significativamente su privacidad, acelera la navegación web y le otorga control total sobre las consultas DNS, sin depender de proveedores externos.
Los siguientes pasos para mejorar y expandir aún más su solución:
- Integración con la red doméstica: Configure su router doméstico para usar Pi-hole como servidor DNS principal, de modo que todos los dispositivos en su red local se beneficien automáticamente del bloqueo de anuncios y la privacidad.
- Despliegue de VPN en el mismo VPS: Para acceder a su servidor DNS privado desde fuera de la red doméstica (por ejemplo, en viajes o al usar internet móvil), considere instalar WireGuard u OpenVPN en el mismo VPS. Esto le permitirá tunelizar de forma segura todo el tráfico a través de su servidor, protegiéndolo del rastreo y la censura.
- Monitoreo y optimización: Revise regularmente los registros de Pi-hole, experimente con diferentes listas de bloqueo, y añada dominios a la lista blanca/negra. Monitoree el consumo de recursos del VPS para asegurarse de que el sistema funcione de manera óptima.
- Funciones avanzadas de Pi-hole: Explore las capacidades de Pi-hole para crear grupos de clientes, asignar diferentes listas de bloqueo a distintos dispositivos o usuarios, y configurar registros DNS locales para sus servicios internos.