Come configurare AdGuard Home su un VPS
Installare AdGuard Home su Ubuntu, completare la procedura guidata iniziale, mettere in sicurezza l’interfaccia web, attivare DNS-over-HTTPS e DNS-over-TLS, puntare i dispositivi al tuo resolver ed evitare di gestire un server DNS aperto che tutta internet può abusare.

AdGuard Home è un sinkhole DNS self-hosted e un resolver di tipo ricorsivo con interfaccia web. Può bloccare pubblicità, tracker e domini malware per ogni dispositivo che lo usa come DNS: telefoni, portatili, smart TV e altri progetti sul VPS. A differenza di un’estensione del browser, funziona anche per le app che ignorano i file hosts. Farlo girare su un VPS è utile quando vuoi lo stesso filtraggio in mobilità, o quando non vuoi un Raspberry Pi sulla rete di casa.
Il default pericoloso da non pubblicare è un resolver aperto: se UDP/TCP 53 è raggiungibile da tutta internet senza controllo degli accessi, sconosciuti useranno il tuo VPS per l’amplificazione DNS e arriveranno segnalazioni di abuso. Questa guida installa AdGuard Home su Ubuntu, associa il DNS a localhost o a un’interfaccia WireGuard privata a meno che tu non esponga di proposito il DNS cifrato, mette la dashboard su HTTPS e mostra come portatili e telefoni possano usare DNS-over-HTTPS (DoH) o DNS-over-TLS (DoT) senza aprire la porta 53 classica al mondo.
A cosa serve bene AdGuard Home
Pi-hole è il confronto usuale. AdGuard Home è un unico binario con interfaccia web integrata, frontend DNS cifrati opzionali e impostazioni per client. Puoi eseguirlo in Docker o come servizio systemd. Su un VPS Hiddence sta bene insieme a una VPN privata: i dispositivi entrano in WireGuard, inviano il DNS al VPS nel tunnel e non espongono mai la porta 53 in pubblico.
- Blocco a livello di rete senza installare un’app su ogni dispositivo
- DoH (443) e DoT (853) così il DNS non viaggia in chiaro sul Wi-Fi pubblico
- Log delle query e statistiche per vedere quale dispositivo parla con quale dominio
- Upstream personalizzati (Quad9, Cloudflare o il tuo Unbound)
- Ingombro ridotto: un VPS da 1 GB può filtrare una famiglia più qualche client extra
Requisiti
Ti serve un dominio se vuoi un certificato attendibile per DoH/DoT e per la dashboard. Puoi testare prima in HTTP e con l’IP del server, ma non lasciarlo così. Se systemd-resolved possiede già la porta 53 su Ubuntu, la libereremo prima che AdGuard Home associ il DNS.
- VPS Ubuntu 22.04 o 24.04 con root/sudo
- 1 GB di RAM basta per uso personale
- Un dominio o sottodominio (dns.example.com) con record A verso il VPS
- Accesso SSH; WireGuard facoltativo se vuoi il DNS solo dentro un tunnel
Passo 1: Liberare la porta 53 e installare AdGuard Home
Ubuntu Server spesso esegue systemd-resolved come stub su 127.0.0.53:53. AdGuard Home vuole la 53 sulle interfacce che scegli. L’installer può occuparsene, ma farlo in modo esplicito evita un DNS a metà sul VPS stesso (il server deve ancora risolvere i pacchetti).
ssh root@YOUR_VPS_IP
apt update && apt -y upgrade
apt -y install curl ca-certificates
# See who owns port 53:
ss -tulpn | grep ':53'
# Typical Ubuntu fix: stop stub listener, point the OS at a temporary resolver
mkdir -p /etc/systemd/resolved.conf.d
cat >/etc/systemd/resolved.conf.d/adguardhome.conf <<'EOF'
[Resolve]
DNS=1.1.1.1
DNSStubListener=no
EOF
ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf
systemctl restart systemd-resolved
curl -s -S -L https://raw.githubusercontent.com/AdguardTeam/AdGuardHome/master/scripts/install.sh | sh -s -- -vPasso 2: Procedura guidata al primo avvio
L’installer stampa un URL, di solito http://YOUR_IP:3000/. Aprilo, crea un utente amministratore con una password lunga e scegli gli indirizzi di ascolto. Per un VPS pubblico, un primo setup sicuro è: Admin Web su 127.0.0.1:3000 (Caddy davanti) o su 80/443 dopo TLS; ascolto DNS su 127.0.0.1:53 più un’interfaccia VPN, non su 0.0.0.0:53. Se ti serve davvero un DNS da LAN per gli amici, preferisci DoH/DoT su 443/853 con autenticazione, non 53/udp aperto.
Scegli server DNS upstream di cui ti fidi. Molti usano https://dns.quad9.net/dns-query o Cloudflare. Attiva le richieste parallele se vuoi un failover più rapido. Accendi le liste di filtri predefinite, poi aggiungine altre dopo: cinquanta liste il primo giorno rendono impossibile il debug quando un sito si rompe.
Passo 3: Reverse proxy e HTTPS per la dashboard
Finite le procedure guidate, AdGuard Home sposta in genere l’interfaccia sulla porta 80. Questo collide con Caddy o Nginx se ospiti anche siti. Uno schema pulito: web di AdGuard Home su 127.0.0.1:8080, DNS su 127.0.0.1:53, Caddy su 443 per dashboard e DoH.
# In AdGuard Home settings, bind the web UI to 127.0.0.1:8080
# Example Caddyfile:
dns.example.com {
reverse_proxy 127.0.0.1:8080
}
# After Caddy is up:
curl -I https://dns.example.comPasso 4: Attivare DNS-over-HTTPS e DNS-over-TLS
Nelle impostazioni di cifratura attiva la cifratura, imposta il nome server su dns.example.com e punta AdGuard Home ai file dei certificati: quelli che Caddy memorizza, o certificati che AdGuard Home ottiene da solo se ascolta su 443. DoH è di solito https://dns.example.com/dns-query. DoT è dns.example.com:853. Se Caddy possiede già 443, lascia che Caddy termini TLS e faccia reverse proxy del percorso DoH verso la porta DoH HTTP in chiaro di AdGuard Home, oppure lascia AdGuard Home in ascolto su 443 e metti la dashboard su un altro sottodominio.
Verifica con un client prima di cambiare ogni dispositivo. Su un portatile con un curl moderno:
curl -H 'accept: application/dns-json' 'https://dns.example.com/dns-query?name=example.com&type=A'
# DoT test (kdig from knot-dnsutils, if installed):
# kdig @dns.example.com +tls-ca +tls-host=dns.example.com example.comPasso 5: Puntare dispositivi reali al tuo resolver
Windows 11 e le build recenti di Android possono usare un modello DoH. iOS può usare un profilo di configurazione o un client che supporta DoH. Anche Firefox e Chromium consentono un URL DoH personalizzato. Per un router di casa, imposta il DNS WAN solo se il router supporta DoT/DoH; altrimenti esegui WireGuard e imposta il DNS sull’IP VPN del VPS così il DNS classico non attraversa mai internet.
- Android 9+: DNS privato (DoT) → dns.example.com
- Firefox: Impostazioni → Rete → DNS over HTTPS → URL personalizzato https://dns.example.com/dns-query
- Dispositivi Apple: un mobileconfig firmato o un’app che supporta DoH/DoT
- Altri VPS: imposta resolv.conf o systemd-resolved sull’IP WireGuard di questa istanza AdGuard
- Evita di impostare l’IP di questo VPS come DNS su reti pubbliche casuali senza cifratura
Passo 6: Firewall — chiudere il DNS ricorsivo aperto
Questa sezione evita una brutta sorpresa. Consenti SSH, HTTPS e, in opzione, 853/tcp per DoT. Non consentire 53/udp da 0.0.0.0/0 salvo un progetto molto specifico, con limite di frequenza e autenticato — e anche in quel caso, probabilmente non dovresti.
ufw allow OpenSSH
ufw allow 443/tcp comment 'dashboard + DoH'
ufw allow 853/tcp comment 'DoT'
# If DNS is only on WireGuard (example iface wg0, 10.8.0.1):
# ufw allow in on wg0 to any port 53 proto udp
ufw enable
ufw status verbose
# Confirm 53 is not public:
ss -tulpn | grep ':53'Filtri, allowlist e client
Parti dal filtro DNS predefinito di AdGuard e da una lista malware. Quando un sito si comporta male, controlla il log delle query e poi aggiungi una regola di allowlist specifica invece di disattivare tutto il blocco. Usa nomi client (per IP o per ClientID nell’URL DoH) per applicare liste più strette a una smart TV e più morbide a un portatile di lavoro. Attiva la ricerca sicura solo se la vuoi davvero: sorprende chi non ha chiesto risultati Google riscritti.
- Log delle query: trova il dominio bloccato, poi mettilo in whitelist se è un falso positivo
- Impostazioni client: blocklist diverse per dispositivo
- Client non ammessi: blocca intervalli che non possiedi
- Limitazione di frequenza: attivala se un giorno esponi più di una manciata di utenti
Risoluzione dei problemi
Se il VPS stesso non riesce a fare apt update, hai rotto il DNS locale liberando la porta 53: metti un resolver statico in resolved.conf come mostrato sopra. Se i dispositivi «hanno internet» ma le pubblicità si caricano ancora, stanno aggirando il tuo DNS (resolver cablati, DoH nel browser o un’app con DNS proprio). Se la dashboard è vuota, stai guardando l’istanza sbagliata o stai ancora colpendo la porta 3000 dopo che la procedura guidata ha spostato l’interfaccia.
- apt fallisce: controlla /etc/resolv.conf e systemd-resolved
- Porta 53 in uso: ss -tulpn, disattiva lo stub listener
- Errori di certificato DoH: l’hostname deve coincidere con il SAN del certificato
- Pubblicità ancora visibili: il DoH del browser verso un altro provider sovrascrive quello del sistema
- RAM alta: log delle query + troppe liste di filtri — riduci le liste e accorcia la ritenzione dei log
Lista di controllo sicurezza
L’interfaccia web è un pannello di amministrazione. Password unica, solo HTTPS e non pubblicare l’URL. Tieni AdGuard Home aggiornato; lo script di installazione e l’interfaccia espongono entrambi un percorso di aggiornamento. Restringi 443 se solo i tuoi dispositivi devono usare DoH: autenticazione HTTP basic sul percorso DoH o accesso solo via WireGuard è molto più sicuro di un resolver aperto famoso.
- Niente 53/udp pubblico
- HTTPS sulla dashboard
- Password amministratore forte, salvata in un gestore di password
- Preferisci WireGuard + DNS interno per i dispositivi di famiglia
- Backup di AdGuardHome.yaml fuori dal server
Consigli
- Fai il backup di /opt/AdGuardHome/AdGuardHome.yaml prima di ogni upgrade
- Usa un sottodominio dedicato; non condividerlo con un CMS non correlato
- Se Caddy gira già, lascia che Caddy possieda 443 e tieni AdGuard Home su localhost
- Documenta l’URL DoH per i tuoi dispositivi: lo dimenticherai
- Abbinalo alle guide di hardening SSH e firewall così il VPS non è solo «sicuro sul DNS»
AdGuard Home su un VPS è lineare: libera la porta 53 in locale, esegui l’installer, completa la procedura guidata con una password amministratore forte, metti l’interfaccia su HTTPS, attiva DoH/DoT e tieni il DNS classico fuori da internet pubblica. Punta i dispositivi al tuo endpoint cifrato o a un IP VPN, parti con un insieme piccolo di filtri e usa il log delle query quando qualcosa si rompe. È un resolver privato che controlli davvero, non un DNS aperto pubblico che farà finire il tuo VPS nelle banche dati di abuso.