· 5 min read · updated August 1, 2026

AdGuard Home is a DNS server that blocks ads, trackers and malware at the network level. You don’t need to install extensions in every browser or on every device: everything that connects to your network (PCs, phones, smart TVs, IoT gear) is protected automatically.

Unlike a browser ad blocker, AdGuard Home filters DNS traffic before it ever reaches the device. That means it also blocks app telemetry, smart TV trackers and known malware domains, even on devices where you can’t install extensions.

On top of that, AdGuard Home supports DNS-over-HTTPS (DoH) and DNS-over-TLS (DoT) natively, encrypting your DNS queries so your ISP can’t see which sites you visit. In this guide we install it with Docker Compose and set it up as the main DNS for your whole network.

Why AdGuard Home and not Pi-hole?

Pi-hole is the classic choice for DNS blocking, but AdGuard Home has some clear advantages in 2026:

AspectAdGuard HomePi-hole
Encrypted DNS (DoH/DoT)Native, no extra configNeeds additional setup
Web interfaceModern and responsiveFunctional but dated
Per-device rulesYes: block more on IoT and less on your PCLimited
DHCP serverBuilt inBuilt in
UpdatesFrequent, a single binaryDepends on several components
Resource usage~30 MB RAM~50 MB RAM

Both are excellent. If you already run Pi-hole and it works for you, there’s no need to switch. If you are starting from scratch, AdGuard Home is the more modern option.

Requirements for installing AdGuard Home with Docker

Step 1: Disable systemd-resolved

On modern Ubuntu/Debian, systemd-resolved takes port 53 by default. AdGuard Home needs that port, so you have to disable it first:

# Check whether systemd-resolved is using port 53
sudo ss -lnp | grep :53
Port 53 taken by systemd-resolved before installing AdGuard Home
systemd-resolved holding port 53: we need to free it up for AdGuard Home

Now disable it:

# Disable systemd-resolved
sudo systemctl disable --now systemd-resolved

# Set a temporary DNS so the server keeps name resolution
sudo rm /etc/resolv.conf
echo "nameserver 1.1.1.1" | sudo tee /etc/resolv.conf

Once AdGuard Home is installed, your server will use its own DNS service.

Step 2: Docker Compose for AdGuard Home

Create the project directory and the docker-compose.yml file:

mkdir -p ~/adguard && cd ~/adguard
services:
  adguardhome:
    image: adguard/adguardhome
    container_name: adguardhome
    restart: unless-stopped
    ports:
      - "53:53/tcp"      # DNS (TCP)
      - "53:53/udp"      # DNS (UDP)
      - "3000:3000/tcp"  # Web panel (initial setup only)
      - "80:80/tcp"      # Web panel (after setup)
      - "443:443/tcp"    # DNS-over-HTTPS
      - "853:853/tcp"    # DNS-over-TLS
    volumes:
      - ./work:/opt/adguardhome/work
      - ./conf:/opt/adguardhome/conf

Bring the container up:

docker compose up -d
Docker Compose successfully deploying AdGuard Home
AdGuard Home deployed correctly with Docker Compose

Note: DNS won’t answer any queries until you complete the setup wizard in the next step. That is normal.

Step 3: Initial AdGuard Home setup

Open http://your-server-ip:3000 in your browser. The setup wizard walks you through these steps:

Welcome screen of the AdGuard Home setup wizard
Welcome screen: click “Get Started”
  1. Listen interfaces: leave the defaults (all interfaces, port 80 for the web UI)
  2. Credentials: create a username and password for the admin panel
Network interface and DNS server configuration in AdGuard Home
Configure the listen interfaces for the web UI (port 80) and the DNS server (port 53)
  1. Upstream DNS: set the DNS servers AdGuard Home will query. Recommended:
    • 1.1.1.1: Cloudflare (fast, private)
    • 9.9.9.9: Quad9 (blocks additional malicious domains)
Creating a username and password for the AdGuard Home panel
Create a strong username and password: you’ll need them to get into the panel

Once setup is done, the panel moves to port 80. Go to http://your-server-ip (no port) and log in with the username and password you just created. Port 3000 is no longer used.

Login screen of the AdGuard Home admin panel
Login screen: use the credentials you created in the previous step
AdGuard Home dashboard showing DNS queries and blocked domains
The dashboard in action: DNS queries resolved and ad/tracker domains blocked automatically

AdGuard Home ships with its own default list, but you can add more for wider coverage. Go to Filters > DNS Blocklists > Add blocklist. AdGuard Home gives you two options: “Choose from the list” (predefined lists organized by category) or “Add a custom list” (a manual URL). The easiest route is “Choose from the list”, where you’ll find the most popular lists already categorized. These are the ones I recommend:

Menu of predefined blocklists in AdGuard Home
Pick lists straight from the built-in menu: no need to copy URLs by hand

Tip: start with the AdGuard list plus OISD. If something stops working (a legitimate site getting blocked), add an exception under Filters > Custom filtering rules using the @@||domain.com^ syntax.

Step 5: Set AdGuard Home as the DNS for your whole network

To get every device using AdGuard Home automatically, change the DNS setting on your router:

  1. Log in to your router’s admin panel
  2. Find the DHCP settings
  3. Under primary DNS, enter the IP of the server running AdGuard Home
  4. Save and reboot the router (or wait for devices to renew their DHCP lease)

From that point on, every device that joins your network gets the AdGuard Home IP as its DNS. Ads, trackers and malware get blocked before they reach the device.

Step 6: Encrypted DNS with AdGuard Home (DoH/DoT)

By default, DNS queries travel in plain text: your ISP can see every domain you visit. To encrypt the queries between AdGuard Home and the upstream servers, go to Settings > DNS Settings > Upstream DNS servers and use encrypted URLs:

# DNS-over-HTTPS (DoH)
https://dns.cloudflare.com/dns-query
https://dns.quad9.net/dns-query

# DNS-over-TLS (DoT)
tls://1dot1dot1dot1.cloudflare-dns.com
tls://dns.quad9.net

After saving, check under Settings > DNS Settings > Test upstreams that the encrypted servers respond correctly.

Verification: is AdGuard Home actually working?

To confirm everything is up and running:

Monitoring AdGuard Home

If you want alerts for when AdGuard Home goes down (which would leave your entire network without DNS), set up a monitor in Uptime Kuma pointing at port 80 on your server.

Leave a Reply

Your email address will not be published. Required fields are marked *