Pi-hole: bloccare la pubblicità a livello di rete
La pubblicità online è diventata un problema sistemico: non si tratta più di banner fastidiosi, ma di script di tracciamento, miner di criptovalute nascosti, beacon di analytics che seguono ogni clic, e reti pubblicitarie che raccolgono dati personali in modo opaco. Gli ad-blocker tradizionali installati nel browser risolvono il problema solo parzialmente: funzionano su un singolo dispositivo, non proteggono le app native degli smartphone, non coprono le smart TV, le console di gioco o i dispositivi IoT. Pi-hole offre una soluzione diversa e più radicale: bloccare le pubblicità e i tracker a livello di rete DNS, prima ancora che le richieste raggiungano il dispositivo.
Come funziona il DNS sinkhole
Per capire Pi-hole bisogna capire il DNS (Domain Name System). Ogni volta che un dispositivo vuole connettersi a un dominio — sia per caricare un sito web, sia per contattare un server di analytics, sia per scaricare una pubblicità — deve prima risolvere quel nome di dominio in un indirizzo IP. Questa risoluzione avviene attraverso il server DNS configurato nella rete, tipicamente quello del proprio provider Internet o quello del router.
Pi-hole si inserisce in questo processo posizionandosi come server DNS della rete locale. Tutti i dispositivi della rete vengono configurati (manualmente o tramite DHCP) per usare Pi-hole come loro resolver DNS. Quando un dispositivo tenta di risolvere un dominio, Pi-hole controlla quel dominio contro le proprie blocklist: liste di domini noti per servire pubblicità, tracciatori, malware o contenuti indesiderati.
Se il dominio è in blocklist, Pi-hole risponde con l'indirizzo IP 0.0.0.0 (o a volte con il proprio indirizzo locale). In questo modo il dispositivo riceve una risposta DNS che punta al nulla: la connessione al server pubblicitario non viene mai stabilita. Il browser o l'app riceve un errore di connessione silenzioso per quella specifica risorsa, ma il contenuto principale della pagina (che viene da domini diversi) viene caricato normalmente.
Questo approccio è chiamato DNS sinkhole o DNS blackhole: le richieste verso domini malevoli o indesiderati vengono "drenate" in un buco senza risposta prima di poter raggiungere la rete esterna.
Requisiti hardware: non serve molto
Il nome "Pi-hole" deriva dal suo progetto originale: un'applicazione pensata per girare su un Raspberry Pi, il microcomputer da 35 dollari nato per l'educazione informatica ma diventato uno strumento fondamentale per i maker e i sysadmin hobbisti. La scelta è appropriata perché Pi-hole è estremamente leggero come carico computazionale: rispondere a query DNS richiede pochissima CPU e memoria.
I requisiti minimi ufficiali sono:
- 512MB di RAM (in pratica funziona bene anche con 256MB)
- Qualsiasi processore ARM o x86 moderno
- 2GB di spazio su disco (4GB+ raccomandati per i log)
- Una connessione di rete stabile (cablata preferibilmente)
Nella pratica, Pi-hole gira egregiamente su:
- Raspberry Pi Zero 2W (~15 euro): sufficiente per una rete domestica, consumo sotto 1W.
- Raspberry Pi 4 Model B (da 35 euro per il modello da 1GB): overkill per il solo Pi-hole, ma utile se si vuole aggiungere WireGuard, Unbound o altri servizi.
- Mini PC con Intel N100 (da ~80 euro): soluzione più robusta per un homelab completo.
- Virtual Machine o container Docker: molti utenti fanno girare Pi-hole come container su un server già esistente.
- VPS cloud: alcuni utenti lo installano su un server virtuale economico per usarlo come DNS remoto.
Il requisito più importante non è la potenza computazionale ma la disponibilità continua: Pi-hole deve essere sempre online, altrimenti tutti i dispositivi della rete perdono la risoluzione DNS e smettono di funzionare. Per questo si raccomanda un secondo Pi-hole come backup (configurato come DNS secondario) o almeno un UPS per proteggere il Raspberry Pi dai blackout.
Installazione: il metodo ufficiale
L'installazione di Pi-hole su un sistema Debian/Ubuntu/Raspberry Pi OS è notoriamente semplice. Il metodo ufficiale consiste nell'eseguire uno script di installazione:
curl -sSL https://install.pi-hole.net | bash
Questo comando scarica ed esegue lo script interattivo di Pi-hole che guida l'utente attraverso le scelte di configurazione: quale interfaccia di rete usare, quale upstream DNS server usare per risolvere i domini non bloccati, e se installare il server web per la dashboard.
Per chi preferisce un approccio più controllato (senza eseguire script arbitrari con privilegi di root), è possibile scaricare prima lo script, ispezionarlo e poi eseguirlo:
curl -sSL https://install.pi-hole.net -o install-pihole.shless install-pihole.shbash install-pihole.sh
Alternativamnte, Pi-hole è disponibile come immagine Docker ufficiale, preferita da molti per la facilità di aggiornamento e isolamento:
docker run -d --name pihole -p 53:53/tcp -p 53:53/udp -p 80:80 -e TZ="Europe/Rome" -v pihole-data:/etc/pihole pihole/pihole:latest
Dopo l'installazione, la dashboard web è accessibile all'indirizzo http://[IP-del-pi-hole]/admin con una password generata durante l'installazione (o configurabile manualmente).
La dashboard: statistiche e gestione
La dashboard di Pi-hole è uno degli aspetti più apprezzati del progetto. Offre in tempo reale:
- Numero totale di query DNS nelle ultime 24 ore
- Percentuale di query bloccate (tipicamente tra il 10% e il 30% in una rete domestica media)
- Numero di domini in blocklist
- Top domini bloccati e top domini consentiti
- Lista dei client più attivi
- Grafico temporale dell'attività DNS
- Log delle query in tempo reale (querylog)
Il querylog è particolarmente illuminante: vedere in tempo reale tutti i domini a cui i dispositivi della rete tentano di connettersi rivela quanto sia pervasivo il tracciamento. Una smart TV che al boot contatta decine di server di analytics, un'app per bambini che invia dati a cinque reti pubblicitarie, un termostato intelligente che parla regolarmente con server in Cina: il querylog di Pi-hole trasforma questi comportamenti invisibili in dati leggibili.
Blocklist: la qualità conta più della quantità
Le blocklist sono il cuore di Pi-hole. Non tutte le liste sono uguali: alcune sono aggressive e possono causare falsi positivi (bloccare domini legittimi), altre sono conservative e meno efficaci. Il sito Firebog.net, mantenuto dal community member "The Tick", è la risorsa di riferimento per la selezione delle blocklist più affidabili.
Firebog organizza le liste in categorie con un sistema a semaforo:
- Verde (Tick Lists): Liste molto affidabili con pochissimi falsi positivi. Raccomandate per iniziare.
- Giallo: Liste efficaci ma con qualche possibilità di falsi positivi.
- Rosso: Liste aggressive, da usare con cautela e monitorare i falsi positivi.
Tra le liste più popolari e affidabili:
- StevenBlack/hosts: Una delle più complete, combina diverse sorgenti in un unico file. Disponibile in varianti (ads only, ads+malware, ads+malware+social).
- oisd.nl: Lista curata manualmente con attenzione ai falsi positivi. Disponibile in versioni small, big e nsfw.
- AdGuard DNS filter: Mantenuta da AdGuard, aggiornata frequentemente, buon equilibrio tra efficacia e falsi positivi.
- EasyList: La stessa lista usata da uBlock Origin, in formato hosts file.
Pi-hole 5.x ha introdotto il Gravity come sistema centralizzato per gestire le blocklist: si aggiungono gli URL delle liste nella sezione "Adlists" della dashboard, e il comando pihole -g (o il cron job automatico) scarica, consolida e ottimizza tutte le liste in un database SQLite ottimizzato per ricerche veloci.
Whitelist e Blacklist: la gestione delle eccezioni
Nessuna blocklist è perfetta. Capita che domini legittimi vengano bloccati per errore: siti di e-commerce che usano CDN condivisi con reti pubblicitarie, servizi di autenticazione federata, API di terze parti. Quando questo accade, Pi-hole offre due strumenti:
La whitelist contiene i domini che devono sempre essere risolti correttamente, indipendentemente da qualsiasi blocklist. È il meccanismo principale per correggere i falsi positivi. La comunità di Pi-hole mantiene liste di whitelist raccomandate per i casi più comuni (es. github.com/anudeepND/whitelist).
La blacklist personalizzata permette di aggiungere domini specifici da bloccare manualmente, al di là di quelli già presenti nelle blocklist. Utile per bloccare domini specifici identificati nel querylog o per personalizzare il blocco in base alle esigenze familiari.
Pi-hole 5 ha aggiunto i Regex blacklist e Regex whitelist: è possibile usare espressioni regolari per bloccare o sbloccare intere famiglie di domini con una sola regola. Ad esempio, la regex ^ads.*\.example\.com$ blocca tutti i sottodomini di example.com che iniziano con "ads".
Pi-hole e WireGuard: la VPN personale con ad-blocking
Una delle combinazioni più potenti per la privacy è installare Pi-hole insieme a WireGuard su un server con indirizzo IP pubblico (un VPS economico su Hetzner, DigitalOcean o simili). In questo modo, anche quando si è fuori casa connessi a una rete WiFi pubblica o alla rete mobile, tutto il traffico DNS viene instradata attraverso la propria VPN verso Pi-hole, mantenendo il blocco delle pubblicità e la protezione dal tracciamento anche in mobilità.
La configurazione prevede:
- WireGuard come server VPN sul VPS
- Pi-hole configurato per ascoltare solo sull'interfaccia WireGuard (non esposto a Internet)
- I client WireGuard (smartphone, laptop) configurati per usare il Pi-hole come DNS
Progetti come PiVPN automatizzano questa configurazione con un installer guidato simile a quello di Pi-hole.
Modalità DHCP server
Per default, Pi-hole funziona come DNS server e richiede che i dispositivi vengano manualmente configurati per usarlo, oppure che il router sia configurato per distribuire l'IP di Pi-hole come DNS tramite DHCP. Quest'ultima è la soluzione migliore ma richiede accesso alla configurazione del router, non sempre possibile.
Un'alternativa è usare Pi-hole come server DHCP al posto del router. Pi-hole gestisce direttamente l'assegnazione degli indirizzi IP ai dispositivi della rete, includendo automaticamente se stesso come server DNS nelle opzioni DHCP. Questo garantisce che tutti i dispositivi, anche quelli che non supportano la configurazione manuale del DNS, usino Pi-hole.
Lo svantaggio è che disabilitare il DHCP del router può creare conflitti e complica la rete domestica. Molti utenti preferiscono la soluzione intermedia: configurare il router per distribuire Pi-hole come DNS primario e l'IP del router stesso come DNS secondario (come fallback se Pi-hole è offline).
I limiti di Pi-hole: cosa non può bloccare
Pi-hole è uno strumento potente ma non onnipotente. Comprendere i suoi limiti è importante per evitare aspettative irrealistiche.
Il limite più discusso è l'impossibilità di bloccare le pubblicità su YouTube. Google serve i video e gli annunci pubblicitari dagli stessi domini (googlevideo.com, youtube.com), quindi bloccare il dominio degli annunci significa bloccare anche il video. Google ha progressivamente spostato le pubblicità su infrastrutture indistinguibili dal contenuto legittimo, rendendo il blocco via DNS inefficace. L'unica soluzione efficace per YouTube rimane un ad-blocker a livello di browser come uBlock Origin, o client alternativi come YouTube ReVanced su Android.
Altri limiti:
- HTTPS/DNS-over-HTTPS: I browser moderni possono usare DoH (DNS-over-HTTPS) bypassando Pi-hole completamente. Firefox ad esempio può usare Cloudflare come DoH per default. Occorre disabilitare questa funzione nei browser.
- Pubblicità native nelle app: App che usano IP hardcodati invece di nomi di dominio non possono essere bloccate via DNS.
- First-party ads: La pubblicità servita direttamente dai server del sito visitato (senza dominio di terze parti) non è bloccabile via DNS.
- DNS-over-TLS/QUIC: Dispositivi configurati con DoT o DoQ usano server DNS cifrati su porte non standard, bypassando Pi-hole.
Upstream DNS: Cloudflare, Quad9, Unbound
Quando Pi-hole riceve una query per un dominio non bloccato, deve risolverla contattando un upstream DNS. La scelta dell'upstream DNS ha implicazioni di privacy e performance:
- Cloudflare 1.1.1.1: Velocissimo (latenza media sotto 10ms in Europa), privacy policy che promette di non loggare i dati degli utenti per oltre 24 ore. Supporta DoT e DoH per cifrare la comunicazione tra Pi-hole e Cloudflare.
- Google 8.8.8.8: Affidabile e veloce, ma Google ha interesse commerciale nelle query DNS.
- Quad9 9.9.9.9: Fondazione svizzera no-profit, blocca domini malware nativamente, privacy policy forte. Scelta eccellente per chi vuole un ulteriore livello di protezione.
- NextDNS: Servizio con blocklist personalizzabili, logs opzionali, supporto DoH/DoT. Piano free con 300k query/mese.
La soluzione più privacy-preserving è Unbound: un DNS resolver ricorsivo che Pi-hole può usare localmente. Invece di affidarsi a un resolver di terze parti, Unbound risolve le query direttamente contattando i server autoritativi radice, eliminando completamente la dipendenza da terze parti per la risoluzione DNS. Il prezzo è una latenza leggermente superiore alla prima query (che viene poi cachata) e una maggiore complessità di configurazione.
Performance e impatto sulla rete
Una preoccupazione comune è che Pi-hole possa rallentare la navigazione aggiungendo latenza alla risoluzione DNS. In pratica l'effetto è trascurabile o addirittura positivo:
Pi-hole mantiene una cache DNS locale. I domini già risolti di recente vengono risposti direttamente dalla cache senza contattare l'upstream DNS, risultando in latenze nell'ordine di microsecondi. Per i siti visitati frequentemente, Pi-hole è più veloce di qualsiasi upstream DNS remoto.
Inoltre, bloccando le centinaia di request DNS verso tracker e server pubblicitari che ogni pagina web moderna genera, Pi-hole riduce il numero totale di round-trip e il volume di dati scaricati, rendendo la navigazione oggettivamente più veloce su pagine ad alta densità pubblicitaria.
In termini di carico sul sistema host, un Raspberry Pi Zero 2W con Pi-hole gestisce tranquillamente le query di una famiglia di 4-5 persone con decine di dispositivi connessi, usando meno del 5% della CPU e meno di 100MB di RAM.