4个版本

0.1.3 2019年6月10日
0.1.2 2019年5月12日
0.1.1 2019年5月12日
0.1.0 2019年5月12日

#16 in #receive

BSD-3-Clause

90KB
1.5K SLoC

Build Status License

Mooncell

一个DNS over HTTPS代理/网桥。目标是什么?通过避免使用你的ISP DNS解析器来提高你的隐私。

它接收DNS请求(通过UDP和TCP)并使用用户选择的提供商进行解析。

试试吧!

cargo install mooncell
# ...
mooncell -h

如你所见,Mooncell还有很多功能要实现,才能被认为是“生产级”的,但现在它足够你玩玩。

1.0版本的要求

  • 通过预先解析提供商的主机名来避免循环调用。可能需要在启动时使用基于IP的DNS解析器列表。
  • 完整的端到端解析
  • 可配置的监听端口
  • 支持UDP请求
  • 支持TCP请求
  • 内置的提供商列表以供选择
  • 通过JSON实现DNS-over-HTTPS
  • 通过返回空响应来处理解析错误
  • 切换到Rust 2018

后续功能

  • 采用Rust官方工具(如rustfmt、clippy等)进行代码格式化和样式化
  • 可配置的本地缓存(初始为内存中,然后考虑基于文件的存储)
  • 通过二进制消息实现DNS-over-HTTPS
  • 用户可配置的提供商
  • 通过IP而不是通过FQDN访问提供商(即在启动时解析,然后发送Host头)

IETF

(稳定) DNS-over-HTTPS提供商

DNS协议

其他

编译

Windows (x64)

  1. 通过大型开发二进制文件或其他可能且痛苦的方式安装Windows 64位OpenSSL
  2. 设置变量 set OPENSSL_DIR=c:\OpenSSL-Win64(假设您将其安装在默认路径)
  3. cargo build现在应该可以工作了

个人笔记

  • 处理器 Processor 和服务器 Server 都是服务(类似于 Guava 服务):您应该启动它们、停止它们,并且(可选)等待它们终止。我认为在这里实现一个提供类似 Guava 的服务 Traits 的小型 crate 是一个很好的主意。 更新: 已创建 srvzio,现在 Mooncell 的服务基于它。
  • 我用线程做了所有事情,但最后我预计会用正确的 Rust async/await 重新编写一切。我无法克服 Tokio + Hyper 的学习曲线,同时还要学习 Rust 语言本身。

依赖项

~18–27MB
~449K SLoC