A port of cloudflared (Cloudflare Tunnel Client) to Rust.
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