Automatiza tu red doméstica: despliegue de Pi-hole más Unbound con Ansible
Nivel: Intermedio
¡Hola Ansible lovers! Hoy os traigo un playbook especialmente útil para quienes quieren dar un salto de calidad en la privacidad y rendimiento de su red doméstica. Vamos a automatizar el despliegue de Pi-hole como bloqueador de publicidad y Unbound como DNS recursivo, todo en una sola jugada con Ansible. ¿Preparados?
¿Por qué este playbook?
- Pi-hole filtra anuncios y rastreadores a nivel de red, aumentando la velocidad de navegación y privacidad.
- Unbound te permite tener resolución DNS independiente, evitando entidades externas y acelerando las consultas.
- Ansible lo automatiza, permitiendo repetir la instalación o restaurarla tras un desastre en minutos.
Es una solución ideal si tienes un Raspberry Pi, un servidor casero, o quieres mejorar la gestión de red en oficinas pequeñas. Además, mantendremos todo modular y listo para crecer.
Playbook completo: despliega Pi-hole y Unbound
Copia este fichero site.yml en tu proyecto Ansible. Este playbook:
- Instala Docker y Docker Compose.
- Despliega Pi-hole como contenedor Docker.
- Despliega Unbound como contenedor Docker y lo enlaza a Pi-hole.
- Asegura persistencia de datos y expone la interfaz web de Pi-hole.
---
- name: Instala Pi-hole con Unbound usando Docker
hosts: red_domestica
become: true
vars:
pihole_web_port: 8080
pihole_dns_port: 53
unbound_dns_port: 5335
pihole_timezone: Europe/Madrid
pihole_web_password: "CAMBIAESTO"
compose_dir: /opt/pihole_unbound
tasks:
- name: Instala docker y docker-compose
apt:
name:
- docker.io
- docker-compose
state: present
update_cache: true
- name: Crea directorio para docker-compose
file:
path: "{{ compose_dir }}"
state: directory
owner: root
group: root
mode: 0755
- name: Copia docker-compose.yml
copy:
dest: "{{ compose_dir }}/docker-compose.yml"
content: |
version: "3"
services:
pihole:
image: pihole/pihole:latest
container_name: pihole
restart: unless-stopped
environment:
TZ: "{{ pihole_timezone }}"
WEBPASSWORD: "{{ pihole_web_password }}"
PIHOLE_DNS_: "{{ unbound_dns_port }}"
ports:
- "{{ pihole_web_port }}:80"
- "{{ pihole_dns_port }}:53/tcp"
- "{{ pihole_dns_port }}:53/udp"
volumes:
- ./etc-pihole/:/etc/pihole/
- ./etc-dnsmasq.d/:/etc/dnsmasq.d/
depends_on:
- unbound
unbound:
image: mvance/unbound:latest
container_name: unbound
restart: unless-stopped
ports:
- "{{ unbound_dns_port }}:53/tcp"
- "{{ unbound_dns_port }}:53/udp"
volumes:
- ./unbound:/opt/unbound/etc/unbound
networks:
default:
name: pihole_unbound_net
driver: bridge
- name: Copia configuración mínima de Unbound
copy:
dest: "{{ compose_dir }}/unbound/unbound.conf"
content: |
server:
verbosity: 1
interface: 0.0.0.0
port: 53
do-ip4: yes
do-udp: yes
do-tcp: yes
root-hints: "/opt/unbound/etc/unbound/root.hints"
harden-glue: yes
harden-dnssec-stripped: yes
use-caps-for-id: yes
edns-buffer-size: 1232
prefetch: yes
qname-minimisation: yes
cache-min-ttl: 3600
cache-max-ttl: 86400
unwanted-reply-threshold: 10000
num-threads: 2
- name: Arranca los servicios con docker-compose
shell:
cmd: docker-compose up -d
chdir: "{{ compose_dir }}"
- name: Espera a que Pi-hole esté activo
uri:
url: "http://localhost:{{ pihole_web_port }}"
status_code: 200
timeout: 30
register: result
until: result.status == 200
retries: 10
delay: 5
Notas:
– Recuerda definir tus hosts en inventory bajo el grupo red_domestica.
– Cambia pihole_web_password por una contraseña segura.
– El puerto web se puede modificar libremente.
Primeros pasos tras la ejecución
- Accede a http://tu-servidor:8080 y loguéate con tu contraseña.
- En la configuración DNS de Pi-hole, pon
127.0.0.1#5335para usar Unbound localmente. - ¡Redisfruta de una navegación más rápida y privada para todos tus dispositivos!
Consejos extra y troubleshooting
- ¡Cuidado con el firewall! Asegúrate de abrir los puertos 53/udp, 53/tcp y el web port si accedes desde fuera.
- Si tienes problemas de DNS, revisa que Unbound esté resolviendo correctamente:
docker exec -it unbound dig google.es @127.0.0.1 -p 53 - Para actualizar Pi-hole o Unbound, basta con relanzar
docker-compose pullseguido dedocker-compose up -den el directorio correspondiente. - ¿Quieres añadir listas de bloqueo personalizadas? Usa la interfaz web de Pi-hole y ensaya.
¿Te gustaría extender el playbook con monitorización, tunneling o integración con Home Assistant? Dímelo en los comentarios, ¡me encantan los retos Ansible!
