AdGuard Home is a powerful DNS-based ad blocker that filters unwanted traffic across your entire network. By running it on my Raspberry Pi 5 with OpenMediaVault (OMV), I gained:
- Network-wide ad, malware and tracker blocking
- DNS-over-HTTPS (DoH) for encrypted queries
- Home Assistant integration for monitoring and control
This guide walks through how I set it up on OMV using Docker and configured it for reliable home use.

1. Deploy AdGuard Home via Docker Compose
I used Portainer for stack deployment, but you can also use docker-compose.
docker-compose.yml:
services:
adguardhome:
container_name: adguardhome
image: adguard/adguardhome:latest
restart: unless-stopped
ports:
- "53:53/tcp" # DNS TCP
- "53:53/udp" # DNS UDP
- "80:80/tcp" # Web UI & API
- "443:443/tcp" # Optional HTTPS for Web UI
volumes:
- /srv/dev-disk-by-uuid-xxxx/adguard/conf:/opt/adguardhome/conf
- /srv/dev-disk-by-uuid-xxxx/adguard/work:/opt/adguardhome/work
environment:
- TZ=Africa/Johannesburg
2. Free Port 53
OMV (Debian-based) uses systemd-resolved which binds port 53.
To let AdGuard Home run, I disabled the stub listener:
sudo nano /etc/systemd/resolved.conf
Set:
DNS=192.168.3.110 1.1.1.1 8.8.8.8
DNSStubListener=no
Then:
sudo systemctl restart systemd-resolved
3. Set Up Router DNS
In my router:
- Primary DNS:
<your-omv-ip> - Secondary DNS (Fallback):
1.1.1.1(Cloudflare)
This routes all network DNS requests through Adguard Home and falls back to Cloudflare in case the OMV is unavailable.
4. Configure AdGuard Home
Access the Web UI:
4. http://<your-omv-ip>:3000
# This is for the initial setup. Thereafter you should be able to use port 80.
Key settings:
- Enable Protection
- Upstream DNS:
https://dns.quad9.net/dns-queryhttps://dns.cloudflare.com/dns-queryhttps://dns.google/dns-query
- Enable Logging and Statistics:
querylog:
interval: 168h # keep 7 days of queries
statistics:
interval: 1h # refresh stats hourly
5. Enable API for Home Assistant
In /opt/adguardhome/conf/AdGuardHome.yaml:
api:
enabled: true
bind: 0.0.0.0:80
Then restart:
docker restart adguardhome
Now Home Assistant can connect using:
- Host:
http:<your-omv-ip> - Port
80 - User: Your AdGuard UI user
6. Verify Everything Works
- From any device:
nslookup google.com 192.168.3.110
- From OMV host:
dig google.com @127.0.0.1
- Check Web UI → Query Log → Should show live traffic

7. Key Wins
- ✅ Network-wide ad blocking with minimal Pi load
- ✅ Encrypted upstream DNS (DoH)
- ✅ Integrated into Home Assistant
- ✅ Real-time query logging and hourly statistics