PassWall配合AdGuardHome使用GFW规则实现DNS分流
提示
此方案无法完全规避dns污染,最终还是选择了双adg配合pw实现的内外分流,经测试可以完美规避dns污染。以下方案可以做到简单的dns防污染和去广告,但无法完全规避dns污染,优点就是有具体的客户端ip显示。
背景
有一天,我突然想要查看AdGuardHome的数据记录。当我的软路由正在使用PassWall时,发现和AdGuardHome的配合并不好,基本上DNS被污染,无法正常强国。
问题描述
在AdGuardHome中将其设置为dnsmasq的上游服务器时,发现AdGuardHome的数据记录居然都是127.0.0.1(localhost),这样就无法看到具体哪个客户端访问了哪些内容。
通过查阅相关资料,发现可以使用重定向的方式记录正常的IP访问情况。但在使用53端口替换dnsmasq的情况下,软路由本身的dnsmasq功能无法正常使用,甚至在软路由shell中无法进行DNS解析,导致PassWall无法测速。
解决方案
最终选择了第二种方式:重定向53端口到AdGuardHome。在这种情况下,各方面功能都正常,但PassWall的强国又无法使用了。
经过再次查阅资料发现,PassWall依赖于dnsmasq,所以设置了重定向后会导致一些莫名其妙的问题。解决办法是将PassWall中的远程DNS改为通过UDP请求,地址为AdGuardHome的地址,例如:192.168.1.1:5335
。
配置AdGuardHome
为了防止DNS被污染,需要在AdGuardHome中配置GFW列表排除国内信息。AdGuardHome自带加入GFW列表功能,但这种情况下会将上游DNS服务器撑满,提示65535错误。
官方文档建议,如果有很多上游DNS服务器规则,推荐使用upstream_dns_file
来解决这个问题。经过测试,这个方法确实可行,基本完美解决了问题。
详细设置
以下是详细设置步骤图:
1.先ssh到软路由将脚本上传至/root下,手动执行一遍,添加定时任务,后续步骤如图即可
脚本下载
效果:
基本完美!
以下是附赠的去广告规则:
黑名单规则:
https://anti-ad.net/easylist.txt
https://fastly.jsdelivr.net/gh/mphin/adguardhome_rules@main/Blacklist.txt
白名单规则:
https://fastly.jsdelivr.net/gh/mphin/adguardhome_rules@main/Allowlist.txt
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。