Come usare Pi-hole e la VPN Mullvad su un Raspberry Pi

Introduzione
Temi che il tuo provider Internet possa spiarti e leggere tutto il traffico della rete domestica? Sei stanco di vedere annunci ovunque? Oppure non ti piace l'idea che un'azienda qualsiasi possa vedere e tracciare ogni movimento del mouse e ogni pressione dei tasti mentre navighi?
Se queste sono alcune delle tue preoccupazioni, sei nel posto giusto. In questa guida pratica configureremo un blocco di annunci e tracker per tutta la rete, una sorta di scudo digitale tra te, il provider e le aziende di analisi.
Useremo Pi-hole (un sistema di filtraggio DNS molto popolare) per bloccare annunci e tracker e la VPN Mullvad (un provider molto attento alla privacy) per nascondere il traffico Web al provider.
Cosa serve
Raspberry Pi
L'elemento principale è il Raspberry Pi, un piccolo computer molto conosciuto che permette di provare progetti a casa senza un server costoso. CPU ARM e RAM sono più che sufficienti per il nostro scudo di rete.

Useremo Raspberry Pi OS, precisamente la versione Lite senza interfaccia grafica. Consiglio il modello da 4 o 8 GB, anche se la configurazione ne utilizzerà molto meno. Servono inoltre conoscenze di base del terminale e delle connessioni SSH.
Mullvad
Per il progetto serve un account Mullvad. È un provider VPN popolare e attento alla privacy: non richiede nemmeno un indirizzo e-mail, perché assegna un numero casuale di account. Non serve neppure una password.

Mullvad applica una rigida politica no-log e non conserva cronologia del traffico, richieste DNS, orari di connessione, indirizzi IP o consumo di banda. È un'ottima scelta per tenere il traffico lontano dal provider. Ho scelto Mullvad anche per il suo impegno verso la libertà di espressione e un Internet aperto.
1. Preparare il Raspberry Pi
Questa guida non tratta l'installazione del sistema operativo: passeremo direttamente alla configurazione di rete. Online sono disponibili molte guide dettagliate. Iniziamo configurando l'indirizzo IP del Pi.
2. Impostare un IP statico
Per usare il Raspberry Pi come server DNS (Pi-hole) e gateway (Mullvad), serve un IP statico. L'indirizzo assegnato dal DHCP può cambiare e rendere il Pi irraggiungibile agli altri dispositivi. Useremo NetworkManager per fissarlo.
Elencare le interfacce di rete
nmcli con show
Nel mio caso la connessione si chiama netplan-eth0 e il dispositivo eth0.
Configurare con l'interfaccia testuale
Puoi usare l'interfaccia semplice o la riga di comando. Per aprire l'interfaccia:
sudo nmtuiOppure dalla riga di comando
Questo metodo è più rapido. Sostituisci nomi e indirizzi con quelli della tua rete.
sudo nmcli con mod netplan-eth0 ipv4.addresses "192.168.21.82/24" ipv4.gateway "192.168.21.1" ipv4.dns "192.168.21.1,1.1.1.1" ipv4.method manualApplicare le modifiche
sudo nmcli device reapply eth0Verificare l'interfaccia
Controlla che indirizzo, gateway e DNS corrispondano ai valori impostati.
nmcli device show eth0
Il Raspberry Pi ora ha un IP statico. Se sei collegato via SSH, la connessione potrebbe interrompersi: riconnettiti usando il nuovo indirizzo.
3. Installare Pi-hole
Aggiornare prima il sistema
Installa gli ultimi aggiornamenti e riavvia il Pi:
sudo apt update && sudo apt full-upgrade -ysudo reboot
Installare Pi-hole
Usa l'installer ufficiale in un solo passaggio. Puoi esaminare lo script prima di eseguirlo.
curl -sSL https://install.pi-hole.net | bash
Conferma l'IP statico e premi Continue.

Per ora scegli Cloudflare come DNS upstream; lo cambieremo quando Mullvad funzionerà.

Conferma la lista StevenBlack Unified Hosts, un ottimo punto di partenza per bloccare domini pubblicitari e di tracciamento.

L'installazione è terminata. Annota il link e la password del pannello: http://<pi-ip>/admin oppure http://pi.hole/admin.

Impostare una nuova password
Cambia la password generata dalla riga di comando e non riutilizzarne mai una di un altro servizio.
sudo pihole setpassword
Ora abbiamo un blocco di annunci e tracker per tutta la rete. Per saperne di più consulta la documentazione ufficiale.
4. Configurare il DNS della rete
Pi-hole filtra solo le richieste che riceve. Configura il DHCP del router per distribuire l'IP del Raspberry Pi come DNS principale, poi rinnova i lease o riconnetti i client. Se il router non lo permette, configura manualmente ogni dispositivo. Anche il Pi può usare Pi-hole tramite /etc/dhcpcd.conf o NetworkManager; una configurazione errata può interrompere la connettività.
5. Installare WireGuard e Mullvad
Quando Pi-hole funziona, installa WireGuard. WireGuard crea un tunnel VPN cifrato, leggero e veloce. Mullvad fornisce il file di configurazione; WireGuard lo legge, stabilisce la connessione e instrada il traffico, mentre Pi-hole filtra il DNS.
Installare WireGuard
sudo apt install wireguard wireguard-tools resolvconf -y
Configurare WireGuard
Scarica dal tuo account Mullvad una configurazione WireGuard per Linux, scegli un server e salvala come mullvad.conf in /etc/wireguard.
sudo chmod 600 /etc/wireguard/mullvad.confAvviare e verificare il tunnel
sudo wg-quick up mullvadsudo wg showcurl https://am.i.mullvad.net/connectedDovresti vedere "You are connected to Mullvad". Abilita quindi l'avvio automatico:
sudo systemctl enable wg-quick@mullvad
Per fermare il tunnel durante la diagnosi:
sudo wg-quick down mullvadInstradare il traffico attraverso Mullvad
Per gli altri dispositivi, il Pi deve inoltrare e mascherare il traffico. Supponiamo che:
- L'interfaccia LAN è eth0.
- L'interfaccia WireGuard Mullvad è mullvad, perché il file si chiama mullvad.conf.
- L'indirizzo LAN del Raspberry Pi è 192.168.21.82.
Sostituisci i valori di esempio con i tuoi. Verifica le interfacce con:
ip link showSe si chiama wg0, sostituisci mullvad con wg0.
Abilitare il forwarding IPv4
sudo sysctl net.ipv4.ip_forward
Il valore deve essere 1. Se è 0, abilitalo:
sudo sysctl -w net.ipv4.ip_forward=1Rendi permanente l'impostazione:
echo 'net.ipv4.ip_forward=1' | sudo tee /etc/sysctl.d/99-router.confsudo sysctl --systemsudo sysctl net.ipv4.ip_forward
Consentire il forwarding e aggiungere il NAT
sudo iptables -A FORWARD -i eth0 -o mullvad -j ACCEPTsudo iptables -A FORWARD -i mullvad -o eth0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPTsudo iptables -t nat -A POSTROUTING -o mullvad -j MASQUERADEInstalla il servizio per rendere persistenti le regole:
sudo apt install iptables-persistent -y

sudo netfilter-persistent save
Configurare i dispositivi di rete
Imposta questi valori su ogni dispositivo:
- Un indirizzo IP nella stessa LAN del Raspberry Pi.
- L'indirizzo IP del Raspberry Pi come gateway predefinito.
- L'indirizzo IP del Raspberry Pi come server DNS.
Testare il percorso per fasi
ping 192.168.21.82Poi prova il DNS Cloudflare 1.1.1.1:
ping 1.1.1.1Infine prova la risoluzione DNS:
nslookup example.comIn caso di problemi:
- Se fallisce il primo test, controlla rete e gateway del PC.
- Se il primo riesce ma 1.1.1.1 fallisce, controlla forwarding IPv4, NAT e firewall Mullvad.
- Se l'IP pubblico funziona ma il DNS no, verifica che Pi-hole ascolti sulla LAN e che il PC lo usi come DNS.
sudo wg show
I contatori dovrebbero aumentare. Controlla l'indirizzo pubblico dal PC:
curl https://am.i.mullvad.net/connected
6. Verificare la sicurezza
Apri il controllo della connessione Mullvad e verifica IP di uscita e resolver DNS.

Capire il risultato
- Se l'IP di uscita appartiene a un server Mullvad, come **it-mil-wg-001** a Milano, il traffico passa correttamente da Mullvad.
- Se i resolver sono indirizzi Cloudflare come **172.70.x.x**, **1.1.1.1** o l'indirizzo IPv6 corrispondente, Pi-hole sta inoltrando le richieste a Cloudflare.
Di solito Using Mullvad VPN e No WebRTC leaks sono verdi, mentre No DNS leaks è rosso perché Cloudflare non è gestito da Mullvad.
Rendere verde il controllo DNS
Sostituisci il DNS upstream di Pi-hole con un resolver Mullvad:
- 1DNS interno Mullvad: 10.64.0.1. Funziona solo con il tunnel WireGuard attivo.
- 2DNS pubblico Mullvad senza filtraggio: 194.242.2.2. Funziona anche se il tunnel cade brevemente.
- 3DNS pubblico Mullvad con blocco di annunci, tracker e malware: 194.242.2.4.
- 4DNS pubblico Mullvad con solo blocco degli annunci: 194.242.2.3.
Nel dashboard di Pi-hole:
- 1Apri l'interfaccia di amministrazione Pi-hole.
- 2Vai su Settings, poi DNS.
- 3In Upstream DNS Servers deseleziona Cloudflare e gli altri provider.
- 4Seleziona Custom e inserisci un indirizzo DNS Mullvad. Se necessario puoi aggiungere resolver IPv4 e IPv6.
- 5Fai clic su Save in fondo alla pagina.

Attendi alcuni secondi e ripeti il controllo su mullvad.net/check. No DNS leaks dovrebbe apparire verde.
Se il controllo mostra ancora una perdita DNS
La causa più comune è il browser, che usa il proprio DNS over HTTPS e ignora le impostazioni di Pi-hole. Disabilita il DNS sicuro.
Firefox
- 1Apri Settings, poi Privacy & Security.
- 2Scorri fino a DNS over HTTPS.
- 3Seleziona Off.
- 4Riavvia Firefox ed esegui di nuovo il controllo Mullvad.
Chrome
- 1Apri chrome://settings/security.
- 2In Use secure DNS disattiva l'impostazione.
- 3Riavvia Chrome ed esegui di nuovo il controllo Mullvad.
Edge
- 1Apri edge://settings/privacy.
- 2Trova Use secure DNS e disattivalo.
- 3Riavvia Edge ed esegui di nuovo il controllo Mullvad.
Se il risultato non cambia, prova una finestra privata o un browser diverso per capire se la perdita dipende dal browser.
Conclusione
Il Raspberry Pi ora funziona come blocco di annunci e tracker per tutta la rete e instrada il traffico attraverso la VPN Mullvad. Mantieni aggiornati Raspberry Pi OS, Pi-hole, WireGuard e la configurazione Mullvad per ricevere le ultime patch e conservare un funzionamento affidabile.
Per oggi è tutto. Spero che la guida ti sia piaciuta e ci vediamo presto!
Domande frequenti
Trova risposte rapide alle domande piu comuni su questo argomento.
Pi-hole blocca annunci e tracker a livello DNS, mentre Mullvad instrada il traffico Internet attraverso un tunnel VPN cifrato. Insieme offrono filtraggio DNS per tutta la rete e protezione VPN ai dispositivi che usano il Raspberry Pi come server DNS e gateway.
Sì. Può eseguire Pi-hole come server DNS della rete e WireGuard come client VPN Mullvad. Con forwarding IPv4 e NAT configurati, può anche instradare nel tunnel il traffico degli altri dispositivi.
Ha bisogno di un indirizzo stabile affinché gli altri dispositivi possano trovarlo sempre come server DNS e gateway. Un indirizzo DHCP variabile potrebbe interrompere il filtraggio DNS e impedire di raggiungere il gateway VPN.
Abilita il forwarding IPv4, consenti il forwarding tra le interfacce LAN e WireGuard, aggiungi una regola di masquerade per l'interfaccia VPN e configura ogni dispositivo per usare il Pi come gateway e server DNS.
Usa il DNS interno Mullvad 10.64.0.1 quando il tunnel WireGuard è attivo. Per il DNS pubblico Mullvad usa 194.242.2.2 senza filtraggio, 194.242.2.4 con blocco di annunci e tracker oppure 194.242.2.3 solo con blocco degli annunci.
Cloudflare non è gestito da Mullvad, quindi il controllo può segnalare una perdita anche quando il tunnel funziona correttamente. Per visualizzare No DNS leaks, configura Pi-hole con un resolver DNS Mullvad anziché Cloudflare.
Disabilita DNS over HTTPS o il DNS sicuro nel browser, poi esegui di nuovo il controllo Mullvad. Se il risultato non cambia, prova una finestra privata o un altro browser per capire se il browser sta aggirando Pi-hole.
