问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

OpenWRT软路由多级DNS配置详解

创作时间:
作者:
@小白创作中心

OpenWRT软路由多级DNS配置详解

引用
什么值得买
1.
https://post.m.smzdm.com/p/axo49533/

OpenWRT软路由的多级DNS配置方案,既能实现国内和海外DNS的分流,又能提供广告拦截功能。本文将详细介绍两种配置方案:普通方案和复杂方案,并重点讲解复杂方案的具体配置步骤,包括SmartDNS、AdGuardHome、chinadns-ng和dnsmasq的配置细节。

方案说明

AdGuard Home本身是不具备域名解析分流功能,如果你看到的方案只有一个AdGuard Home对接两组smartdns,那基本没啥用。

普通方案

简单暴力,就是引入AdGuard Home就可以。

启用一个AdGuard Home:

  • 提供基于dns拦截AD功能(只能拦截一部分,效果没想象中完美)
  • 上游设置运营商提供的两个DNS,然后额外补充1-2个公共DNS,如114DNS、DNSPOD之类
  • 设置作为dnsmasq的上游服务器

复杂方案

方案架构如下:

用到的组件也比较常规了:

  • dnsmasq,成熟的dns缓存服务
  • chinadns-ng,负责维护chnroute等列表,然后通过dnsmasq注入配置
  • AdGuard Home,提供基于dns拦截AD功能
  • smartdns,优化域名解析,防污染

接下来就是从后往前的进行配置

smartdns配置

该工具主要提供了以下两个功能:

  1. 海外国内解析分流
  2. 最优解析延迟返回

在配置上,虽然版本有所更替,但基本的配置内容还是兼容的,如果是迁移路由可复制配置文件

/etc/config/smartdns

复制完成后执行reload_config生效,而对于全新部署的场景,这里也提供一些我的一些配置参考

基础配置说明

如上面的架构图,smartdns是需要分两个组的,对应到配置就是:

  • 默认组(default),监听6053端口
  • 海外组(oversea),监听7053端口

这两者是互相独立了,具体使用哪个组,是由下游的dns缓存来决定

国内组

对应的就是smartdns的基础配置

  • 勾选启用
  • 本地端口设置6053
  • 不需要勾选设置dnsmasq,因为最终还是要通过dnsmasq来提供服务

    国内组的上游DNS,建议设置方式是:
  • 最优先使用运营商分配的DNS缓存服务器,以确保就近解析、避免跨运营商解析
  • 额外再补充一些国内公共DNS,如114DNS、DNSPOD、USTC等
  • 全部默认使用udp协议即可

运营商分配的DNS缓存服务器,可通过主路由的WAN状态拿到,比如

这部分目前变化的情况非常少,并且即使失效了,smartdns也会用上其他的dns来解析

这里以添加第一个DNS为例211.136.192.6,在smartdns上点击添加上游服务器

  • DNS服务器名称,广东移动1号DNS,对应GD_CMCC#1
  • 类型使用udp即可
  • 端口保留默认default,实际上就是53端口
  • 服务器组也是保持默认的default不用修改

依次完成国内组服务器的添加,这里除了运营商的DNS缓存,我也推荐一些DNS:

  • QINGHUA#1:166.111.8.28
  • USTC#1:202.141.160.95
  • 114DNS#1:114.114.114.114
  • DNSPOD#1:119.29.29.29

上述配置统一使用udp协议、默认端口、默认服务器组即可

海外组

注意,如果你请求海外域名是走特殊网络环境,那么海外组配置的上游DNS也必须跟着一起走,不然会出现绕路情况导致最终访问效果较差

对应的就是smartdns的第二DNS服务器

  • 勾选启用
  • 本地端口设置7053
  • 服务器组设置为oversea
  • 下面一系列都是选择逃过,不要求能解析到多优秀的入口,只要能解析到就行

海外组的上游DNS,建议设置方式是:

  • 尽量使用TLS、HTTPS协议
  • 尽量使用非标准端口
  • 如果有合理的网络条件,才考虑设置UDP协议dns

这里以cloudflare的httpsdns为例:

  • DNS服务器名称,CloudFlare1号DNS,对应CloudFlare#1
  • IP填写cloudflare的https解析入口
  • 类型使用https
  • 服务器组修改为oversea

最后在额外参数那里,增加-exclude-default-group,避免默认组使用到该上游DNS

海外组的DNS除了知名的那些大家都懂的,这里也给一些我设置的:

AdGuardHome设置

之前在硬路由的openwrt上用的是其他方案,迁移过来软路由才使用AdGuardHome,所以是从0开始配置

路由器固件已经默认带了AdGuardHome,所以直接进入配置即可

更新核心版本

进入服务配置页面后,先点击更新核心版本

然后勾选启用,再点击保存并应用,这个时候可以看到:AdGuardHome运行中未重定向

此页面上其他配置都无需调整,点击中间的按钮进入AdGuardHome的配置页面进行配置即可

配置使用

点击开始配置,接下来需要设置两个端口:

  • 网页管理界面:所有接口3000端口
  • DNS服务器:所有接口8053端口

再设置用户名密码,后续其他的就按照默认即可,设置完成后会跳转到登录页面,输入用户密码登录:

然后再页面上方点击设置-DNS设置:

  • 上游服务器输入smartdns的国内分组对应端口127.0.0.1:6053
  • 同样,BootstrapDNS服务器也是填入国内分组127.0.0.1:6053

bootstrapdns并不是用来解析海外dns的,而是用来解析一些写了域名的DNS服务器

最后点击测试上游服务器,确认能正常运行即可,最后点击应用进行保存

DNS服务配置:

  • 速度限制调整为0,也就是不进行限制
  • 启用EDNS客户端子网
  • 启用DNSSEC
  • 因为需要用到ipv6解析,所以这个没有禁用

缓存配置全部留空,由smartdns来管理

至此,DNS基础配置已经完成,其他的加密设置、客户端设置、DHCP设置均用不到。

目前广告商也都是在与时俱进的,所以别想着一个AdGuardHome就能解决所有问题,只能拦截掉一部分

接下来进入过滤器配置,这里主要添加了4个黑名单过滤广告

在AdGuardHome配置完成后,回到openwrt后台,继续设置重定向:
这里选择:作为dnsmasq的上游服务器

踩坑分享:日志配置

在配置完某一天,电脑访问网页出现打不开情况

但是通过IP的请求可以正常访问,因此定位是dns问题,在路由器上一条链路排查下来

从上面的排查可以定位就是AdGuardHome问题,然后查看日志发现是磁盘被打满了

主要是家里设备比较多,dns请求频繁,因此调整日志保留天数,改到6小时

在设置->常规设置中,下拉找到日志配置,可考虑关闭日志,或者调整日志保留时间(默认为90天)

chinadns-ng设置

关于chinadns-ng这部分,我不是直接单独使用这个插件,所以一些配置不好展开来讲,仅提供一个配置思路

基础说明

chinadns-ng的作用就是区分国内域名与海外域名(或者说容易污染的域名),进行分流分别请求不同的上游dns

  • 对于国内域名,设置上游为AdGuardHome对应的127.0.0.1:8053,最终走到smartdns的国内组
  • 对于海外域名,设置上游为smartdns的海外组,对应127.0.0.1:7053

配置

这里我并不是直接使用了chinadns-ng插件,而是通过了passwa**插件自定的chinadns-ng

在对应插件的基本设置中,进入DNS配置页面,进行如下调整:

  • 过滤模式通过UDP请求DNS
  • 远程DNS设置为smartdns的海外分组127.0.0.1:7053
  • 启用ChinaDNS-NG功能

在进行如上设置后,最终会在dnsmasq的子配置目录下注入新的配置

其中127.0.0.1#7053就是smartdns的oversea分组,也就是可信DNS,从而能获取到正确域名解析

Dnsmasq配置

基础设置

实际上dnsmasq并不需要做什么特殊配置,在AdGuardHome那里设置了作为dnsmasq的上游服务器

对应的dnsmasq会自动进行如上设置调整,也就是将AdGuardHome作为dnsmasq的上游

踩坑分享:无法解析内网域名

之前配置了之后,出现一些内网域名无法解析,返回为空的情况,如下图:

  • 域名请求状态为NOERROR,也就是没有错误
  • 但是ANSWER为0,代表没有返回域名解析

依次进行排查,发现请求上游AdGuardHome是正常的,对应就是127.0.0.1:8053

那么可以肯定就是dnsmasq的问题了,最终排查到是开了重定向保护导致的

原因就是开启了该参数就会过滤掉外域名解析到私有IP地址,私有ip包含

写在后面

复杂方案确实是挺复杂

  • 不弄清楚原理,很容易就配置失败或者配置了没啥用效果
  • 并且要正确解析海外那些域名,你需要一个“良好的网络环境”,也就涉及到不止dns插件的配置了

目前我也是出于技术学习去搭建这些东西,不过也用了有半年错没啥问题:

  • 效果不好说,因为我也没时间去做详细的数据对比,比如解析耗时、解析准确性
  • 功能算是正常,至少没有出现什么解析耗时过长、解析不了的问题

但是我还是推荐,跑一个AdGuardHome去设置dnsmasq重定向就行了,简单可靠

ok,目前软路由openwrt的内容已经基本完结了,除了开头两篇,还有这两篇。后续再看看有什么好玩的可以分享~

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号