Reading time: ~12 minutes Audience: Homelabbers wanting a modern, user-friendly DNS ad blocker
What Is AdGuard Home?
Overview
AdGuard Home is a network-wide DNS ad blocker that blocks ads, trackers, and adult content at the DNS level. It is similar to Pi-hole but offers a more modern web UI, better parental controls, native DNS-over-HTTPS (DoH) and DNS-over-TLS (DoT) support, and built-in DHCP server functionality.
Key Benefits
| Benefit | Detail |
|---|---|
| Modern UI | Clean, responsive web interface with dark mode |
| Encrypted DNS | Native DoH and DoT support without extra containers |
| Parental controls | Block adult sites, enforce safe search, schedule internet access |
| Query log | Fast, filterable log with client identification |
| Statistics | Per-client stats, top queried domains, top blocked domains |
| Blocking modes | Default hosts, NXDOMAIN, Null IP, or custom IP |
| DNS rewrites | Local DNS records (split-horizon DNS) |
| Upstreams | Easy load balancing and fallback DNS resolvers |
Prerequisites
Hardware Requirements
- Any device running Docker or Linux (mini PC, Raspberry Pi, NAS, VM)
- 256MB RAM minimum (512MB recommended)
- 100MB storage for the binary + log space
Software Requirements
- Docker Engine 24.x+ or a Debian 12/Ubuntu 24.04 host
- Router access to change DNS settings
- Port 3000 free (for initial setup) and port 53 (for DNS)
Knowledge Prerequisites
- Basic Docker or Linux commands
- Router admin panel access
- DNS concepts
Step 1: Install AdGuard Home with Docker Compose
Objective
Deploy AdGuard Home as a persistent container with proper volumes and network settings.
Step-by-Step Instructions
- Create the project directory:
mkdir -p ~/docker/adguardhome && cd ~/docker/adguardhome
mkdir -p workdir confdir
- Create
docker-compose.yml:
services:
adguardhome:
container_name: adguardhome
image: adguard/adguardhome:latest
ports:
- "53:53/tcp"
- "53:53/udp"
- "8080:80/tcp"
- "8443:443/tcp"
- "3000:3000/tcp"
volumes:
- ./workdir:/opt/adguardhome/work
- ./confdir:/opt/adguardhome/conf
restart: unless-stopped
networks:
- adguard-net
networks:
adguard-net:
driver: bridge
- Deploy:
docker compose up -d
- Complete the initial setup wizard:
- Open
http://your-server-ip:3000 - Set admin username and a strong password
- Choose interface and port (keep
0.0.0.0:53for DNS,80for web UI) - Set upstream DNS resolvers (Cloudflare, Quad9, or custom)
-
Create filters and click “Open Dashboard”
-
After setup, the web UI moves to port 80:
- Access at
http://your-server-ip:8080
Step 2: Configure DNS and Upstream Resolvers
Objective
Set up reliable upstream DNS with encryption and fallback options.
Step-by-Step Instructions
- Go to Settings → DNS settings
- Upstream DNS servers:
# DNS-over-HTTPS (DoH)
https://dns.cloudflare.com/dns-query
https://dns.quad9.net/dns-query
# DNS-over-TLS (DoT)
tls://dns.google
# Plain DNS (fallback)
1.1.1.1
1.0.0.1
- Bootstrap DNS servers:
1.1.1.1
1.0.0.1
- Rate limiting: 20 requests per second per client
- Enable DNSSEC validation
- Save and apply
Step 3: Configure DNS Rewrites (Local DNS)
Objective
Point local hostnames to internal IPs so you can access services by name (e.g., http://proxmox.local).
Step-by-Step Instructions
- Go to Filters → DNS rewrites
- Add entries:
| Domain | Answer |
|---|---|
proxmox.local |
192.168.1.10 |
nas.local |
192.168.1.20 |
pihole.local |
192.168.1.30 |
jellyfin.local |
192.168.1.40 |
- Test:
nslookup proxmox.local 192.168.1.10
Step 4: Router Configuration
Objective
Point your entire network to AdGuard Home for DNS.
Step-by-Step Instructions
Option A: Router DHCP (Recommended)
1. Log into your router (192.168.1.1 or 192.168.0.1)
2. Find DHCP Server or LAN Settings
3. Set Primary DNS to AdGuard Home IP (e.g., 192.168.1.10)
4. Secondary DNS: leave blank or use a backup AdGuard instance
5. Save and reboot the router
Option B: AdGuard Home DHCP Server
If your router is locked (ISP-provided), let AdGuard Home handle DHCP:
1. Go to Settings → DHCP settings
2. Enable DHCP server
3. Set range: 192.168.1.100 to 192.168.1.200
4. Set gateway: 192.168.1.1
5. Set subnet mask: 255.255.255.0
6. Disable DHCP on your router
7. Renew all client leases
Pro Tips
Tip 1: Enable DNSSEC
In Settings → DNS settings, enable “DNSSEC validation.” This prevents DNS spoofing and ensures domain authenticity.
Tip 2: Use Per-Client Filtering
Go to Settings → Client settings and add clients by IP or MAC. You can assign different filtering rules to kids’ devices vs. adult devices.
Tip 3: Enable Safe Search
In Filters → DNS blocklists, enable the safe search option. This forces Google, Bing, YouTube, and DuckDuckGo to use safe search modes.
Tip 4: Add Custom Filtering Rules
AdGuard Home supports custom rules in AdGuard syntax:
# Block a specific domain
||example.com^
# Block a subdomain
||ads.example.com^
# Allow an exception
@@||safe.example.com^
# Redirect a domain
192.168.1.10 proxmox.local
Tip 5: Backup Your Configuration
# Backup the config directory
cd ~/docker/adguardhome
tar czvf adguard-backup-$(date +%F).tar.gz confdir workdir
# Restore: extract and restart container
tar xzvf adguard-backup-2026-06-05.tar.gz
docker compose restart
Troubleshooting Common Issues
Problem 1: “Dashboard Not Accessible After Setup”
Cause: Port 3000 is only for the initial setup wizard. After configuration, the UI runs on port 80 inside the container (mapped to 8080 on host).
Fix: Access http://your-server-ip:8080 after setup.
Problem 2: “DNS Queries Not Being Blocked”
Cause: Router not using AdGuard Home as DNS, or devices using hardcoded DNS.
Fix: - Check router DNS settings - For devices with hardcoded DNS (some Android TVs, Chromecast), use AdGuard Home’s “force safe search” or block port 53 outbound on your firewall
Problem 3: “Port 53 Already in Use”
Cause: systemd-resolved or another DNS service is bound to port 53.
Fix:
systemctl stop systemd-resolved
systemctl disable systemd-resolved
rm -f /etc/resolv.conf
ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf
Conclusion
Summary
AdGuard Home is a modern, powerful DNS ad blocker with built-in encrypted DNS, parental controls, and local DNS rewriting. The Docker Compose setup takes under 10 minutes and immediately improves privacy and ad blocking across your entire network.
Next Steps
- Compare with Pi-hole to see which fits your style
- Set up Unbound as a recursive resolver for complete DNS independence
- Monitor your network with Prometheus and Grafana
Affiliate Opportunities
- Beelink Mini S12 Pro: Mini PC for running AdGuard Home + other services
- TP-Link Omada router: Router with flexible DNS/DHCP settings
Internal Linking Strategy
intro→pihole-vs-adguard-homefor blocker comparisonstep-2→pihole-unbound-dnsfor recursive DNS setupconclusion→docker-compose-for-beginnersfor Docker basics
CTA
- [comment] Are you using AdGuard Home or Pi-hole? Share your filtering stats and favorite blocklists!
- [newsletter] Subscribe for weekly privacy and DNS setup guides.