Pi-hole è un software open-source che funziona come DNS sinkhole, bloccando pubblicità e tracker a livello di rete. A differenza delle estensioni browser, Pi-hole protegge tutti i dispositivi connessi alla rete domestica senza richiedere installazioni su ogni singolo device: smartphone, smart TV, console e dispositivi IoT sono automaticamente protetti.
Particolarmente utile per famiglie e piccole reti, Pi-hole offre un’interfaccia web intuitiva per monitorare le query DNS, visualizzare statistiche dettagliate e gestire whitelist e blacklist personalizzate. È la soluzione ideale per migliorare la privacy e velocizzare la navigazione eliminando il traffico pubblicitario indesiderato.
Cos’è un DNS Sinkhole?
Un DNS sinkhole è un server DNS che restituisce risposte false per determinati domini. Quando un dispositivo tenta di connettersi a un server pubblicitario o di tracking, il sinkhole intercetta la richiesta e risponde con un indirizzo nullo (0.0.0.0), impedendo la connessione.
Il funzionamento è semplice:
- Il dispositivo richiede l’indirizzo IP di
ads.example.com - Pi-hole consulta la sua blacklist e trova una corrispondenza
- Invece di inoltrare la richiesta, risponde con
0.0.0.0 - Il dispositivo non riesce a connettersi e la pubblicità non viene caricata
Questo approccio ha diversi vantaggi rispetto ai tradizionali ad-blocker:
- Efficienza: blocca le richieste prima che consumino banda
- Universalità: funziona su tutti i dispositivi senza installare software
- Invisibilità: le app non rilevano il blocco come farebbero con un ad-blocker
- Risparmio risorse: nessun impatto sulle prestazioni dei singoli dispositivi
Vantaggi di Pi-hole
Sicurezza
Pi-hole blocca l’accesso a domini malevoli noti, proteggendo la rete da malware, phishing e siti fraudolenti. Molte minacce informatiche si basano su domini che Pi-hole può intercettare prima che raggiungano i dispositivi.
Privacy
Impedisce ai tracker di terze parti di raccogliere dati sulla navigazione. Servizi come Google Analytics, Facebook Pixel e altri sistemi di tracciamento vengono bloccati a livello DNS, riducendo significativamente la profilazione degli utenti.
Prestazioni
Eliminando pubblicità e tracker, le pagine web si caricano più velocemente. Meno richieste DNS significano meno dati scaricati e tempi di risposta ridotti, particolarmente evidenti su connessioni lente o dispositivi meno potenti.
Controllo parentale
Pi-hole permette di bloccare categorie di siti indesiderati per tutta la famiglia. È possibile creare blacklist personalizzate per impedire l’accesso a contenuti inappropriati su tutti i dispositivi, inclusi quelli dove non è possibile installare software di controllo.
Visibilità sulla rete
La dashboard mostra in tempo reale tutte le query DNS della rete, permettendo di identificare dispositivi che comunicano con server sospetti o che generano traffico anomalo. Utile per diagnosticare problemi e scoprire comportamenti inattesi dei dispositivi IoT.
services:
pihole:
container_name: pihole
image: pihole/pihole:latest
ports:
- "53:53/tcp"
- "53:53/udp"
- "80:80/tcp"
environment:
TZ: 'Europe/Rome'
FTLCONF_webserver_api_password: ${PIHOLE_PASSWORD}
FTLCONF_dns_listeningMode: 'all'
FTLCONF_dns_upstreams: '1.1.1.1;8.8.8.8'
volumes:
- pihole_data:/etc/pihole
restart: unless-stopped
volumes:
pihole_data:| Variabile | Descrizione |
|---|---|
TZ |
Fuso orario per log e statistiche |
FTLCONF_webserver_api_password |
Password per l’interfaccia web di amministrazione |
FTLCONF_dns_listeningMode |
Modalità di ascolto DNS. all accetta query da qualsiasi sorgente (necessario con Docker bridge) |
PIHOLE_PASSWORD=la_tua_password_sicuraLiberare la porta 53 (Fedora/Ubuntu)
Su molte distribuzioni Linux moderne, la porta 53 è già occupata da systemd-resolved o NetworkManager. Se proviamo ad avviare il container otterremo questo errore:
Error response from daemon: failed to bind host port 0.0.0.0:53/tcp: address already in use1. Verifica quali servizi occupano la porta
sudo ss -tuln | grep ':53'Se vedi 127.0.0.53 (systemd-resolved) o 127.0.0.54 (NetworkManager), la porta è occupata.
2. Disabilita systemd-resolved
systemd-resolved è il resolver DNS predefinito su Ubuntu e Fedora:
sudo systemctl stop systemd-resolved
sudo systemctl disable systemd-resolved3. Configura NetworkManager
NetworkManager potrebbe avere un proprio resolver DNS. Modifica /etc/NetworkManager/NetworkManager.conf:
[main]
dns=noneRiavvia il servizio:
sudo systemctl restart NetworkManager4. Configura DNS temporanei
Dopo aver disabilitato systemd-resolved, il sistema non può più risolvere nomi DNS. Configura dei DNS temporanei per permettere al sistema di funzionare durante l’installazione:
sudo rm /etc/resolv.conf
echo -e "nameserver 1.1.1.1\nnameserver 8.8.8.8" | sudo tee /etc/resolv.confPuoi usare qualsiasi DNS pubblico (Cloudflare, Google, OpenDNS, o quelli del tuo ISP). Questi servono solo temporaneamente per avviare Pi-hole.
5. Avvia Pi-hole
Controlla che la porta sia libera:
sudo ss -tuln | grep ':53'Se non ci sono risultati, avvia Pi-hole:
docker compose up -d6. Configura il DNS del server
Una volta che Pi-hole è attivo, puoi decidere come gestire il DNS del server stesso:
Opzione A - Il server usa Pi-hole (consigliata):
echo "nameserver 127.0.0.1" | sudo tee /etc/resolv.confIl server utilizzerà Pi-hole per le proprie richieste DNS, beneficiando del blocco pubblicità.
Opzione B - Il server usa DNS esterni:
Lascia i DNS esterni configurati al passo 4. Il server bypasserà Pi-hole, ma tutti gli altri dispositivi della rete saranno protetti.
L’interfaccia web sarà disponibile su http://<IP_SERVER>/admin.
Troubleshooting
DNS resolution is currently unavailable
Se dopo un riavvio Pi-hole mostra questo errore:
[✗] DNS resolution is currently unavailableIl problema è che /etc/resolv.conf è un symlink rotto (appare in rosso con ls). Dopo aver disabilitato systemd-resolved, il symlink punta a un file che non esiste più.
Soluzione:
sudo rm /etc/resolv.conf
sudo nano /etc/resolv.confInserisci:
nameserver 1.1.1.1
nameserver 8.8.8.8Riavvia Pi-hole:
docker compose down && docker compose up -dresolv.conf viene sovrascritto al riavvio
Per rendere il file immutabile e impedire che venga sovrascritto:
sudo chattr +i /etc/resolv.confPer rimuovere la protezione (se devi modificarlo):
sudo chattr -i /etc/resolv.conf