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.

AdGuard-Home

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-query
    • https://dns.cloudflare.com/dns-query
    • https://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

  1. From any device:
nslookup google.com 192.168.3.110
  1. From OMV host:
dig google.com @127.0.0.1
  1. Check Web UI → Query Log → Should show live traffic

AdGuardHome

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