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:

Nella pratica, Pi-hole gira egregiamente su:

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.sh
less install-pihole.sh
bash 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:

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:

Tra le liste più popolari e affidabili:

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:

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:

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:

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.