前言
OpenWrt自带了Dnsmasq作为默认的DNS服务器以及DHCP服务器,但我个人认为Dnsmasq的功能较好的无法满足我的需求,故使用AdGuardHome,本文就分享一下我是如何配置AdGuardHome的(以下简称adgh)。
我使用AdGuardHome监听53端口,Dnsmasq监听6053解析。
局域网域名的解析通过配置AdGuardHome交给Dnsmasq,中国大陆域名使用dnsmasq-china-list设置为ISP的DNS解析,而其余域名则使用DoH、DoQ进行解析,防止DNS污染和劫持。
解释一下为什么要用运营商的DNS:
参考Sukkaw的这篇文章可知,运营商DNS能提供最好的国内CDN解析,但运营商的DNS经常会有DNS污染和劫持,因此使用国内连通性较好的DoH、DoQ等加密协议来解析其余的域名。
选择合适的公共DNS服务器
前几天,我看到了LINUX.DO
论坛上的这篇文章,得知了dns-benchmark这款工具。
它可以帮助我们对全球的公共DNS服务器进行测速,并且使用WebUI来统计数据,从而选择出最适合自己的DNS服务器,使用方法参考仓库的README,本文不再赘述。
配置dnsmasq-china-list
首先确保系统中安装了make
和git
,从GitHub获取dnsmasq-china-list
的源代码:
git clone --depth=1 https://github.com/felixonmars/dnsmasq-china-list.git
然后使用make
命令生成配置:
make SERVER="ispdns1 ispdns2" adguardhome
会得到accelerated-domains.china.adguardhome.conf
、apple.china.adguardhome.conf
、google.china.adguardhome.conf
三个文件。
接着新建一个custom.adguardhome.conf
文件,在其中写入用于查询其余域名的加密DNS服务器以及局域网域名的DNS服务器:
[//]udp://127.0.0.1:6053
[/lan/]udp://127.0.0.1:6053
https://dns10.quad9.net/dns-query
https://dns.flymc.cc/dns-query
quic://unfiltered.adguard-dns.com
然后我们需要合并这几个配置文件供adgh使用,(我个人不使用google.china.adguardhome.conf
)。
(cat accelerated-domains.china.adguardhome.conf; echo ""; cat apple.china.adguardhome.conf;echo ""; cat custom.adguardhome.conf) > dns_mapping_adguardhome.conf
安装AdGuardHome
OpenWrt官方软件库中就已经自带了adguardhome
,只需使用opkg
命令安装即可:
opkg update
opkg install adguardhome
安装后默认会自动启动adgh服务,访问http://routerip:3000
这个地址即可访问到AdGuardHome的Dashboard。
但在此之前我们需要先更改Dnsmasq的监听端口,选择一个未被占用的端口之后保存并应用就可以了,我这边用的是6053。
之后回到AdGuardHome Dashboard,设置DNS监听的端口为53,WebUI监听端口也是选择一个未占用的端口,我用的是3030。
在AdGuardHome中的设置–DNS设置中,将上游服务器模式设置为负载均衡,设置Bootstrap DNS为国内的明文UDP,设置私人反向DNS服务器为127.0.0.1:6053
。
由于dnsmasq-china-list
的域名过多,在adgh网页端设置分流很不方便,因此我们从文件加载上游服务器,这里adgh的网页端无法指定配置文件路径,我们只能修改adgh的配置文件。
首先SSH登录到OpenWrt,编辑adgh的配置文件:
vim /etc/adguardhome.yaml
修改如下部分:
dns:
upstream_dns_file: /etc/dns_mapping_adguardhome.conf
然后使用SFTP将我们生成好的分流配置上传到OpenWrt的/etc
目录即可。
之后只需在adgh网页端的设置–DNS设置–上游DNS服务器中点击测试上游,没有报错就可以保存了。