AdGuard Home 部署指南:自建 DNS 服务器拦截广告和追踪

AdGuard Home 是一个网络层面的广告拦截 DNS 服务器。它的原理是把广告域名的 DNS 查询直接返回空响应,让设备上的广告请求无法发出。和浏览器插件不同,AdGuard Home 在 DNS 层面拦截,覆盖范围包括所有设备、所有应用——包括手机 App 里的广告、智能电视里的追踪器。

和 Pi-hole 的区别

功能 AdGuard Home Pi-hole
配置界面 更现代 较传统
DNS-over-HTTPS ✅ 内置 需额外配置
DNS-over-TLS ✅ 内置 需额外配置
家长控制
规则语法 更丰富 较简单
安装难度 更简单 中等

服务器配置

AdGuard Home 很轻量,1 核 512MB 就够一个家庭或小团队使用。我把它部署在 雨云服务器 rainyun+com 的入门款机型上,和其他几个服务共享一台服务器,内存占用只有 50MB 左右。注册填优惠码 2026off 领 5 折优惠券。

安装 AdGuard Home

方法一:一键安装脚本

curl -s -S -L https://raw.githubusercontent.com/AdguardTeam/AdGuardHome/master/scripts/install.sh | sh -s -- -v

安装完成后会自动启动并注册为系统服务。

方法二:手动安装

cd /opt
wget https://github.com/AdguardTeam/AdGuardHome/releases/latest/download/AdGuardHome_linux_amd64.tar.gz
tar -xvzf AdGuardHome_linux_amd64.tar.gz
cd AdGuardHome
sudo ./AdGuardHome -s install

方法三:Docker

mkdir -p /opt/adguard/{work,conf}

docker run -d \
  --name adguard-home \
  -p 3000:3000/tcp \
  -p 53:53/tcp \
  -p 53:53/udp \
  -p 853:853/tcp \
  -v /opt/adguard/work:/opt/adguardhome/work \
  -v /opt/adguard/conf:/opt/adguardhome/conf \
  --restart unless-stopped \
  adguard/adguardhome:latest

初始配置

访问 http://服务器IP:3000 进行初始设置:

  1. 选择管理界面端口(默认 3000)和 DNS 监听端口(默认 53)
  2. 创建管理员账号密码
  3. 完成设置向导

开放防火墙端口

sudo ufw allow 53/tcp    # DNS(TCP)
sudo ufw allow 53/udp    # DNS(UDP)
sudo ufw allow 853/tcp   # DNS-over-TLS
sudo ufw allow 3000/tcp  # Web UI

如果服务器的 53 端口已被 systemd-resolved 占用:

# 查看占用情况
sudo ss -tlnp | grep :53

# 禁用 systemd-resolved 的 DNS 监听
sudo nano /etc/systemd/resolved.conf
# 添加:DNSStubListener=no

sudo systemctl restart systemd-resolved

配置上游 DNS

在 AdGuard Home 设置 → DNS 设置 → 上游 DNS 服务器:

# 推荐配置(DoH 加密)
https://dns.alidns.com/dns-query     # 阿里云 DoH
https://doh.pub/dns-query            # 腾讯 DoH

# 备用
tls://dns.alidns.com                 # 阿里云 DoT
223.5.5.5                            # 阿里云明文(备用)

添加广告拦截规则

在 AdGuard Home 过滤器 → DNS 封锁列表 → 添加封锁列表:

推荐规则列表

规则来源 地址
AdGuard DNS filter https://adguardteam.github.io/HostlistsRegistry/assets/filter_1.txt
EasyList https://easylist.to/easylist/easylist.txt
EasyPrivacy https://easylist.to/easylist/easyprivacy.txt
中文广告过滤 https://anti-ad.net/easylist.txt
追踪器列表 https://adguardteam.github.io/HostlistsRegistry/assets/filter_4.txt

国内推荐(减少误杀)

  • https://anti-ad.net/adguard.txt:专为中文互联网优化的广告过滤规则

客户端配置

方法一:路由器配置(覆盖所有设备)

在路由器的 DNS 设置里,把主 DNS 改为服务器 IP,所有连接的设备自动走 AdGuard Home 过滤。

方法二:手动配置(单台设备)

Windows:网络适配器 → DNS 服务器:服务器IP

Android:设置 → 网络 → Wi-Fi → 修改网络 → DNS:服务器IP

iOS(使用配置文件)

# 在服务器上生成 DNS-over-TLS 配置文件
cat > /tmp/dns-profile.mobileconfig << 'EOF'
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "...">
<plist version="1.0">
<dict>
  <key>PayloadContent</key>
  <array>
    <dict>
      <key>DNSSettings</key>
      <dict>
        <key>DNSProtocol</key>
        <string>TLS</string>
        <key>ServerAddresses</key>
        <array>
          <string>服务器IP</string>
        </array>
        <key>ServerName</key>
        <string>你的域名</string>
      </dict>
    </dict>
  </array>
</dict>
</plist>
EOF

配置 HTTPS/DOH 访问

配合 Caddy 让客户端通过 HTTPS 访问 AdGuard Home 管理界面并支持 DoH:

dns.你的域名.com {
    reverse_proxy localhost:3000
}

然后在 AdGuard Home 设置里配置 DNS-over-HTTPS 地址:https://dns.你的域名.com/dns-query

白名单(防止误拦截)

如果某些网站被误拦截,可以添加白名单:

过滤器 → DNS 允许列表 → 添加

或在仪表盘的查询日志里,找到被拦截的域名,点击「取消封锁」。

统计和日志

AdGuard Home 提供实时统计:

  • 每日查询量
  • 拦截数量和比例(通常 20–40%)
  • 被拦截最多的域名(通常都是广告追踪域名)
  • 最活跃的客户端

AdGuard Home 是投入产出比最高的网络工具之一——部署一次,所有设备、所有应用的广告追踪请求都被过滤,不需要在每台设备上分别安装插件。部署在雨云服务器上,家里配置路由器 DNS 指向服务器,外出时配置手机 DoH,随时随地都有广告拦截保护。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐