SmartDNS是一个运行在本地的 DNS 服务器,它接受来自本地客户端的 DNS 查询请求,然后从多个上游 DNS 服务器获取 DNS 查询结果,并将访问速度最快的结果返回给客户端,以此提高网络访问速度。 SmartDNS 同时支持指定特定域名 IP 地址,并高性匹配,可达到过滤广告的效果; 支持DOT,DOH,DOQ,DOH3,更好的保护隐私。与 DNSmasq 的 all-servers 不同,SmartDNS 返回的是访问速度最快的解析结果。支持树莓派、OpenWrt、华硕路由器原生固件和 Windows 系统等。

【软件架构说明】
SmartDNS 接收本地网络设备的DNS 查询请求,如 PC、手机的查询请求;
然后将查询请求发送到多个上游 DNS 服务器,可支持 UDP 标准端口或非标准端口查询,以及 TCP 查询;
上游 DNS 服务器返回域名对应的服务器 IP 地址列表,SmartDNS 则会检测从本地网络访问速度最快的服务器 IP;
最后将访问速度最快的服务器 IP 返回给本地客户端。

【功能特色】
多 DNS 上游服务器
支持配置多个上游 DNS 服务器,并同时进行查询,即使其中有 DNS 服务器异常,也不会影响查询。
返回最快 IP 地址
支持从域名所属 IP 地址列表中查找到访问速度最快的 IP 地址,并返回给客户端,提高网络访问速度。
支持多种查询协议
支持 UDP、TCP、DoT、DoQ、DoH 和 DoH3 查询及服务,以及非 53 端口查询;支持通过socks5,HTTP代理查询。
特定域名 IP 地址指定
支持指定域名的 IP 地址,达到广告过滤效果、避免恶意网站的效果。
域名分流
支持域名分流,不同类型的域名向不同的 DNS 服务器查询
Windows / MacOS / Linux 多平台支持
支持安装成服务开启自启动。
支持 IPv4、IPv6 双栈
支持 IPv4 和 IPV 6网络,支持查询 A 和 AAAA 记录,支持双栈 IP 速度优化,并支持完全禁用 IPv6 AAAA 解析。
支持DNS64
支持DNS64转换。
高性能、占用资源少
Tokio 加持的多线程异步 IO 模式;缓存查询结果;支持常用域名过期预读取,查询 “0” 毫秒,免除 DoH、DoT 加密带来的速度影响。
【版本说明】
C 语言版的 smartdns 功能非常的不错,但由于其仅支持 Linux,而对 MacOS、Windows 只能通过 Docker 或 WSL 支持。因此,这里提供 rust 版的 SmartDNS,支持编译到 Windows、MacOS、Linux 以及 Android 的 Termux 环境运行,并与其配置兼容。
【安装说明】
下载程序包,并解压。
1、查看帮助
./smartdns --help
2、前台运行,方便查看运行状况
./smartdns run -c ./smartdns.conf -v
-v 是开启打印调试日志
3、后台服务运行,开机自动运行
查看服务管理命令:
./smartdns service --help
注意:安装成系统服务,需要 administrator / root 权限。
服务管理是各系统兼容的,window 下调用 sc;MacOS 下调用 launchctl 或者 brew;Linux 下调用 Systemd 或 OpenRc。
【配置说明】
下面是一份最简单的示例配置
# 在本地 53 端口监听
bind 127.0.0.1:53
# 配置 bootstrap-dns,如不配置则调用系统的,建议配置,这样就加密了。
server https://223.5.5.5/dns-query -bootstrap-dns -exclude-default-group
# 配置默认上游服务器
server https://dns.alidns.com/dns-query
server https://doh.pub/dns-query
# 配置公司(家里)上游服务器
server 192.168.1.1 -exclude-default-group -group office
# 以 ofc 结尾的域名转发至 office 分组进行解析
nameserver /ofc/office
# 设置域名的静态 IP
address /test.example.com/1.2.3.5
# 屏蔽域名(广告屏蔽)
address /ads.example.com/#
# 以下特性在[C 语言版 SmartDNS](https://github.com/pymumu/smartdns) 尚未支持,仅适用于SmartDNS-rs
# 使用 DoH3
server-h3 223.5.5.5
# 使用 DoQ
server-quic 223.5.5.5
【常见问题】
1、如何避免隐私泄漏?
默认情况下,SmartDNS 会将请求发送到所有配置的DNS服务器,若上游 DNS 服务器使用DNS,或记录日志,将会导致隐私泄漏。为避免隐私泄漏,请尽量:
配置使用可信的DNS服务器。
优先使用 TLS 查询。
设置上游 DNS 服务器组。
2、IPv4、IPv6 双栈 IP 优选功能如何使用?
目前 IPv6 已经开始普及,但 IPv6 网络在速度上,某些情况下还不如 IPv4。为在双栈网络下获得较好的体验,SmartDNS 提供来双栈IP优选机制,同一个域名,若 IPv4 的速度远快与 IPv6,那么 SmartDNS 就会阻止IPv6的解析、使用 IPv4 访问。可在配置文件中通过设置 dualstack-ip-selection yes 启用此功能,通过 dualstack-ip-selection-threshold [time] 来修改阈值。如果要完全禁止 IPv6 AAAA记录解析,可设置 force-AAAA-SOA yes。