在路由器上运行 AdGuard Home,全屋设备的 DNS 请求都会经过它:广告域名本地掐掉,国内域名走运营商解析,国外域名交给代理程序。下面是从安装、规则配置到国内外分流的完整落地过程。
为什么值得部署
AdGuard Home 是 DNS 级别的拦截服务,典型用途有三类:广告拦截、隐私保护、家长控制,并且跨平台运行。装在路由器上意味着所有接入设备默认生效,不需要逐台配置系统 DNS。


安装与开机自启
把执行文件上传到 /data/AdGuardHome 目录,加执行权限并注册为服务:
# 把执行文件上传到 /data/AdGuardHome 目录下
mkdir -p /data/AdGuardHome/
cd /data/AdGuardHome/
# 添加执行权限
chmod +x AdGuardHome
# 执行安装,安装完成则自动启动
./AdGuardHome -s install
ss -tnlp|grep 3000

管理页面监听 3000 端口,DNS 服务监听 5353。要让原本发往 53 的查询都进来,需要添加端口重定向规则:
iptables -t nat -A PREROUTING -p tcp --dport 53 -j REDIRECT --to-ports 5353
iptables -t nat -A PREROUTING -p udp --dport 53 -j REDIRECT --to-ports 5353
ip6tables -t nat -A PREROUTING -p tcp --dport 53 -j REDIRECT --to-ports 5353
ip6tables -t nat -A PREROUTING -p udp --dport 53 -j REDIRECT --to-ports 5353
# 检查规则是否添加成功
iptables -t nat -C PREROUTING -p tcp --dport 53 -j REDIRECT --to-ports 5353 && echo "规则存在" || echo "规则不存在"
iptables -t nat -C PREROUTING -p udp --dport 53 -j REDIRECT --to-ports 5353 && echo "规则存在" || echo "规则不存在"
ip6tables -t nat -C PREROUTING -p tcp --dport 53 -j REDIRECT --to-ports 5353 && echo "规则存在" || echo "规则不存在"
ip6tables -t nat -C PREROUTING -p udp --dport 53 -j REDIRECT --to-ports 5353 && echo "规则存在" || echo "规则不存在"
# 也可以使用下面的命令检查规则是否存在
iptables -t nat -v --list 和 ip6tables -t nat -v --list


路由器重启后服务和 iptables 规则都会丢失,把它们写进开机脚本 auto_ssh.sh:
~# vi /data/auto_ssh/auto_ssh.sh
/data/AdGuardHome/AdGuardHome -s install
/data/AdGuardHome/AdGuardHome -s start
iptables -t nat -A PREROUTING -p tcp --dport 53 -j REDIRECT --to-ports 5353
iptables -t nat -A PREROUTING -p udp --dport 53 -j REDIRECT --to-ports 5353
ip6tables -t nat -A PREROUTING -p tcp --dport 53 -j REDIRECT --to-ports 5353
ip6tables -t nat -A PREROUTING -p udp --dport 53 -j REDIRECT --to-ports 5353

广告规则选择
过滤规则同时启用 OISD Blocklist Full 和 AdRules 系列规则,前者覆盖广、后者针对中文广告优化,搭配使用兼顾误杀率与覆盖率。命中统计可以在管理界面直接查看。



国内外域名分流
思路是把 dnsmasq-china-list 的国内域名清单用 sed 转换成规则文件 dnsrule.txt,国内域名指定本地解析,其余域名交给代理。转换脚本 china-list.sh:
cd /data/AdGuardHome/
# 编写脚本
vim china-list.sh
#!/bin/sh
# 国内域名走dnsmas
CHINADNS=127.0.0.1
LIST="$(dirname $0)/dnsrule.txt"
# 国外域名走clash进行代理
cat <<EOF > ${LIST}
127.0.0.1:1053
EOF
# 下载国内域名列表并替换配置内容
curl -Os https://ghproxy.com/https://raw.githubusercontent.com/felixonmars/dnsmasq-china-list/master/accelerated-domains.china.conf &&
sed -i -E "s#server=(/.+/)114.114.114.114#[1]${CHINADNS}#g" accelerated-domains.china.conf &&
cat accelerated-domains.china.conf >> ${LIST}
rm -f accelerated-domains.china.conf
# 执行脚本
chmod +x china-list.sh
./china-list.sh
然后在 AdGuardHome.yaml 里指定上游规则文件:
vim /data/AdGuardHome/AdGuardHome.yaml
upstream_dns_file: "/data/AdGuardHome/dnsrule.txt"


代理侧同样要感知 DNS。修改 clash 的 mark 脚本,把 dns_port 指向 5353:
root@XiaoQiang:~# vim /data/clash/mark
dns_port=5353
user.yaml 中 dns 段的关键配置:监听 0.0.0.0:1053,上游 nameserver 指向 127.0.0.1:53,fallback 使用 DoH/DoT 列表,default-nameserver 负责引导解析;fake-ip 模式下用 fake-ip-filter 放行局域网与常见域名,fallback-filter 用 geoip CN 判定命中国内结果即丢弃 fallback;redir_host 里包含需要直连的域名:
root@XiaoQiang:~# vim /data/clash/user.yaml
dns:
# 设置 true 以启用 dns(默认为 false)
enable: true
# 默认值为false
ipv6: false
# 查找主机并返回 IP 记录
use-hosts: true
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.1/16
listen: 0.0.0.0:1053
# 上游 DNS 服务器.DoH或DoT的流量不会通过代理,所有流量都将定向到服务器。
nameserver:
- 127.0.0.1:53
# 上游 DNS 服务器,与nameserver并发请求,GEOIP国家不是CN时使用的DNS
fallback:
- https://1.0.0.1/dns-query
- tls://dns.google
- https://doh.opendns.com/dns-query
- tls://1.1.1.1:853
- tls://8.8.8.8:853
# 解析dns nameserver主机,填写纯IP(又称为Bootstrap DNS)
# Bootstrap DNS 服务器用于解析您指定为上游的 DoH / DoT 解析器的 IP 地址
default-nameserver:
- 223.6.6.6
- 119.29.29.29
- 1.0.0.1
- 208.67.220.220
- 8.8.4.4
# fake-ip 白名单,又名 Always Real IP
fake-ip-filter:
- "*.lan"
- "time.windows.com"
- "time.nist.gov"
- "time.apple.com"
- "time.asia.apple.com"
- "*.ntp.org.cn"
- "*.openwrt.pool.ntp.org"
- "time1.cloud.tencent.com"
- "time.ustc.edu.cn"
- "pool.ntp.org"
- "ntp.ubuntu.com"
- "ntp.aliyun.com"
- "ntp1.aliyun.com"
- "ntp2.aliyun.com"
- "ntp3.aliyun.com"
- "ntp4.aliyun.com"
- "ntp5.aliyun.com"
- "ntp6.aliyun.com"
- "ntp7.aliyun.com"
- "time1.aliyun.com"
- "time2.aliyun.com"
- "time3.aliyun.com"
- "time4.aliyun.com"
- "time5.aliyun.com"
- "time6.aliyun.com"
- "time7.aliyun.com"
- "*.time.edu.cn"
- "time1.apple.com"
- "time2.apple.com"
- "time3.apple.com"
- "time4.apple.com"
- "time5.apple.com"
- "time6.apple.com"
- "time7.apple.com"
- "time1.google.com"
- "time2.google.com"
- "time3.google.com"
- "time4.google.com"
- "music.163.com"
- "*.music.163.com"
- "*.126.net"
- "musicapi.taihe.com"
- "music.taihe.com"
- "songsearch.kugou.com"
- "trackercdn.kugou.com"
- "*.kuwo.cn"
- "api-jooxtt.sanook.com"
- "api.joox.com"
- "joox.com"
- "*.qq.com"
- "y.qq.com"
- "*.y.qq.com"
- "streamoc.music.tc.qq.com"
- "mobileoc.music.tc.qq.com"
- "isure.stream.qqmusic.qq.com"
- "dl.stream.qqmusic.qq.com"
- "aqqmusic.tc.qq.com"
- "amobile.music.tc.qq.com"
- "*.xiami.com"
- "*.music.migu.cn"
- "music.migu.cn"
- "*.msftconnecttest.com"
- "*.msftncsi.com"
- "localhost.ptlogin2.qq.com"
- "*.*.*.srv.nintendo.net"
- "*.*.stun.playstation.net"
- "xbox.*.*.microsoft.com"
- "*.*.xboxlive.com"
- "proxy.golang.org"
- "*.sgcc.com.cn"
- "*.alicdn.com"
- "*.aliyuncs.com"
- "*.douyin.com"
fallback-filter:
geoip: true
geoip-code: CN


生效与注意事项
配置修改完成后重启服务:
cd /data/AdGuardHome/
./AdGuardHome -s restart


- 分流脚本依赖 sed 等基础命令,精简固件缺少工具链时先补齐再执行。
- 5353 与 1053 分工别搞混:AdGuard Home 对局域网提供 DNS,clash 在 1053 上做二次解析,互相指向时注意上游顺序。
- iptables 与 ip6tables 的重定向规则务必 TCP/UDP 成对添加,只加 TCP 会导致大量应用绕过拦截。
- 排障时优先看 AdGuard Home 的查询日志,确认域名走到了哪一层,再动配置文件。

















暂无评论内容