SmartDNS:本地 DNS 加速服务器
运行在本地的 DNS 服务器,从多个上游服务器获取解析结果并返回访问最快的 IP,提升上网速度。
- 浏览
- 4
- 访问
- 0
- 下载
- 0
- 版本
- vRelease48.4
- 平台
- Windows、Linux
详细介绍
项目简介
SmartDNS 是一个运行在本地的 DNS 服务器。它接受来自本地客户端的 DNS 查询请求,然后从多个上游 DNS 服务器获取查询结果,并检测从本地网络访问速度最快的服务器 IP,将最快的结果返回给客户端,以此提高网络访问速度。
与 DNSmasq 的 all-servers 模式不同,SmartDNS 返回的是访问速度最快的解析结果。项目使用 C 语言编写,采用多线程异步 IO 模式并带 cache 缓存,资源占用较少。

工作原理

- SmartDNS 接收本地网络设备的 DNS 查询请求,如 PC、手机的查询请求;
- 将查询请求发送到多个上游 DNS 服务器,支持 UDP 标准端口或非标准端口查询,以及 TCP 查询;
- 上游 DNS 服务器返回域名对应的服务器 IP 地址列表,SmartDNS 检测从本地网络访问速度最快的服务器 IP;
- 将访问速度最快的服务器 IP 返回给本地客户端。
效果参考
README 给出的对比示例中,使用阿里 DNS 解析 www.baidu.com 得到的地址 ping 约 24ms / 31ms,而使用 SmartDNS 得到的地址 ping 约 6ms。
主要功能
- 多虚拟 DNS 服务器:支持多个虚拟 DNS 服务器,不同虚拟服务器可使用不同端口、规则和客户端范围。
- 多 DNS 上游服务器:可配置多个上游 DNS 服务器并同时查询,即使其中有服务器异常也不影响查询。
- 按客户端独立控制:支持基于 MAC、IP 地址控制客户端使用不同的查询规则,可实现家长控制等功能。
- 返回最快 IP:从域名所属 IP 地址列表中查找访问速度最快的地址返回给客户端。
- 多种查询协议:支持 UDP、TCP、DoT、DoH、DoQ 和 DoH3 查询及服务,支持非 53 端口查询,支持通过 socks5、HTTP 代理查询。
- 特定域名 IP 指定:可指定域名的 IP 地址,达到广告过滤、避免恶意网站的效果。
- 域名高性能后缀匹配:支持域名后缀匹配模式简化过滤配置,过滤 20 万条记录时间 < 1ms。
- 域名分流:不同类型的域名向不同的 DNS 服务器查询,支持 iptables 和 nftables 分流;支持测速失败时将域名结果设置到对应 ipset 和 nftset 集合。
- 多平台支持:支持标准 Linux 系统(树莓派)、OpenWrt 各种固件和华硕路由器原生固件,同时支持 WSL(适用于 Linux 的 Windows 子系统)。
- IPv4 / IPv6 双栈:支持 A 和 AAAA 记录查询、双栈 IP 速度优化,并支持完全禁用 IPv6 AAAA 解析。
- DNS64:支持 DNS64 转换。
- 高性能、占用资源少:多线程异步 IO 模式,cache 缓存查询结果。
- 主流系统官方支持:主流路由系统官方软件源可安装 SmartDNS。
安装与使用
完整的使用指导请见 SmartDNS 官网:https://pymumu.github.io/smartdns,各平台安装方式(如 OpenWrt APK 包安装)见官网对应文档:https://pymumu.github.io/smartdns/install/openwrt/。
编译
代码编译:SmartDNS 提供了编译软件包的脚本 package/build-pkg.sh,支持编译 LuCI、Debian、OpenWrt 和 Optware 安装包。
文档编译:文档分支为 doc,安装 mkdocs 工具后,执行 mkdocs build 编译。
注意事项
- 项目基于 GPL V3 协议开源。
- 非静态版本可从 https://github.com/PikuZheng/smartdns/releases/ 获取。
- 使用前建议先阅读官方文档,按所在平台(Linux、OpenWrt、路由器固件、WSL 等)选择对应的安装与配置方式。
本作品整理自 GitHub 开源项目 pymumu/smartdns,原作者 @pymumu,许可证 GPL-3.0。中文介绍由 AI 根据项目 README 整理,以原仓库为准。
更新记录
- vRelease48.4当前版本
Release48.4 主要解决了一些 BUG,属于问题修复版本。
评论