跳到正文
发现
命令行工具效率工具

SmartDNS-rs:跨平台本地 DNS 服务器

用 Rust 编写的本地 DNS 服务器,从多个上游服务器中返回最快的网站 IP,支持 DoT、DoQ、DoH、DoH3。

admin
发布于 2026-11-01
浏览
9
访问
0
下载
0
版本
v0.13.1
平台
Windows、macOS、Linux
该作品还没有经过官方审核。访问演示、下载或复制命令前,请自行确认来源可信。

详细介绍

项目简介

SmartDNS-rs 是一个用 Rust 编写的跨平台本地 DNS 服务器,参考 C 版 SmartDNS 实现。它接受本地客户端的 DNS 查询请求,同时向多个上游 DNS 服务器发起查询,并把访问最快的 IP 结果返回给客户端,从而避免 DNS 污染、提升网络访问速度,并支持高性能广告过滤。

C 版 SmartDNS 功能强大但只支持 Linux,macOS 和 Windows 只能借助 Docker 或 WSL 运行。SmartDNS-rs 的目标是编译到 Windows、macOS、Linux 以及 Android Termux 环境运行,并兼容其配置。

主要功能

  • 多上游 DNS 服务器:可同时配置多个上游服务器并发查询,单个服务器异常不影响查询。
  • 返回最快 IP:从域名解析出的 IP 列表中找出访问最快的地址返回给客户端,避免 DNS 污染。
  • 多种查询协议:支持 UDP、TCP、DoT、DoQ、DoH、DoH3 查询与服务,支持非 53 端口查询,也可通过 socks5、http 代理查询。
  • 域名 IP 指定:为特定域名配置固定 IP,实现广告过滤、屏蔽恶意网站。
  • 域名转发:支持 DNS 转发、ipset 与 nftables;测速失败时可将域名结果写入 ipset / nftset 集合。
  • 多平台支持:Windows / macOS / Linux,可安装为系统服务并开机自启。
  • IPv4 / IPv6 双栈:支持 A、AAAA 记录查询、双栈 IP 选择,并可过滤 IPv6 AAAA 记录。
  • DNS64:支持 DNS64 转换。
  • 高性能低占用:基于 Tokio 的多线程异步 I/O 模型,缓存查询结果,支持常用域名过期预取。
  • 内置诊断:通过 dig 的 CHAOS TXT 查询查看服务器与客户端信息。

安装与使用

macOS 下可用 Homebrew 安装:

brew update
brew install smartdns

监听 53 端口需要 root 权限,因此需要 sudo。执行 sudo smartdns service start 与 sudo brew services start smartdns 效果相同。

Windows / Linux 请到 releases 页面下载压缩包解压使用:

./smartdns --help
./smartdns run -c ./smartdns.conf -v

-v 会打印调试日志。以后台服务方式运行并开机自启,可使用服务管理命令 ./smartdns service --help(安装为系统服务需要管理员 / root 权限)。

最简单的配置示例:

bind 127.0.0.1:53

server https://1.1.1.1/dns-query  -bootstrap-dns -exclude-default-group
server https://8.8.8.8/dns-query  -bootstrap-dns -exclude-default-group

server https://cloudflare-dns.com/dns-query
server https://dns.google/dns-query

server 192.168.1.1 -exclude-default-group -group office
nameserver /ofc/office

address /test.example.com/1.2.3.5
address /ads.example.com/#

# 以下为 SmartDNS-rs 独有配置
server-h3 1.1.1.1
server-quic unfiltered.adguard-dns.com

内置诊断示例:

dig @127.0.0.1 CH TXT whoami +short
dig @127.0.0.1 CH TXT version +short

从源码构建需要先安装 Rust,然后执行 cargo install just 与 just build --release,运行 sudo ./target/release/smartdns run -c ./etc/smartdns/smartdns.conf。

注意事项

  • 项目仍在开发中,README 明确提示不要用于生产环境,欢迎试用并反馈问题;功能覆盖情况可参考仓库的 TODO 列表。
  • 监听 53 端口、安装系统服务均需要管理员 / root 权限。
  • 更高级的配置写法请参考上游 SmartDNS 的配置文档。
  • 项目以 GPL-3.0 许可证发布。

本作品整理自 GitHub 开源项目 mokeyish/smartdns-rs,原作者 @mokeyish,许可证 GPL-3.0。中文介绍由 AI 根据项目 README 整理,以原仓库为准。

更新记录

  1. v0.13.1当前版本

    修复 address.conf 不存在时保存失败、开启测速且有 CNAME 时记录名不匹配、控制台日志级别无法设置、预取策略与缓存持久化及 DNS 缓存锁等问题;优化 ICMP 客户端复用与后台任务并发限制,提升 dnsmasq/hosts 文件缓存性能,并在 Windows 关机时保存 DNS 缓存。

评论