
SmartDNS
简介
SmartDNS 是一个运行在本地的 DNS 服务器,它接受来自本地客户端的 DNS 查询请求,然后从多个上游 DNS 服务器获取 DNS 查询结果,并将访问速度最快的结果返回给客户端,以此提高网络访问速度。
SmartDNS 同时支持指定特定域名 IP 地址,并高性匹配,可达到过滤广告的效果; 支持DOT(DNS over TLS)和DOH(DNS over HTTPS),更好的保护隐私。
与 DNSmasq 的 all-servers 不同,SmartDNS 返回的是访问速度最快的解析结果。
支持树莓派、OpenWrt、华硕路由器原生固件和 Windows 系统等。
官网
Github
特性
多虚拟DNS服务器
支持多个虚拟DNS服务器,不同虚拟DNS服务器不同的端口,规则,客户端。多 DNS 上游服务器
支持配置多个上游 DNS 服务器,并同时进行查询,即使其中有 DNS 服务器异常,也不会影响查询。支持每个客户端独立控制
支持基于MAC,IP地址控制客户端使用不同查询规则,可实现家长控制等功能。返回最快 IP 地址
支持从域名所属 IP 地址列表中查找到访问速度最快的 IP 地址,并返回给客户端,提高网络访问速度。支持多种查询协议
支持 UDP、TCP、DOT 和 DOH 查询及服务,以及非 53 端口查询;支持通过socks5,HTTP代理查询;特定域名 IP 地址指定
支持指定域名的 IP 地址,达到广告过滤效果、避免恶意网站的效果。域名高性能后缀匹配
支持域名后缀匹配模式,简化过滤配置,过滤 20 万条记录时间 < 1ms。域名分流
支持域名分流,不同类型的域名向不同的 DNS 服务器查询,支持iptable和nftable更好的分流;支持测速失败的情况下设置域名结果到对应ipset和nftset集合。Windows / Linux 多平台支持
支持标准 Linux 系统(树莓派)、OpenWrt 系统各种固件和华硕路由器原生固件。同时还支持 WSL(Windows Subsystem for Linux,适用于 Linux 的 Windows 子系统)。支持 IPv4、IPv6 双栈
支持 IPv4 和 IPV 6网络,支持查询 A 和 AAAA 记录,支持双栈 IP 速度优化,并支持完全禁用 IPv6 AAAA 解析。支持DNS64
支持DNS64转换。高性能、占用资源少
多线程异步 IO 模式,cache 缓存查询结果。主流系统官方支持
主流路由系统官方软件源安装smartdns。
架构
SmartDNS 接收本地网络设备的DNS 查询请求,如 PC、手机的查询请求;
然后将查询请求发送到多个上游 DNS 服务器,可支持 UDP 标准端口或非标准端口查询,以及 TCP 查询;
上游 DNS 服务器返回域名对应的服务器 IP 地址列表,SmartDNS 则会检测从本地网络访问速度最快的服务器 IP;
最后将访问速度最快的服务器 IP 返回给本地客户端。
部署&配置(使用Openwrt)
以OpenWrt luci为例,安装步骤如下:
点击
系统
下的软件包
选项在
过滤器
中输入smartdns
,点击查找软件包
下载
luci-app-smartdns
,luci-i18n-smartdns-zh-cn
,smartdns
三项
大部分openwrt编译版本一般都含有此软件包
SmartDNS的基本配置
见下图:
应注意以下选项:
双栈IP优选
,应注意您的设备是否完全支持IPv6,尤其是您所在的网络运营商是否支持重定向
,应选择重定向53端口到SmartDNS
,但如果您存在其他涉及DNS的软件,应自行选择
上游服务器配置
最终效果如下图:
特殊设置
由于SmartDNS具有一般的DNS能力,我们可以在域名地址
中进行指定的域名解析IP。
address /home.lan/192.168.10.50
如上述设置的作用是,当访问http://home.lan
时,将解析成192.168.10.50
,即我个人的路由器地址。
客户端设置
在Windows 10中,通过以下步骤完成DNS设置:
点击
Windows 设置
下的网络和Internet
选项点击
状态
中的属性
,如下图:
下滑到
IP设置
,点击编辑
,如下图:
IP地址
填入任一未被占用的IP地址,子网前缀
填入32
,网关填入192.168.10.50
,DNS服务器填入192.168.10.50
,点击保存
测试
测试方法1:
打开浏览器,输入http://home.lan
,如果生效可以直接访问到软路由主页
测试方法2:
打开cmd
,输入nslookup baidu.com
,如果设置正确则结果如下图:
配置正确返回的IP地址仅有一个,若返回多个则配置不正确