请注意,本文编写于 696 天前,最后修改于 76 天前,其中某些信息可能已经过时。
文章内容已过时不再适用,且存在一些未知BUG,不建议新手使用!
思路
让终端发出的DNS查询优先到AdGuardHome进行广告过滤, 再转发到dnsmasq,SSRP/Passwall会对其劫持后分流,最后再到SmartDNS.
配置 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 的监听端口.
如果填写了除
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)
16 条评论
我用Passwall上国外网站域名会在国内和国外adguard分别解析一次,虽然网站可以访问但是似乎速度会受到影响。怎么办
这篇文章的玩法,我已经很久没在用了,可能很多地方都不适用了,毕竟那些软件都在更新
ssr里面设置的不走代理的域名反而无法访问,删除后反而可以访问,目前看也没有跑代理流量,不知道什么原因,完全按照您的设置做的。不知道哪里没设置好
这篇文章的玩法,我已经很久没在用了,可能很多地方都不适用了,毕竟那些软件都在更新
很奇怪的是TG app无法登录,其他Google等测试正常。不知道哪里设置
6666
博主你好,参考了这篇文章我也配置了好了。有个疑问是,在adguard中的“上游DNS服务器”里面为啥填写的是dnsmasq的127.0.0.1:5336,为啥不是直接转发到smartdns的127.0.0.1:5334(国内组)。
虽然我试了这2个我这里好像都可以正常上网,但是还想知道为什么。
谢谢了
一开始那个流程图里已经写了呀...
ssrp/passwall是要劫持dnsmasq之后进行分流的,然后把国内/直连列表转给smartdns国内组,国外/代理列表转给smartdns国外组。
你把AdGuardHome全部直接转发给smartdns国内组,越过dnsmasq,那国外的域名也是用的国内解析。。。
那样DNS解析就是没有走梯子的代理。
不过现在大多是用TCP/SNI阻断,国内污染不多,所以网站可以正常打开,但如果碰到污染网站不就打不开了。

明白了。感谢博主回复
1、我对端口的上下游不是很理解,回头按你的设置重新设置一下端口。
2、非常后悔多开甜糖时把原先的缓存给干掉了,100多G啊,国庆节期间缓存到的,两个容器就可以跑200M带宽。
经过观察我发现,同时开5个容器,效率会很低,即使没有共用缓存。今天我把5个容器的缓存合并了一下,只跑一个容器,貌似比5个容器还好一点,上下行都积极了不少。我打算等这个容器缓存达到100G之后(现在大概50G)再开新的容器。贪多嚼不烂啊。
1、我其他设置一样,就是把DHCP/DNS ➡ 高级设置 ➡ 将 DNS 服务端口保持53,adguard监听端口设置为54,在adguard下面设置:重定向53端口到adguardhome了。这样么做会得不到正确的解析吗? 这么做的原因是我的openwrt是旁路由,由主路由做的DHCP,DNS指向旁路由的网关了。
2、多开甜糖我也做了,没有共享缓存,已经观察了一礼拜了,在正常运行但是总跑不满带宽。移动宽带,上行500M的。端口转发、DMZ、UPNP也全部设置了,不知道是什么问题。之前开了2个容器的时候能跑200M带宽,删除了重新配置了5个只能跑60M带宽了。线路测速没问题。
还有一种可能就是OpenWrt的多拨策略分流插件性能不够,导致你跑的没之前高

如果你之前是用 高恪、爱快之类路由系统的话
关于甜糖的问题
应该是由于删除后重新配置时没有映射之前容器的缓存,甜糖给的调度没之前高,所以跑不起来
(现在甜糖很少能跑满了,全看上游需求和调度)
那篇文章原本是给那些第一次用的openwrt多拨和甜糖多开的,所以docker命令里并没写重新创建容器时把之前容器的缓存映射进入新的容器中
(同时我这里用共享缓存也是跑不起来,可能就是甜糖下线发展太快,签约的上游却没有增加更多的需求,从之前的供不应求变成现在的供大于求,给人分配流量的自然就下来了)
现在更新了文章,加上了共享缓存的甜糖容器创建方法,需要的话可以去看看

或者也可以等之后缓存上了来,应该可以跑满
dnsmsq的默认用的就是53端口。。。

你adguard设置54端口,然后又把53端口重定向到adguard,算是迷惑性行为了。。。
即使是OpenWrt做旁路由,主路由进行DHCP,给内网分配旁路由做DNS,也不用这么弄呀
直接按文章里写的弄就行
不过我今晚会发一篇新的文章,使用mosdns可以完美代替这个进行国内外分流解析和广告过滤