Openwrt SmartDNS 插件的安装、更新教程

这篇文章是 openwrt 系列 15 篇文章中的第 4 篇

Openwrt 下 SmartDNS 插件的安装、更新教程

一、什么是 SmartDNS,有什么用?

  • 比较官方的说法是:

    SmartDNS 是一个运行在路由器上的 DNS 服务器,然后从多个上游 DNS 服务器获取 DNS 查询结果,并将访问速度最快的结果返回给客户端,以此提高网络访问速度。

  • 比较小白的说法是

    SmartDNS 就是预先配置多个 DNS 服务器供其选择,自动完成 DNS 解析(缓存)。正确设置就能加快本地的网页打开速度,以及防止 DNS 被污染(就是更清爽,解决 DNS 被运营商劫持的问题)。

网上对 SmartDns 的作用评论那是褒贬不一,有说傻白甜 + 秀智商的。当然也有说 SmartDns 就是神作,非常好用的。

SmartDns 无用论就不在本文讨论范围,本文针对的是还没折腾够的朋友。

经众多测试过的玩家总结,SmartDNS 最大作用其实是替换了 dnsmasq+pdsnd,实现对流量的精准分流。请务必清楚" 精准分流 " 才是 SmartDns 的精髓所在

而 "返回最快的结果" 反而是附带的甜点。

SmartDNS 的应用场景:支持树莓派、OpenWrt、华硕路由器原生固件和 Windows 系统等。

二、安装完成后,SmartDNS 在路由器中出现的位置

不管是安装还是更新,本文皆以 OpenWrt 操作系统为例

正确安装的 SmartDNS 位于 OpenWrt 的 " 服务 " 菜单下即可找到:

image-20230923160506128

三:OpenWrt 下,如何安装 SmartDNS 插件?

假设你的 openwrt 固件默认并没有安装 smartdns 插件,在 服务菜单 下没找到相应连接,那么你也许要对 smartdns 进行全新安装

Smartdns 全新安装步骤可分为二种:

1.在线安装服务

OpenWrt 固件集成有软件包在线安装服务,在 OPKG 配置执行安装即可。

A.检查配置信息

先检查配置,有 helloword,passwall 的软件源要先删除掉,不然刷新列表会报错

软件源地址

src/gz openwrt_core https://mirrors.cloud.tencent.com/lede/snapshots/targets/x86/64/packages
src/gz openwrt_base https://mirrors.cloud.tencent.com/lede/snapshots/packages/x86_64/base
src/gz openwrt_luci https://mirrors.cloud.tencent.com/lede/releases/18.06.8/packages/x86_64/luci
src/gz openwrt_packages https://mirrors.cloud.tencent.com/lede/snapshots/packages/x86_64/packages
src/gz openwrt_routing https://mirrors.cloud.tencent.com/lede/snapshots/packages/x86_64/routing
src/gz openwrt_telephony https://mirrors.cloud.tencent.com/lede/snapshots/packages/x86_64/telephony

更改完提交一下。

image-20230923160700610

安装前先卸载原有固件,旧版本的 Smartdns(可以跳过此步直接安装,有新版本的话,会自动更新)。

Ps: 这里随便点击其中一个卸载 Smartdns,刷新后你会发现两个已经安装的都找不到了。

image-20230923160851159

B.在线安装

先刷新列表,等代完成后,过滤器里填入 smartdns,在线安装即可。

image-20230923160951897

如下图,很清晰。有软件包名称,smartdns 的版本,及 ipk 的大小等等。

情况不同,你那是也许不是这个版本,直接安装 smartdns 就行

过滤器中输入相关关键词,如:"smartdns",会列出所有可用的软件包,这里是 "luci-app-smartdns" 和 "smartdns",luci-app-smartdns 的文件大小为 0K,smartdns 的文件大小为 105658k。

至于 " 下载并安装软件包 " 选项:如果你有想要下载的相关服务软件包详细下载地址,可以直接输入并下载。

image-20230923161026829

这里不知道是显示文件大小有问题还是什么原因,luci-app-smartdns是 SmartDns 的操作界面(就是上面说过的显示在服务菜单位置的 UI),原则上是不可能为 0K 的。不过不必深究,这不影响后面的操作。

2.putty 连接 openwrt,使用命令行进行安装

A.手动下载合适的 SmartDns 版本

SmartDns 安装包的开源仓库下载地址为:https://github.com/pymumu/smartdns/releases

选择版本提示

  • Openwrt 18.XX 及之前的版本,安装 luci-app-smartdns.1.yyyy.MM.dd-REL.all-luci-compat-all.ipk 界面。
  • 反之 Openwrt 19.07 后的版本,安装 luci-app-smartdns.1.yyyy.MM.dd-REL.all.ipk 界面。

image-20230923161146509

B.安装 SmartDns 用到的主要命令有

#SmartDns 卸载命令
opkg remove luci-app-smartdns
opkg remove smartdns

#SmartDns 安装命令
opkg update
opkg install smartdns.1.xxx.ipk
opkg install luci-app-smartdns.1.xxxL.all.ipk

#如果不知道什么版本,直接选all版本
#opkg install luci-app-smartdns.1.xxx.all-luci-compat-all.ipk

C.Putty 连接路由,命令行操作

wget 命令下载 SmartDns 最新版(这里以 2023 年 2 月 4 日,最新版本为 Release40 版本为例):

wget https://github.com/pymumu/smartdns/releases/download/Release40/luci-app-smartdns.1.2023.01.02-1537.all-luci-all.ipk
wget https://github.com/pymumu/smartdns/releases/download/Release40/smartdns.1.2023.01.02-1537.aarch64-openwrt-all.ipk

SmartDns 版本更新如下:

  1. 优化 luci 界面,支持域名分流配置和定时更新规则。使用 参考这里
  2. 支持上游服务器配置 socket mark(-set-mark)。
  3. 支持设置日志文件的默认权限。
  4. 支持禁用特定域名的过期缓存。
  5. 支持日志个数为 0 时,禁用日志。
  6. 优化一些 log 打印。
  7. 解决一些 BUG。

使用命令安装

#一定要更新,不然会存在报错的可能
opkg update 

#安装SmartDns,注意修改刚下载的文件名
opkg install smartdns.1.2023.01.02-1537.aarch64-openwrt-all.ipk
opkg install luci-app-smartdns.1.2023.01.02-1537.all-luci-all.ipk

安装完成后,即可在 服务菜单 下找到 SmartDNS 的选项。

四、关于更新 SmartDns 的版本(版本升级)

SmartDns 老旧版本的更新升级方法,其实和安装方法一模一样,只时跳过卸载原来 SmartDns 这一步,新的安装包,安装完成后会自动更新 SmartDns 的版本。

但要注意新的配置文件所在位置与原配置文件有所区别,弄错会出现很多莫名其妙的 bug。
而 SmartDns 配置文件位置,一般在安装的时候有提示的,通常以 smartdns_opkg 为文件名,安装过程中要多留意。

五、安装 SmartDNS 插件过程中可能出现的问题

1.SmartDNS 安装/升级中出现 'Package mismatch' 错误

1.1 问题描述

不论是在线安装,或者是用命令安装,原理都一样。

如果在安装过程中出现:smartdns opkg_install_pkg: Package size mismatch: smartdns is xxx bytes, expecting xxx bytes 的错误提示。

而你又选择了正确的安装包,也能安装,但就是报错。即便你多次重复卸载,但还是会在安装 luci 界面安装失败。

1.2 错误出现原因

那么这里要先考虑是不是自带命令 opkg 的问题。

站长就遇到了这样的问题,经过一翻搜索,找到了造成Package mismatch 错误的原因,就是没更新 opkg 命令。
具体讨论可以在 gitub 仓库中的 issues 10847 中找到答案,以下是简单截取。

To be more clear:

  • in this issue, an old package index is used to check the size/checksum of newer packages. Failure is expected.
  • in the imagebuilder, a new package index is used to check the size/checksum of old packages that had been downloaded before. This is a bug, opkg should delete the old packages in this case (see ticket).

就是死循环的用两不同的 "package index"。

1.3 'Package mismatch' 错误解决办法

解决办法就是在安装前,必须用 'opkg update' 命令,更新一下,这很重要,会为你省去很多不必要的麻烦。

Openwrt下SmartDNS插件的安装、更新教程

2.解决 openwrt 下安装 smartdns 不显示问题

2.1 问题描述

倘若,上面所有 smartdns 安装/更新过程,都能正常进行,但 OpwnWrt 的服务菜单下就是死活不显示 "SmartDns" 的选项怎么办

如果一切安装过程都是正确的,但菜单下就是无法显示 SmartDns 的菜单条,没有 常规设置,也没有 设置上游服务器查询 的选项,如下图所示:

image-20230923161550149

2.2 不显示错误出现的原因

出现不显示的问题,这就是 Openwrt 安装服务时,典型的 Luci 不显示的错误

这是在 Openwrt 下,用命令安装服务会经常会出现的错误之一,大体原因是不兼容,或者漏装了某个依赖

而众多原因中,最可能诱发 Openwrt下没有SmartDns服务菜单 的原因,大概率就是你以前旧版本的 SmartDns 配置文件没删除,而新版本的又生成为其他文件名,如 smartdns_opkg

这造成SmartDns 读不到配置文件造成在采单栏无法显示的错误。

Openwrt下SmartDNS插件的安装、更新教程

2.3 SmartDns 不显示的解决办法

知道原因,解决 成功安装SmartDns后仍然不显示 的问题就非常简单了。

删除旧文件,把新生成的 smartdns_opkg.config 文件改成 smartdns。如果没有,随便复制一个文件,改名文件名为 smartdns,确保里面的内容如下:

config smartdns
    option enabled '0'
    option old_port '53'
    option old_enabled '0'
    option old_auto_set_dnsmasq '1'

本文固件提示的配置文件位置

/etc/config/smartdns

总结

SmartDns 的安装分手动下载和自动下载 2 种方式,安装的关键是安装前要确保 "opkg update" 先行。

然后就确保旧版的 SmartDns 配置不会影响到新的 SmartDns 安装,不然容易出现 "openwrt 下安装 smartdns 不显示问题 " 的错误。

本文主要解决 smartdns 插件在路由器下的安装与更新问题,更详细的设置,可参考以下文章:

系列目录<< 家用服务器(Dell T630)All In Boom – 安装 Openwrt 软路由系统Openwrt SmartDNS 及相关配置 >>