Skip to content

Latest commit

 

History

History
194 lines (113 loc) · 6.57 KB

README_zh-CN.md

File metadata and controls

194 lines (113 loc) · 6.57 KB

SmartDNS-rs

Test GitHub release (latest by date including pre-releases) OS

DocsDiscord

English | 中文

SmartDNS-rs 🐋 一个是受 C 语言版 SmartDNS 启发而开发的,并与其配置兼容的运行在本地的跨平台 DNS 服务器, 它接受来自本地客户端的 DNS 查询请求,然后从多个上游 DNS 服务器获取 DNS 查询结果,并将访问速度最快的结果返回给客户端, 以此提高网络访问速度。 SmartDNS 同时支持指定特定域名 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 环境运行,并与其配置兼容。


目前仍在开发中,请勿用于生产环境,欢迎试用并提供反馈。

请参考 TODO 查看功能覆盖情况。

安装

每日构建的版本可以在找到。

  • MacOS

    如果你有安装 brew ,可以直接用下面的命令进行安装。

    brew update
    brew install smartdns

    注意:监听 53 端口需要 root 权限,因此需要 sudo

    brew 安装的 smartdns 的命令 sudo smartdns service startsudo brew services start smartdns 一样。

    如果没有安装 brew,就与下面一样,下载编译好的程序压缩包进行安装。

  • Windows / Linux

    此处下载程序包,并解压。

    1. 查看帮助

      ./smartdns help
    2. 前台运行,方便查看运行状况

      ./smartdns run -c ./smartdns.conf -v
      • -v 是开启打印调试日志
    3. 后台服务运行,开机自动运行

      查看服务管理命令:

      ./smartdns service help

      注意:安装成系统服务,需要 administrator / root 权限。

      服务管理是各系统兼容的,window 下调用 sc;MacOS 下调用 launchctl 或者 brew;Linux 下调用 SystemdOpenRc

配置文件

下面是一份最简单的示例配置

# 在本地 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

更多高级的配置请参考 这里

从源码构建与运行

假设你已经安装了 Rust,那么你可以打开命令行界面,执行如下命令:

git clone https://github.com/mokeyish/smartdns-rs.git
cd smartdns-rs

# 安装 https://github.com/casey/just
cargo install just

# 编译
just build

# 查看命令帮助
./target/release/smartdns help

# 运行
sudo ./target/release/smartdns run -c ./etc/smartdns/smartdns.conf

对于交叉编译,推荐使用cross(依赖Docker)

鸣谢!!!

这个软件的诞生,少不了它们:

开源声明

本软件包含来自 https://github.com/hickory-dns/hickory-dns 的代码, 其许可是下列二选一

其余代码则是

贡献

除非您另有明确说明,否则您有意提交以包含在作品中的任何贡献,如 GPL-3.0 许可中所定义,应按上述方式获得许可,没有任何附加条款或条件。