简介

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

SmartDNS 同时支持指定特定域名 IP 地址,并高性匹配,可达到过滤广告的效果; 支持DOT(DNS over TLS)和DOH(DNS over HTTPS),更好的保护隐私。

与 DNSmasq 的 all-servers 不同,SmartDNS 返回的是访问速度最快的解析结果。

支持树莓派、OpenWrt、华硕路由器原生固件和 Windows 系统等。

官网

https://pymumu.github.io/smartdns/

Github

https://github.com/pymumu/smartdns

特性

  1. 多虚拟DNS服务器
    支持多个虚拟DNS服务器,不同虚拟DNS服务器不同的端口,规则,客户端。

  2. 多 DNS 上游服务器
    支持配置多个上游 DNS 服务器,并同时进行查询,即使其中有 DNS 服务器异常,也不会影响查询。

  3. 支持每个客户端独立控制
    支持基于MAC,IP地址控制客户端使用不同查询规则,可实现家长控制等功能。

  4. 返回最快 IP 地址
    支持从域名所属 IP 地址列表中查找到访问速度最快的 IP 地址,并返回给客户端,提高网络访问速度。

  5. 支持多种查询协议
    支持 UDP、TCP、DOT 和 DOH 查询及服务,以及非 53 端口查询;支持通过socks5,HTTP代理查询;

  6. 特定域名 IP 地址指定
    支持指定域名的 IP 地址,达到广告过滤效果、避免恶意网站的效果。

  7. 域名高性能后缀匹配
    支持域名后缀匹配模式,简化过滤配置,过滤 20 万条记录时间 < 1ms。

  8. 域名分流
    支持域名分流,不同类型的域名向不同的 DNS 服务器查询,支持iptable和nftable更好的分流;支持测速失败的情况下设置域名结果到对应ipset和nftset集合。

  9. Windows / Linux 多平台支持
    支持标准 Linux 系统(树莓派)、OpenWrt 系统各种固件和华硕路由器原生固件。同时还支持 WSL(Windows Subsystem for Linux,适用于 Linux 的 Windows 子系统)。

  10. 支持 IPv4、IPv6 双栈
    支持 IPv4 和 IPV 6网络,支持查询 A 和 AAAA 记录,支持双栈 IP 速度优化,并支持完全禁用 IPv6 AAAA 解析。

  11. 支持DNS64
    支持DNS64转换。

  12. 高性能、占用资源少
    多线程异步 IO 模式,cache 缓存查询结果。

  13. 主流系统官方支持
    主流路由系统官方软件源安装smartdns。

架构

  1. SmartDNS 接收本地网络设备的DNS 查询请求,如 PC、手机的查询请求;

  2. 然后将查询请求发送到多个上游 DNS 服务器,可支持 UDP 标准端口或非标准端口查询,以及 TCP 查询;

  3. 上游 DNS 服务器返回域名对应的服务器 IP 地址列表,SmartDNS 则会检测从本地网络访问速度最快的服务器 IP;

  4. 最后将访问速度最快的服务器 IP 返回给本地客户端。

部署&配置(使用Openwrt)

以OpenWrt luci为例,安装步骤如下:

  1. 点击系统下的软件包选项

  2. 过滤器中输入smartdns,点击查找软件包

  3. 下载luci-app-smartdns,luci-i18n-smartdns-zh-cn,smartdns三项

SmartDNS install

大部分openwrt编译版本一般都含有此软件包

SmartDNS的基本配置

见下图:

Basic SmartDNS Setting

应注意以下选项:

  • 双栈IP优选,应注意您的设备是否完全支持IPv6,尤其是您所在的网络运营商是否支持

  • 重定向,应选择重定向53端口到SmartDNS,但如果您存在其他涉及DNS的软件,应自行选择

上游服务器配置

DNS服务器名称

DNS服务器地址

阿里 AliDNS

223.5.5.5

百度 BaiduDNS

180.76.76.76

114 DNS

114.114.114.114

腾讯DNS

119.29.29.29

山东联通

202.102.128.68

Google DNS

8.8.8.8

CloudFlare

1.1.1.1

Quad9

9.9.9.9

最终效果如下图:

SmartDNS DNS Server

特殊设置

由于SmartDNS具有一般的DNS能力,我们可以在域名地址中进行指定的域名解析IP。

address /home.lan/192.168.10.50

如上述设置的作用是,当访问http://home.lan时,将解析成192.168.10.50,即我个人的路由器地址。

客户端设置

在Windows 10中,通过以下步骤完成DNS设置:

  1. 点击Windows 设置下的网络和Internet选项

  2. 点击状态中的属性,如下图:

Windows DNS Setting

  1. 下滑到IP设置,点击编辑,如下图:

IP setting

  1. IP地址填入任一未被占用的IP地址,子网前缀填入32,网关填入192.168.10.50,DNS服务器填入192.168.10.50,点击保存

测试

测试方法1:

打开浏览器,输入http://home.lan,如果生效可以直接访问到软路由主页

测试方法2:

打开cmd,输入nslookup baidu.com,如果设置正确则结果如下图:

Test

配置正确返回的IP地址仅有一个,若返回多个则配置不正确