跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • dcompass – 纯 Rust 实现的高性能混合 DNS 服务器
未分類
2020 年 11 月 23 日

dcompass – 纯 Rust 实现的高性能混合 DNS 服务器

dcompass – 纯 Rust 实现的高性能混合 DNS 服务器

資深大佬 : LEXUGE 8

https://github.com/LEXUGE/dcompass

具体内容都在 GitHub 里,功能大概为: 高速( 760 qps ) 自由路由规则,支持递归嵌套,且提供完整运行前功能检查 支持 DoH (未来支持 UDP ) 缓存持久化,应对恶劣网络环境 应对网络环境热切换(不会出现 SmartDNS Wi-Fi 换 4G 直接 DoH 断连的问题) IPv6 AAAA 屏蔽 选择性 SNI 发送,防止 SNI 被侦测 纯 Rust 实现 轻量域名匹配( 160 us per match )

目前自用体验良好,deploy it and forget it 自测速度快于 smartdns ( 640 qps )

nixos 用户可以看一下 https://github.com/icebox-nix/netkit.nix ,内含打包好的 dcompass 以及可以直接使用的 nixos module

大佬有話說 (36)

  • 資深大佬 : billzhuang

    支持下,阅读代码中

  • 資深大佬 : no1xsyzy

    建议发 /go/create

  • 資深大佬 : lbp0200

    异步模型用的协程吗?

  • 主 資深大佬 : LEXUGE

    @lbp0200 (不是很了解具体术语)是基于 tokio runtime 的,目前因为 tokio 0.2 和 0.3 的迁移,upstream 是 single-threaded 的,event loop 是 multi-threaded. 未来迁移以后可能性能会更好一些

  • 資深大佬 : xarthur

    支持 ipset 吗?

  • 資深大佬 : tpsxiong

    支持 unbound 那样的迭代查询不

  • 主 資深大佬 : LEXUGE

    @xarthur 目前还不支持,但是代码设计的时候就考虑到这点了

  • 主 資深大佬 : LEXUGE

    @tpsxiong recursive query 吗,只要请求写了 recursive needed 的话上游就会支持,因为实际上这是一个 DNS 转发服务器

  • 資深大佬 : shynome

    qps 要讲在什么配置下的,不同配置下的 qps 不同

  • 主 資深大佬 : LEXUGE

    @shynome 我给两个测试用了相同语义的配置。虽然数据会有变化,但是还是能反应在相同网络环境和相同设备上的速度的。

  • 資深大佬 : Jirajine

    不错,正好也想用 rust 实现一个 dns 转发器。
    提几个建议:
    1. 配置文件支持 yaml/toml 。
    2. 把核心逻辑抽出来写成 lib,方便调用。
    3. 支持更多规则,正则、abp 等。
    4. 支持扩展插件,弄个 Python 脚本或者像 coredns 一样留个框架让用户自己添加代码再重编译。

  • 資深大佬 : Jirajine

    以及 smartdns 特有的 过期缓存、prefetch 、速度测试等,这样就可以完全替代,解决 smartdns 仅 Linux 可用的问题。

  • 主 資深大佬 : LEXUGE

    @Jirajine 插件还未考虑,不过核心逻辑 droute 是一个 lib,且提供 trait 支持自己实现匹配规则

  • 資深大佬 : Jirajine

    @LEXUGE 我这里指的插件主要是 hook,让用户在处理请求时注入自己的自定义代码。
    大概是这样:
    fn process_dns(&c: Context){
    plugin_A(c);
    plugin_B(c);
    // 用户自己实现一个函数或类型,然后插入到这里。
    }
    然后在你自己的核心逻辑中调用 process_dns 函数。

  • 資深大佬 : tpsxiong

    @LEXUGE iterative dns query

  • 資深大佬 : zro

    能不能像 dnsmasq 那样可以有 add-subnet 选项,配合上游 EDNS 。。

    好像没找到其他能 add-subnet 的 DNS 转发,包括 unbound~~ dcompass - 纯 Rust 实现的高性能混合 DNS 服务器

  • 主 資深大佬 : LEXUGE

    @zro 目前只做了包转发,added to the todo list

  • 資深大佬 : INTEL2333

    话说大佬,能不能做个双栈 EDNS
    v4 和 v6 非同一个运营商提供的时候非常难受

    比如 A 记录走 8888,AAAA 记录走 2001:4860:4860::8888

    或者

    向 8.8.8.8 发送两次查询,EDNS 分别对应 v4 和 v6

  • 資深大佬 : zro

    @INTEL2333 #18 应该跟你差不多,v6 是 HE 的,能说下你是什么方案吗?
    我现在的方案不太成熟,要开两个 unbound,其中一个只查 v6 。。。dcompass - 纯 Rust 实现的高性能混合 DNS 服务器

  • 資深大佬 : INTEL2333

    @zro 我现在是开了 2 个 adgh

    adgh1 是 v4 only

    adgh2 是选优模式,上游 adgh1 和 2001:4860:4860::8888

    不过出结果太慢了

  • 主 資深大佬 : LEXUGE

    @zro EDNS 我没有
    @INTEL2333 可以考虑,不过我没有 v6 环境,很难测试

  • 主 資深大佬 : LEXUGE

    新加入了 DNS over TLS 功能的支持

  • 資深大佬 : INTEL2333

    @zro 还有个可能不符合你要求的解决方案,只用一个 adgh

    用 8.8.8.8 并过滤
    240e:*
    2408:*
    2409:*

  • 資深大佬 : INTEL2333

    @LEXUGE 唔,应该不用 v6 环境也能测试,方案 2 的话,应该指定一下 edns 地址就可以了

    蟹蟹大佬啦

  • 資深大佬 : HalloCQ

    @zro 支持 edns 的大把。overture,adguardhome 等等

  • 主 資深大佬 : LEXUGE

    @HalloCQ overture 挺 buggy 的…我还修过一个 bug…也就是因为它和 smartdns 都很 buggy 我才决定自己写
    打算支持 EDNS,回去写个 roadmap

  • 資深大佬 : HalloCQ

    @LEXUGE 我也没用它了,刚换成 adgh,感觉挺好用

  • 資深大佬 : zgzh

    感谢~已经部署,成功运行,查询速度很快

  • 資深大佬 : zro

    @INTEL2333 #23
    ADGH 要是能加上“只查询 IPv6”功能就好弄多了;像你这样 ADGH 开一个 v4 only 的,有遇到像这样的情况吗?
    手机挂 Surge 开 T 宝,查最近请求时发现,居然还会访问某个 v6 IP 的网站,无域名的;偶尔一打开又会问我要不要切换到美国版 T 宝。。但看 Surge 的请求,IP 归属地都是五星旗 dcompass - 纯 Rust 实现的高性能混合 DNS 服务器

    @HalloCQ #25

    ADGH 的 ECS settings:edns_client_subnet — Enable EDNS Client Subnet option. If enabled, AdGuard Home will be sending ECS extension to the upstream DNS servers. Please note, that this will be done for clients with public IP addresses only.

    从公网查询才有效果的。。因为我是在境外 VPS 搭,所以需要像 dnsmasq 的 add-subnet 这样的功能,没发现 ADGH 有其他 ECS 的设置~ dcompass - 纯 Rust 实现的高性能混合 DNS 服务器

  • 資深大佬 : INTEL2333

    @zro 唔,没遇到过
    上面那个方案其实还可以节省一个 adgh

    上游 8.8.8.8 和 2001:4860:4860::64,选优模式

    过滤
    240e:*
    2408:*
    2409:*
    64:ff9b::*

    不过似乎会造成无 aaaa 的域名在查询 aaaa 记录时返回时间超过 1s

  • 資深大佬 : INTEL2333

    @zro 话说淘宝会不会也有类似腾讯的 httpdns ?
    如果有的话似乎就难办了,只能 ip6tables 来 drop 了

  • 主 資深大佬 : LEXUGE

    @zgzh 啊这,我都没法 crate,你直接 build 的吗
    我不敢保证现在不会有 breaking change,不过感谢支持

  • 資深大佬 : zgzh

    @LEXUGE 是的 下载源码后 cargo build –release,在树莓派上顺利构建

  • 主 資深大佬 : LEXUGE

    @zgzh 那我打算提供一下交叉编译版本

  • 資深大佬 : HalloCQ

    @zro 因为你的 adgh 部署在服务器上,当你本地向 adgh 请求的时候,adgh 拿到的就是你的公网 ip 了

  • 資深大佬 : HalloCQ

    @zro 就算运营商分配给你的不是公网 ip,但是你 adgh 是搭在一个外网的 vps 上,难道 adgh 还能拿到你的内网 ip 不成?

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具