前言
最近编译了openwrt固件,在openwrt上使用了adguardhome+smartDNS+passwall
的dns配置,实现过滤广告+国内dns国外dns分流解析的功能
dns解析路线如下
国内域名解析发起 -> 127.0.0.1#53 (dnsmasq) -> 127.0.0.1#23333 (adguardhome过滤广告域名) -> passwall分流 -> 127.0.0.1#6053(smartdns) -> 223.5.5.5, 114.114.114.114
国外域名解析发起 -> 127.0.0.1#53 (dnsmasq) -> 127.0.0.1#23333 (adguardhome过滤广告域名) -> passwall分流 -> 127.0.0.1#7913(smartdns) -> 代理加速 -> 1.1.1.1#853 (cloudflare DoT)
这样无论哪里的网站访问速度都非常快,而且经过了广告过滤,体验很好
感兴趣可以移步别人写的配置Openwrt 正确配置 AdguardHome 和 smartdns 和 passwall
但唯一有一点很奇怪,当passwall
重启时,dns解析不会经过adguardhome
,但又能正确经过passwall分流
,即便我已经在dnsmasq里设置了上游服务器127.0.0.1#23333
可以看到我在20:44:11
发起了对www.baidu.com
的dns查询,但adguardhome并没有接收到解析,可以推断dnsmasq并没有将adguardhome作为上游服务器
我就在想是不是passwall的脚本的问题,在passwall重启的时候会将dnsmasq的配置文件覆盖
于是尝试service dnsmasq restart
重启dnsmasq以后adguardhome就恢复正常解析了
我的临时解决方式是在crontab里添加定时重启dnsmasq的命令,但实际上治标不治本,今天就来详细解决一下这个问题
解决问题思路及流程
首先找到passwall与dnsmasq相关的配置文件
find / dnsmasq|grep passwall |grep dnsmasq
在这里以直觉判断就是/overlay/upper/usr/share/passwall/helper_dnsmasq_add.lua
这个文件修改了dnsmasq配置
使用vim
查看, 输入?dnsmasq
回车,即可搜索到和dnsmasq相关内容,我这里是直接跳转到最后
这里我已经做了修改了,我修改的内容是
--for s in string.gmatch(dnsmasq_default_dns, '[^' .. "," .. ']+') do
-- conf_out:write(string.format("server=%s\n", s))
--end
conf_out:write("server=127.0.0.1#23333\n")
把原来的添加dns服务器lua语句用--
注释掉,然后添加conf_out:write("server=127.0.0.1#23333\n")
这一句,adguardhome就能在passwall重启后正常作为dnsmasq的上游服务器
尝试重启passwall,并尝试解析dns
service passwall restart
nslookup www.baidu.com
可以看到adguardhome正常解析了,问题就此解决