#tunnel #connection #cloudflare #access #trust #zero #port

libcfd

A port of cloudflared (Cloudflare Tunnel Client) to Rust

2 releases

new 0.1.1 Mar 6, 2025
0.1.0 Feb 9, 2024

#1447 in Network programming

Download history 7/week @ 2024-12-07 1/week @ 2024-12-14 4/week @ 2025-02-15 16/week @ 2025-02-22 50/week @ 2025-03-01

70 downloads per month

Apache-2.0

23KB
324 lines

LibCFD

A port of cloudflared (Cloudflare Tunnel Client) to Rust.

Note

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. :)

Purpose

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.

Features

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)

To Do

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

Performance

Work in progress. Seems to be able to hit 1gbps at least.

Examples

Http Hello World

Creates a HTTP server that sends simple "hello world" response.

cargo run --example http_hello_world

Http Download

Creates a HTTP server that sends data as fast as possible.

cargo run --example http_download

Http Download

Creates a HTTP server that receives data as fast as possible.

cargo run --example http_upload

Websocket Echo

Creates a WebSocket server that echos all received Websocket messages.

cargo run --example websocket_echo

Dependencies

~19–32MB
~614K SLoC