一、什么是SmartDNS ,有什么用?
比较官方的说法是:
SmartDNS 是一个运行在路由器上的 DNS 服务器,然后从多个上游 DNS 服务器获取 DNS 查询结果,并将访问速度最快的结果返回给客户端,以此提高网络访问速度。
比较小白的说法是:
SmartDNS就是预先配置多个DNS服务器供其选择,自动完成DNS解析(缓存)。正确设置就能加快本地的网页打开速度,以及防止DNS被污染(就是更清爽,解决DNS被运营商劫持的问题)。
网上对SmartDns的作用评论那是褒贬不一,有说傻白甜+秀智商的。当然也有说SmartDns就是神作,非常好用的。
SmartDns无用论就不在本文讨论范围,本文针对的是还没折腾够的朋友。
经众多测试过的玩家总结,SmartDNS 最大作用其实是替换了 dnsmasq+pdsnd,实现对流量的精准分流。请务必清楚“精准分流”才是SmartDns的精髓所在。
而“返回最快的结果”反而是附带的甜点。
SmartDNS的应用场景:支持树莓派、OpenWrt、华硕路由器原生固件和 Windows 系统等。
二、安装完成后,SmartDNS 在路由器中出现的位置
不管是安装还是更新,本文皆以OpenWrt操作系统为例:
正确安装的 SmartDNS 位于 OpenWrt 的 “服务”菜单下即可找到:
三: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
更改完提交一下。
安装前先卸载原有固件,旧版本的Smartdns(可以跳过此步直接安装,有新版本的话,会自动更新)。
Ps: 这里随便点击其中一个卸载Smartdns,刷新后你会发现两个已经安装的都找不到了。
B.在线安装
先刷新列表,等代完成后,过滤器里填入smartdns,在线安装即可。
如下图,很清晰。有软件包名称,smartdns的版本,及ipk的大小等等。
情况不同,你那是也许不是这个版本,直接安装smartdns就行。
过滤器中输入相关关键词,如:“smartdns”,会列出所有可用的软件包,这里是“luci-app-smartdns”和“smartdns”,luci-app-smartdns的文件大小为0K,smartdns的文件大小为105658k。
至于“下载并安装软件包”选项:如果你有想要下载的相关服务软件包详细下载地址,可以直接输入并下载。
这里不知道是显示文件大小有问题还是什么原因,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
界面。
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
- 优化luci界面,支持域名分流配置和定时更新规则。使用 参考这里
- 支持上游服务器配置socket mark(-set-mark)。
- 支持设置日志文件的默认权限。
- 支持禁用特定域名的过期缓存。
- 支持日志个数为0时,禁用日志。
- 优化一些log打印。
- 解决一些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' 命令,更新一下,这很重要,会为你省去很多不必要的麻烦。
2.解决openwrt下安装smartdns不显示问题
2.1 问题描述
倘若,上面所有smartdns安装/更新过程,都能正常进行,但OpwnWrt 的服务菜单下就是死活不显示 “SmartDns”的选项怎么办?
如果一切安装过程都是正确的,但菜单下就是无法显示SmartDns的菜单条,没有常规设置
,也没有设置上游服务器查询
的选项,如下图所示:
2.2 不显示错误出现的原因
出现不显示的问题,这就是Openwrt 安装服务时,典型的Luci 不显示的错误。
这是在Openwrt下,用命令安装服务会经常会出现的错误之一,大体原因是不兼容,或者漏装了某个依赖。
而众多原因中,最可能诱发Openwrt下没有SmartDns服务菜单
的原因,大概率就是你以前旧版本的SmartDns配置文件没删除,而新版本的又生成为其他文件名,如smartdns_opkg
。
这造成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插件在路由器下的安装与更新问题,更详细的设置,可参考以下文章:
扩展阅读:
- 如果你的smartdns使用效果不满意,可以偿试切换使用不同的上游服务器搭配组合使用。
【SmartDns上游服务器列表大整合(含国内外公共、加密DNS)】