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
90KB
1.5K SLoC
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协议
其他
- curl DoH wiki/tracker
- Rust doh-proxy(与本项目类似的项目)
编译
Windows (x64)
- 通过大型开发二进制文件或其他可能且痛苦的方式安装Windows 64位OpenSSL
- 设置变量
set OPENSSL_DIR=c:\OpenSSL-Win64
(假设您将其安装在默认路径) cargo build
现在应该可以工作了
个人笔记
- 处理器
Processor
和服务器Server
都是服务(类似于 Guava 服务):您应该启动它们、停止它们,并且(可选)等待它们终止。我认为在这里实现一个提供类似 Guava 的服务 Traits 的小型 crate 是一个很好的主意。 更新: 已创建 srvzio,现在 Mooncell 的服务基于它。 - 我用线程做了所有事情,但最后我预计会用正确的 Rust async/await 重新编写一切。我无法克服 Tokio + Hyper 的学习曲线,同时还要学习 Rust 语言本身。
依赖项
~18–27MB
~449K SLoC