mooncell-0.1.0 is not a library.
Mooncell
A DNS over HTTPS proxy/bridge.
It receives DNS requests (over UDP and TCP) and resolves them using a user selected provider.
Requirements for 1.0
- Full end-to-end resolution
- Configurable port to listen on
- Support for UDP requests
- Support for TCP requests
- Built in list of providers to pick from
- DNS-over-HTTPS via JSON
- Handle resolution errors by returning an empty response
- Switch to Rust 2018
Follow-up features
- Adopt Rust official tooling for code formatting/styling (
rustfmt,clippy, ...) - A configurable, local cache (in memory to begin with, then look into file backed)
- DNS-over-HTTPS via binary message
- User-configurable provider
- Reach providers via IP, not via FQDN (i.e. resolve at launch, then send
Hostheader)
Related documentation
IETF
(Stable) Providers of DNS-over-HTTPS
DNS protocol
Other
- curl DoH wiki/tracker
- Rust doh-proxy (similar project to this one)
Compiling
Windows (x64)
- Install OpenSSL for Windows 64 bit via the large dev binaries, or in one of the other possible, painful ways
- Set varialbe
set OPENSSL_DIR=c:\OpenSSL-Win64(assuming you installed it in the default path) cargo buildshould now work
Personal notes
BothUPDATE: Created srvzio and now Mooncell's services are based on it.ProcessorandServerare services (similar to Guava services): you are suppose to start them, stop them and (optionally) wait for them to terminate. I think there is a good case here for implementing a tiny crate that provides Trait(s) for services a la Guava.- I made everything with Threads, but by the end I expect to rewrite everything using proper Rust async/await. I just could not surmount the Tokio + Hyper learning curve while also doing the same for the Rust language itself.