A fast TCP/UDP tunnel, transported over HTTP WebSocket.
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 ```