前言

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

首先确保系统中安装了makegit,从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.confapple.china.adguardhome.confgoogle.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。

 2024-12-13 201407.png 之后回到AdGuardHome Dashboard,设置DNS监听的端口为53,WebUI监听端口也是选择一个未占用的端口,我用的是3030。

在AdGuardHome中的设置–DNS设置中,将上游服务器模式设置为负载均衡,设置Bootstrap DNS为国内的明文UDP,设置私人反向DNS服务器为127.0.0.1:6053

image.png

由于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服务器中点击测试上游,没有报错就可以保存了。