文章内容已过时不再适用,且存在一些未知BUG,不建议新手使用!

思路

让终端发出的DNS查询优先到AdGuardHome进行广告过滤, 再转发到dnsmasq,SSRP/Passwall会对其劫持后分流,最后再到SmartDNS.
流程.png

配置 SmartDNS 和代理插件

请先正确配置 SmartDNS 与 SSRP/Passwall, 并测试网络正常后再继续操作.

如果你已经按之前的教程成功配置了 SmartDNS 搭配 SSRP/Passwall, 那么可以跳过这一步.
SmartDNS 的设置部分没有需要更改的地方.
没有配置的朋友,可以看这篇文章配置一下.

拉取 AdGuardHome 镜像

这一步可以参考双 AdGuardHome 的教程,区别是只需要一个 AdGuardHome 容器,以及后续需要修改 DNS 服务器监听端口和上游 DNS 服务器.

docker pull adguard/adguardhome:latest

配置持久化目录, 请自行修改对应路径.

mkdir /mnt/mmcblk2p4/AdGuardHome
mkdir /mnt/mmcblk2p4/AdGuardHome/workdir
mkdir /mnt/mmcblk2p4/AdGuardHome/confdir

修改 dnsmasq 端口

前往 DHCP/DNS高级设置 ➡ 将 DNS 服务端口修改为 5336
请保留防火墙中的下面两条命令,

iptables -t nat -A PREROUTING -p udp --dport 53 -j REDIRECT --to-ports 53
iptables -t nat -A PREROUTING -p tcp --dport 53 -j REDIRECT --to-ports 53

这两条命令可以简单理解为,所有 DNS 的查询都重定向到本机的53端口

创建 AdGuardHome 容器

docker run --name adguardhome \
    -v /mnt/mmcblk2p4/AdGuardHome/workdir:/opt/adguardhome/work \
    -v /mnt/mmcblk2p4/AdGuardHome/confdir:/opt/adguardhome/conf \
    --net=host \
    --restart=always \
    -d adguard/adguardhome:latest

登录 AdGuardHome 的网页管理界面, 路由 IP:3000
将网页管理端口修改为 3000
DNS 服务器端口不需要修改, 默认监听 53 端口.
由于上一步中修改了 dnsmasq 的监听端口, 所以这里默认 53 端口不会出现被占用的情况.

AdGuardHome 配置

这里需要注意一点, 上游DNS服务器只能有一个, 就是dnsmasq!
所以上游DNS服务器填写127.0.0.1:5336, 这是 dnsmasq 的监听端口.
adg上游DNS服务器.png

如果填写了除 127.0.0.1:5336 以外的 DNS 服务器,那么碰到域名解析时会直接使用这里面填写的DNS,越过SSRP和SmartDNS。

最后点击测试上游DNS, 能正常运行就完成了.
其他优化设置可以参考之前的双 AdGuardHome 设置.

一些问题

AdGuardHome监听53端口后, DHCP/DNS无法给局域网内设备下发DNS
解决办法:
网络 - 接口 - LAN - 高级设置(下面那个) - DHCP 选项填写6,192.168.1.1
6表示设置DNS服务器地址选项.
192.168.1.1表示DNS服务器地址.
设置完成后, 重新连接网络变会自动下发DNS
(如果不会在系统设置中重新连接网络, 可以重启/拔网线/重连WIFI)
DNS下发.png

参考

SmartDNS Github 仓库

最后修改:2023 年 01 月 10 日
如果觉得我的文章对你有用,请随意赞赏