AdGuard Home con Docker o pacchetto: installarlo come DNS di casa
AdGuard Home è un server DNS libero, distribuito con licenza GPL-3.0, che blocca pubblicità e tracciamento su tutta la rete di casa. Il meccanismo è il DNS: le richieste verso i domini dei tracker finiscono in un «buco nero», e sui dispositivi non serve installare nulla. Il filtro arriva quindi anche a televisori, altoparlanti smart e altri oggetti su cui un ad blocker tradizionale non si può mettere. Questa guida segue l’installazione in un container Docker o con il pacchetto ufficiale, la prima configurazione dal pannello web e l’impostazione del DNS sul router o sui singoli dispositivi. I comandi sono quelli della documentazione ufficiale, elencata in fondo. Il wiki su GitHub si dichiara superato: dove non coincide con la Knowledge Base vale la Knowledge Base. Un’alternativa è la guida a Pi-hole.
Cosa serve
- Un computer con Linux, macOS o Windows. Il pacchetto ufficiale descritto nella Knowledge Base di AdGuard Home copre tutti e tre i sistemi, mentre lo script automatico vale per Linux, macOS, FreeBSD e OpenBSD. Docker gira su Linux e, con Docker Desktop, su macOS e Windows, con un limite di rete spiegato più avanti. Fedora e derivate, e macOS 10.15 Catalina e successivi, hanno indicazioni a parte.
- Per l’installazione nativa devono essere disponibili 3000/TCP per l’installazione iniziale, 80/TCP per l’interfaccia web e 53/UDP per il server DNS. I protocolli diversi dal DNS semplice, come il DNS-over-HTTPS, possono richiederne altre. Il comando Docker riportato più avanti richiede inoltre che siano libere tutte le porte dell’host indicate nelle opzioni
-p: prima di eseguirlo, verificare anche quelle, oppure rimuovere le mappature delle funzioni non utilizzate. - I privilegi di amministratore. Il server DNS si lega alla porta 53, che il più delle volte richiede i privilegi di superutente: sui sistemi Unix si usa
sudoodoas, su Windows un prompt aperto come amministratore. - L’accesso alle impostazioni del router, se si vuole proteggere tutta la rete.
Le fonti non indicano requisiti minimi di memoria o di disco.
Installare AdGuard Home con Docker
La pagina Docker della Knowledge Base spiega che l’immagine espone due volumi, uno per i dati e uno per la configurazione. Il loro contenuto sopravvive quando il container viene ricreato, a patto di creare prima due cartelle sull’host. Il primo comando scarica l’ultima versione stabile dell’immagine:
docker pull adguard/adguardhome
Su Linux conviene controllare la porta 53 prima di creare il container. Se il sistema usa systemd-resolved, come succede su Ubuntu, la porta è già occupata e il container non riesce a pubblicarla. In quel caso va seguita prima la procedura della sezione «Liberare la porta 53 occupata da systemd-resolved». La FAQ precisa che con Docker questa procedura va fatta a mano. Chi ha già lanciato il docker run e ha ricevuto l’errore libera la porta, rimuove il container con docker rm adguardhome e rilancia lo stesso comando.
Il secondo comando crea il container e lo avvia in background. Prima di lanciarlo, i percorsi d’esempio /my/own/workdir (dati) e /my/own/confdir (configurazione) vanno sostituiti con i percorsi assoluti delle due cartelle create. Le parti dopo i due punti, /opt/adguardhome/work e /opt/adguardhome/conf, sono percorsi interni al container e restano come sono. Il comando va a capo con la barra rovesciata, come in una shell Unix, e la documentazione non ne dà una versione per cmd.exe o PowerShell.
docker run \
-d \
--name adguardhome \
-p 53:53/tcp -p 53:53/udp \
-p 67:67/udp -p 68:68/udp \
-p 80:80/tcp -p 443:443/tcp \
-p 443:443/udp -p 3000:3000/tcp \
-p 853:853/tcp \
-p 853:853/udp \
-p 5443:5443/tcp -p 5443:5443/udp \
-p 6060:6060/tcp \
--restart unless-stopped \
-v /my/own/workdir:/opt/adguardhome/work \
-v /my/own/confdir:/opt/adguardhome/conf \
adguard/adguardhome \
;
Se il comando va a buon fine, il pannello risponde nel browser su http://127.0.0.1:3000/. La Knowledge Base presenta le porte pubblicate come mappature «che potrebbero servire» e lega ciascuna a una funzione:
| Mappatura | A cosa serve |
|---|---|
53/tcp, 53/udp |
DNS semplice |
67/udp, 68/tcp, 68/udp |
server DHCP |
80/tcp, 443/tcp, 443/udp, 3000/tcp |
pannello di amministrazione e server HTTPS/DNS-over-HTTPS |
853/tcp |
server DNS-over-TLS |
853/udp |
server DNS-over-QUIC |
5443/tcp, 5443/udp |
server DNSCrypt |
6060/tcp |
API di debug pprof |
Fra le porte del DHCP l’elenco cita anche 68/tcp, che nel comando d’esempio manca. Con Docker, però, il DHCP integrato richiede comunque l’opzione --network host, che fa usare al container la rete dell’host e rende superflue le mappature -p. La stessa opzione serve anche perché AdGuard Home veda gli indirizzi reali dei dispositivi: con la rete predefinita di Docker le richieste sembrano arrivare tutte da un indirizzo come 172.17.0.1. Il limite sta nella piattaforma: la rete host è supportata da Docker Engine su Linux e da Docker Desktop 4.34 e successivi, anche su macOS e Windows, abilitando Enable host networking in Settings › Resources › Network. Su Desktop funziona soltanto con container Linux, senza Enhanced Container Isolation, ed è limitata a TCP/UDP: non offre accesso diretto alle interfacce dell’host. La pagina AdGuard riporta ancora l’esclusione di Docker Desktop, ma la documentazione Docker la supera.
Installare il pacchetto con lo script automatico (Linux e macOS)
Il README del repository ufficiale propone uno script di installazione per Linux, macOS, FreeBSD e OpenBSD. Le varianti con curl e wget sono equivalenti: ne basta una. L’opzione finale -v chiede un output dettagliato. Lo script accetta anche -c seguito da un canale, -r per reinstallare e -u per disinstallare; -r e -u si escludono a vicenda.
Attenzione, script da internet. Il comando scarica install.sh e lo passa a sh, che lo esegue subito senza mostrarlo. Se l’indirizzo è sbagliato o punta a una copia diversa da quella del repository AdguardTeam/AdGuardHome, si esegue codice sconosciuto che può modificare o cancellare file. Lo script si può leggere prima, aprendo nel browser lo stesso indirizzo https://raw.githubusercontent.com/AdguardTeam/AdGuardHome/master/scripts/install.sh. Poi va controllato che il comando incollato contenga proprio quell’indirizzo.
curl -s -S -L https://raw.githubusercontent.com/AdguardTeam/AdGuardHome/master/scripts/install.sh | sh -s -- -v
L’avviso vale anche per la variante con wget, che scarica lo stesso file e lo fa eseguire subito a sh:
wget --no-verbose -O - https://raw.githubusercontent.com/AdguardTeam/AdGuardHome/master/scripts/install.sh | sh -s -- -v
Se termina correttamente, lo script installa AdGuard Home e lo avvia come servizio, come annuncia nel suo messaggio finale. Resta da verificare che il pannello risponda sulla porta 3000, come spiegato più avanti. Secondo la FAQ, la cartella predefinita del programma è /opt/AdGuardHome sulla maggior parte dei sistemi Unix e /Applications/AdGuardHome su macOS.
Installare a mano il pacchetto come servizio (Linux, macOS e Windows)
L’installazione a mano è l’alternativa allo script, e su Windows è la via nativa documentata. Dalla pagina dell’ultima versione stabile, a cui rimanda la Knowledge Base, si scarica l’archivio con il binario per il proprio sistema, poi lo si estrae e si entra nella cartella AdGuardHome. Ci sono due accortezze:
- su Fedora e derivate AdGuard Home va installato in
/usr/local/bin, perché altrimenti possono nascere problemi con SELinux e con i permessi; - su macOS 10.15 Catalina e successivi la cartella di lavoro va messa dentro
/Applications.
A questo punto si registra AdGuard Home come servizio di sistema. Prima vanno controllati proprietà e permessi della cartella e del binario, perché se un utente senza privilegi può modificarli si apre la strada a un’escalation dei privilegi. Sui sistemi Unix entrambi devono appartenere a root:root ed essere scrivibili solo da root, mentre su Windows gli utenti ordinari devono poterli soltanto leggere ed eseguire. Su Linux e macOS, dalla cartella AdGuardHome:
sudo ./AdGuardHome -s install
Su Windows si apre cmd.exe come amministratore, ci si sposta nella cartella estratta e si registra il servizio:
AdGuardHome.exe -s install
Quando gira come servizio, AdGuard Home scrive il registro in un posto che dipende dal sistema: i file /var/log/AdGuardHome.*.log su macOS, syslog o journald sugli altri Unix, il Registro eventi su Windows.
Liberare la porta 53 occupata da systemd-resolved (solo Linux)
Ubuntu include un DNS locale, systemd-resolved, che occupa l’indirizzo 127.0.0.53:53. Per questo AdGuard Home non riesce a legarsi a 127.0.0.1:53 e l’installazione si ferma con l’errore bind: address already in use. La prima soluzione indicata dalla FAQ ufficiale è il pulsante Fix, che compare accanto al messaggio nella schermata di installazione. Se il pulsante non basta, o se si usa Docker o Snap, la procedura va fatta a mano. Il primo passo è vedere chi occupa la porta:
sudo lsof -i :53
Se a occuparla è systemd-resolved, l’output somiglia a questo:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
systemd-r 14542 systemd-resolve 13u IPv4 86178 0t0 UDP 127.0.0.53:domain
systemd-r 14542 systemd-resolve 14u IPv4 86179 0t0 TCP 127.0.0.53:domain
I passaggi seguenti cambiano il modo in cui il computer risolve i nomi, e un errore qui lo lascia senza risoluzione. Per questo il file /etc/resolv.conf originale non si cancella ma si rinomina in /etc/resolv.conf.backup, così da poterlo ripristinare. Prima si crea, se manca, la cartella delle configurazioni aggiuntive:
sudo mkdir -p /etc/systemd/resolved.conf.d
Poi si crea il file /etc/systemd/resolved.conf.d/adguardhome.conf con un editor di testo avviato con sudo, con questo contenuto:
[Resolve]
DNS=127.0.0.1
DNSStubListener=no
L’indirizzo 127.0.0.1 è obbligatorio, perché senza di esso il server dei nomi resterebbe 127.0.0.53, che senza DNSStubListener non funziona. Ora si mette da parte il vecchio resolv.conf e si collega quello di systemd-resolved:
sudo mv /etc/resolv.conf /etc/resolv.conf.backup
sudo ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf
Infine si riavvia il servizio, così che il listener lasci libera la porta:
sudo systemctl reload-or-restart systemd-resolved
Ripetendo sudo lsof -i :53, systemd-resolved non deve più comparire, e AdGuard Home deve riuscire a legarsi a 127.0.0.1:53. La pagina Docker riporta gli stessi comandi senza sudo; qui si sono seguiti quelli della FAQ. Chi installa con Docker può ora tornare al docker run.
Completare la configurazione dal pannello web sulla porta 3000
Al primo avvio AdGuard Home ascolta su 0.0.0.0:3000, cioè su tutte le interfacce, e attende la procedura guidata di configurazione iniziale. Con Docker o con lo script il programma è già in esecuzione. Se invece non è registrato come servizio, sui sistemi Unix lo si avvia dalla sua cartella con sudo, dato che la porta 53 richiede i privilegi di superutente:

sudo ./AdGuardHome
Su Windows si esegue AdGuardHome.exe da cmd.exe o PowerShell aperti come amministratore. Il terminale elenca gli indirizzi del pannello, e l’elenco comincia così:
AdGuard Home è disponibile ai seguenti indirizzi:
vai a http://127.0.0.1:3000
vai a http://[::1]:3000
Sul server si apre http://127.0.0.1:3000; da un altro computer della rete si usa l’indirizzo IP del server seguito da :3000. Lì si segue la procedura guidata, per le cui scelte la Knowledge Base rimanda al suo articolo sull’esecuzione sicura di AdGuard Home. Finita la procedura, l’interfaccia web si raggiunge sulla porta 80/TCP, quella che la Knowledge Base indica per il pannello.
Far usare il DNS di AdGuard Home al router o ai dispositivi
Tutti i dispositivi punteranno all’indirizzo del server, che quindi non deve cambiare. Per prima cosa al computer con AdGuard Home va dato un IP fisso; il modo dipende dal router e dal sistema, e le fonti non lo descrivono. Configurando il router, tutti i dispositivi collegati sono coperti senza toccarli. La procedura della Knowledge Base è generica:
- aprire le impostazioni del router, di solito a un indirizzo come
http://192.168.0.1/ohttp://192.168.1.1/, oppure dall’app del produttore se il router la richiede. Una password dimenticata spesso si reimposta con un pulsante sul router, ma così si perde probabilmente tutta la sua configurazione; - trovare le impostazioni DHCP/DNS: il campo è indicato dalla sigla DNS e accetta due o tre indirizzi;
- inserire lì l’indirizzo del server AdGuard Home.
Alcuni router non permettono di indicare un DNS personalizzato. In quel caso la Knowledge Base suggerisce di usare AdGuard Home come server DHCP, oppure di consultare il manuale del router. Con Docker il DHCP richiede --network host, quindi in pratica un host Linux.
Singoli dispositivi
- Windows: Pannello di controllo › Rete e Internet › Centro connessioni di rete e condivisione › Modifica impostazioni dell’adattatore; clic destro sulla connessione attiva › Proprietà › Protocollo Internet Versione 4 (TCP/IPv4) › Proprietà (per IPv6 la Versione 6); poi Utilizza i seguenti indirizzi del server DNS e l’indirizzo del server.
- macOS: menu Apple › Preferenze di Sistema › Rete; si seleziona la prima connessione dell’elenco, poi Avanzate, e si inserisce l’indirizzo nella scheda DNS.
- Android: Impostazioni › Wi-Fi, pressione lunga sulla rete in uso › Modifica rete; su alcuni dispositivi va spuntata la casella Avanzate. Le impostazioni IP passano da DHCP a Statico e si compilano DNS 1 e DNS 2. Le voci cambiano con la versione del sistema e con il produttore.
- iOS: Impostazioni › Wi-Fi › nome della rete attiva › campo DNS.
Le procedure descritte per Android e iOS modificano soltanto il DNS della rete Wi-Fi selezionata. Per usare AdGuard Home anche sulla connessione mobile si può configurare il DNS cifrato: Android 9 e successivi supportano DNS-over-TLS tramite DNS privato; iOS 14 e successivi supportano DNS-over-TLS e DNS-over-HTTPS tramite profili generabili da AdGuard Home. Per usarlo anche fuori casa serve un server raggiungibile da Internet. Un server esposto su Internet è però a rischio di attacchi DDoS, avverte l’articolo della Knowledge Base sull’esecuzione sicura. In quel caso vanno indicati i client consentiti nelle Impostazioni d’accesso (in fondo a Impostazioni › Impostazioni DNS) e va verificato il limite di frequenza del DNS semplice, che di serie è 20. Se tutti i client usano protocolli cifrati, il DNS semplice va reso inaccessibile dall’esterno.
Cosa resta fuori dal filtro
Il blocco vale solo per i dispositivi che usano AdGuard Home come DNS: secondo la FAQ, quando non funziona la causa più probabile è proprio un dispositivo che non lo usa come server predefinito. Ne discendono due limiti pratici:
- un dispositivo con un DNS proprio, cifrato o no, non passa da AdGuard Home e non viene filtrato;
- se il computer che ospita il server è spento, la rete resta senza DNS. Per lo stesso motivo la FAQ chiede di puntare i dispositivi a un altro DNS prima di disinstallare.
Un blocco a livello DNS non ferma nemmeno la pubblicità servita dallo stesso dominio dei contenuti, come gli annunci di YouTube e Twitch o i post sponsorizzati di Facebook, X e Instagram.
Gestire il servizio e modificare la configurazione
La Knowledge Base elenca i comandi di gestione del servizio senza percorso; quello che mostra lo stato è:
AdGuardHome -s status
Dalla cartella del programma lo si richiama come ./AdGuardHome su Linux e macOS e come .\AdGuardHome.exe su Windows, da un prompt da amministratore. La configurazione sta nel file YAML AdGuardHome.yaml, e la FAQ lo fa modificare solo a programma fermo. Si comincia quindi fermandolo:
./AdGuardHome -s stop
Poi si modifica AdGuardHome.yaml con un editor e si riavvia il programma:
./AdGuardHome -s start
Nella procedura di aggiornamento manuale la FAQ scrive gli stessi comandi con sudo davanti; su Windows diventano .\AdGuardHome.exe -s stop e .\AdGuardHome.exe -s start.
Con Docker il file nasce al primo avvio con i valori predefiniti. Secondo la pagina Docker, le modifiche fatte a container avviato vanno perse, perché il programma in esecuzione le sovrascrive. Per questo si ferma prima il container:
docker stop adguardhome
Poi si modifica il file nella cartella di configurazione montata come volume e si riavvia il container:
docker start adguardhome
Se qualcosa va storto
Errori di permesso su Fedora
Su Fedora possono comparire errori di permesso, oppure systemctl può segnalare code=exited status=203/EXEC. Per questi casi la FAQ indica tre passaggi. Il primo è spostare il binario AdGuardHome in /usr/local/bin, operazione per cui la FAQ non dà un comando. Il secondo è cambiare, come root, il contesto di sicurezza SELinux del file. Dato che il comando modifica un’etichetta di sicurezza del sistema, va lanciato solo dopo aver controllato che il binario sia davvero in /usr/local/bin/AdGuardHome.
chcon -t bin_t /usr/local/bin/AdGuardHome
Il terzo passaggio aggiunge le regole del firewall. I comandi cambiano in modo permanente firewalld: creano una zona adguard che accetta connessioni da una sola sorgente e vi aprono le porte 3000/TCP, 53/UDP e 80/TCP. L’indirizzo 192.168.0.14/24 è un esempio e va sostituito con quello della propria rete locale, nella stessa notazione. Lo si ricava dall’indirizzo IP del server e dalla maschera di rete, visibili nelle impostazioni di rete del sistema. Con un valore sbagliato i dispositivi di casa non raggiungono AdGuard Home.
firewall-cmd --new-zone=adguard --permanent
firewall-cmd --zone=adguard --add-source=192.168.0.14/24 --permanent
firewall-cmd --zone=adguard --add-port=3000/tcp --permanent
firewall-cmd --zone=adguard --add-port=53/udp --permanent
firewall-cmd --zone=adguard --add-port=80/tcp --permanent
Attenzione: il comando seguente applica la configurazione permanente del firewall. Chi amministra il server da remoto deve prima verificare che l’accesso che sta usando resti consentito, perché altrimenti rischia di perderlo.
firewall-cmd --reload
Se l’errore resta, la FAQ consiglia di disinstallare AdGuard Home e di reinstallarlo direttamente in /usr/local/bin con l’opzione -o dello script di installazione; il comando completo è nella FAQ.
AdGuard Home non blocca nulla
La FAQ procede per ordine, partendo dal dispositivo:
- sul dispositivo si esegue
nslookup example.org(su Windows dal Prompt dei comandi, altrove dal Terminale): la riga Server deve mostrare l’indirizzo IP del computer con AdGuard Home, altrimenti il dispositivo va configurato come visto sopra; - la richiesta a
example.orgdeve comparire nella pagina Query Log del pannello. Se non compare, AdGuard Home va configurato per ascoltare sull’interfaccia giusta, e la FAQ indica come via più semplice la reinstallazione con le impostazioni predefinite; - se il dispositivo usa AdGuard Home e il problema resta, si controllano le impostazioni: in Settings › General settings deve essere attiva l’opzione Block domains using filters and hosts files, in Filters › DNS blocklists devono essere attivi i filtri giusti, e nessuna voce in DNS allowlists, DNS rewrites o Custom filtering rules deve lasciar passare le richieste.
Aggiornare e disinstallare
Con il pacchetto, all’uscita di una nuova versione il pannello mostra una notifica e il pulsante Aggiorna ora. L’eseguibile precedente viene salvato nella cartella backup insieme al file di configurazione, così da poter tornare indietro. Da riga di comando, nella cartella del programma:
./AdGuardHome --update
Con Docker gli aggiornamenti automatici sono disabilitati e si aggiorna l’immagine. Si scarica la nuova versione:
docker pull adguard/adguardhome
Poi si ferma il container e lo si rimuove:
docker stop adguardhome
docker rm adguardhome
Infine lo si ricrea con lo stesso docker run e le stesse due cartelle, che servono proprio a conservare dati e configurazione.
Prima di disinstallare, la FAQ raccomanda di puntare router e dispositivi a un altro server DNS. Per il pacchetto si annulla la registrazione del servizio con il comando che la Knowledge Base scrive così:
AdGuardHome -s uninstall
Dalla cartella del programma diventa ./AdGuardHome -s uninstall su Linux e macOS e .\AdGuardHome.exe -s uninstall su Windows; poi si cancella la cartella di AdGuard Home. Con Docker basta docker stop adguardhome e docker rm adguardhome.
Documentazione di riferimento
Pagine consultate il 3 novembre 2026:
- AdGuard Home — Knowledge Base ufficiale: Per iniziare
- AdGuard Home — Knowledge Base ufficiale: Docker
- AdGuard Home — Knowledge Base ufficiale: FAQ
- AdGuard Home — Knowledge Base ufficiale: Esecuzione sicura (articolo citato dalla pagina Per iniziare)
- AdGuard Home — Repository ufficiale su GitHub (README)
- AdGuard Home: Getting Started (wiki ufficiale, indicato dal progetto come superato)
- AdGuard Home: Docker (wiki ufficiale, indicato dal progetto come superato)


