rusty-penguin 0.2.0

A fast TCP/UDP tunnel, transported over HTTP WebSockets
Documentation

Rusty Penguin

Logo

Build Releases Crates.io License

A fast TCP/UDP tunnel, transported over HTTP WebSockets. You are right. This project is inspired by jpillora/chisel (and subsequently my fork myzhang1029/penguin), but completely rewritten in Rust without any linkage to chisel. The logo is generated by DALL-E with the prompt "a penguin standing behind a gear wheel, digital art, logo."

Compared to the original penguin or chisel, this project stripped away some functionalities:

  • There is no internal SSH tunnels because it results in double encapsulation when used with HTTPS/WSS.

  • There is no user/password authentication because we do not have SSH. Instead, use PSK authentication.

  • There is no server keep-alive because client keep-alive is enough.

  • There is no reverse port forwarding because it is equivalent to spawning another server on the client side.

  • There is no support to acquire an ACME certificate on-the-fly.

Other than that, this project offers these functionalities compared to chisel:

  • Plausible deniability with WebSocket PSK and working backend.

  • Higher performance: my crude testing on my machine reveals that penguin is approximately 2x faster than chisel on my machine.

$ iperf3 -c 127.0.0.1 # chisel without TLS
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-10.00  sec  3.64 GBytes  3.12 Gbits/sec                  sender
[  5]   0.00-10.01  sec  3.63 GBytes  3.12 Gbits/sec                  receiver

$ iperf3 -c 127.0.0.1 # penguin without TLS
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-10.00  sec  8.50 GBytes  7.30 Gbits/sec                  sender
[  5]   0.00-10.31  sec  8.49 GBytes  7.07 Gbits/sec                  receiver

$ iperf3 -c 127.0.0.1 # chisel with TLS
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-10.00  sec  3.26 GBytes  2.80 Gbits/sec                  sender
[  5]   0.00-10.01  sec  3.26 GBytes  2.80 Gbits/sec                  receiver

$ iperf3 -c 127.0.0.1 # penguin with TLS
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-10.00  sec  6.04 GBytes  5.19 Gbits/sec                  sender
[  5]   0.00-10.44  sec  6.03 GBytes  4.96 Gbits/sec                  receiver
  • All the safety Rust offers.