A port of cloudflared (Cloudflare Tunnel Client) to Rust.
The current version is merely a proof of concept, and I am currently in the process of rewriting the whole crate with documentation, and a much more reasonable interface based on http-rs. My exams end on May 16, so I'll try to get it done by the end of may. :)
LibCFD intends to be lightweight and programmable replacement for cloudflared and its command line wrappers. The main advantage of LibCFD is that we don't have to spawn a whole new process (that uses a garbage collected runtime) to connect to Cloudflare. Thanks to this, we can save on resources by removing the IPC and GC overheads.
The currently supported features are
- Named tunnel (Zero Trust Network Access)
- Quick tunnel (TryCloudflare)
- QUIC tunnel connection
- HTTP tunnel connection (non-priority)
- Proper client information reporting (priority)
- Tunnel reconnection
- HTTP connection (kind of works, but is a footgun)
- HTTP connection wrapper
- Websocket connection (kind of works, but is an even bigger footgun)
- Websocket connection wrapper
- TCP connection (gated by named tunnel)
- Remote management (gated by named tunnel)
Aside form those already listed above, these two are some to dos I am lookning forward to
- Fix async (some futures are !Send due to capnp, there may be a need to modify capnp)
- Decouple Tokio
- Clean up dependencies
Work in progress. Seems to be able to hit 1gbps at least.
Creates a HTTP server that sends simple "hello world" response.
cargo run --example http_hello_world
Creates a HTTP server that sends data as fast as possible.
cargo run --example http_download
Creates a HTTP server that receives data as fast as possible.
cargo run --example http_upload
Creates a WebSocket server that echos all received Websocket messages.
cargo run --example websocket_echo