Skip to content

Commit 2fe3206

Browse files
committed
QUIC Transport implementation
1 parent ea93c85 commit 2fe3206

28 files changed

Lines changed: 1833 additions & 88 deletions

Cargo.lock

Lines changed: 69 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

README.md

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -654,6 +654,36 @@ like normal traffic to bypass your firewall/proxy.
654654
Some firewall may not like to see request with content-length not set, or with content-type set to
655655
application/octet-stream
656656

657+
### Use QUIC instead of websocket for the transport protocol <a name="quic"></a>
658+
659+
Use this if TCP is blocked by your firewall/proxy, but UDP is allowed. It provides better performance on lossy networks.
660+
661+
Start your wstunnel server as usual (it listens on both TCP and UDP if configured):
662+
663+
```bash
664+
wstunnel server wss://[::]:8080
665+
```
666+
667+
On the client the only difference is to specify quic:// instead of wss://
668+
669+
```bash
670+
wstunnel client -L socks5://127.0.0.1:8888 quic://myRemoteHost:8080
671+
```
672+
673+
**Note**: QUIC always uses TLS. A TLS certificate configuration is required on the server side, similar to WSS and HTTPS. The client will validate the certificate by default.
674+
675+
#### Server Scheme Selection
676+
677+
When TLS is enabled (by using `wss://`, `https://`, or `quic[s]://`), the server automatically binds to **both** TCP and UDP on the specified port.
678+
679+
| Server Command Scheme | TLS Enabled? | Listeners Started | Clients that can connect |
680+
| :--- | :--- | :--- | :--- |
681+
| `wss://0.0.0.0:443` | **YES** | TCP:443 **AND** UDP:443 | `wss://`, `https://`, `quic://` |
682+
| `https://0.0.0.0:443` | **YES** | TCP:443 **AND** UDP:443 | `wss://`, `https://`, `quic://` |
683+
| `quic://0.0.0.0:443` | **YES** | TCP:443 **AND** UDP:443 | `wss://`, `https://`, `quic://` |
684+
| `wss://0.0.0.0:443 --quic-listen 0.0.0.0:4433` | **YES** | TCP:443 **AND** UDP:4433 | `wss://`, `https://` (on 443); `quic://` (on 4433) |
685+
| `ws://0.0.0.0:80` | NO | TCP:80 only | `ws://`, `http://` |
686+
657687
### Maximize your stealthiness/Make your traffic discrete <a name="stealth"></a>
658688

659689
* Use wstunnel with TLS activated (wss://) and use your own certificate

cert.pem

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIIFCTCCAvGgAwIBAgIUdKwpCc9t8ghwb1iRTdeUgvLOhjcwDQYJKoZIhvcNAQEL
3+
BQAwFDESMBAGA1UEAwwJbG9jYWxob3N0MB4XDTI1MTIxMzE0Mjk1OFoXDTI2MTIx
4+
MzE0Mjk1OFowFDESMBAGA1UEAwwJbG9jYWxob3N0MIICIjANBgkqhkiG9w0BAQEF
5+
AAOCAg8AMIICCgKCAgEA4eIk/zQ0DJpmNDQimQgAr3K+zp0OheAGLoTyWNSWX6IU
6+
cMBU9Ibwu0QNBTUDLWvCleRdNBvslOcoeMRsGU694NBdHOqWcWfXBJ2IiE3lvNMZ
7+
5Yk3UR3+kYxO0XnFaCvI04/yC5aL8qo/uo+l6osi17nlXSX3rMEvLlAptNi9Xtot
8+
s7kpEAbya8xF9qERCAgUBXCqrAxuXIZfA4c1LzyyUzqixqfJVpDEuu6KwdX/iXAG
9+
LBSw6NJwvUTRnk7iTJlhriPEhUbxT58SYFzKi1KfjYR+XCer1lGf1XvRXCoQJwld
10+
hNAXiHugmNC7SSQfTGxU2UPe6QqDdeng99eyuawy4BIzgLbkRjaFDNaDA4qJuSgp
11+
VZWqKtaVd/ExJ8hpN4QStbx/iSbXzB6NOKwW3mZZsUePTZ+fQ0hLg6yAkCqxoPtg
12+
T5mUFgcf5PaGdhZCGYFPcwPH41Wk6Mwr4EPlvxvGJlYIkRQRazNIVYLEJPmqIJG3
13+
sPVLkm+s7bHa4B670zcoDko6Zu/wHvCDVnIREplhJ8HfABJk/XhZ4K/8jqIr5hOG
14+
UcjpjtgUt6u7cDxF5juG0+j3sOoHkqe8nsZ9Jfo94r26mTlPK4sti/M9zIONOyDA
15+
sqGeSAbfhPPnoJLGMCKjTNZneo1gK38nVmGDJ9dOCW44+Wa3deuSKffnQfYvFk0C
16+
AwEAAaNTMFEwHQYDVR0OBBYEFEvj/z6qOB7mYqgqURSAms7WojRGMB8GA1UdIwQY
17+
MBaAFEvj/z6qOB7mYqgqURSAms7WojRGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZI
18+
hvcNAQELBQADggIBAErWRNwfzkgs9aMu7mLU0/RDnOnRxn38mOy5tTm8yRwh9Bz3
19+
A3Br4UdtOzwZJWBcKPG9v+mP66O+iDGdwHLp4a46jzTeyfdGj8TTy9Zb8HQYwtit
20+
aePBWXrLQqG0rd/AjAV+4ZIv6uQcKJu+8dmsDxKart9rf+5k5bk7RY3atWmc6Zcm
21+
8VNwHrP6zRzjxI0MrQK/VFZiYq4hRtp2aEx6yA98knufq49Kz1IueL/f32KDCjJ7
22+
iAH16yPQ2lqNY8IE61CXVMoIVI6uMT3s9+M8bNEj5KzLJkiSnfLNOyXUYJd4enC1
23+
LwvTmCIYI4X8xcSHTzRSB8He3h/yeaY6LKlF2big56r6ssEQaUf/BIOEhvV9/Wg6
24+
f09FdkMQHZi/q0KcgsC34NtGg647sMZi0GUjtkboAGbLhOI+t9xyJks2uQTuB9u6
25+
iJACHneET9aLCvsPM62t6W6T2cYyjAGo+HIN2v8C1h22VfT+p/MSFT0tKRCFI5vG
26+
bmgUUTH4g68/791mGbD/bRiKyemzLtREuXEDxiDjgGawVGkjqwV8bj9wyuHldSRb
27+
Mnfp5NFUopOAd/yNYlrrvj6L6EFt51Zmz9BLV3EvT+WRCXf8If8XTigyxuN0BKnx
28+
rVev2mOltq4zEKWQPGViatbd+uta56uavnk1oALKXK+GIgzRIIs+Tu1ttxkQ
29+
-----END CERTIFICATE-----

key.pem

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
-----BEGIN PRIVATE KEY-----
2+
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
51+
5A3DqjO0OI52QtHNxY9Iu0W32DkK
52+
-----END PRIVATE KEY-----

wstunnel-cli/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "wstunnel-cli"
3-
version = "10.5.2"
3+
version = "10.6.0"
44
edition = "2024"
55

66
[dependencies]

wstunnel-cli/src/main.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ pub enum Commands {
6161

6262
#[tokio::main]
6363
async fn main() -> anyhow::Result<()> {
64+
wstunnel::init_crypto();
6465
let args = Wstunnel::parse();
6566

6667
// Setup logging

wstunnel/Cargo.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "wstunnel"
3-
version = "10.5.2"
3+
version = "10.6.0"
44
edition = "2024"
55
repository = "https://github.com/erebe/wstunnel.git"
66
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
@@ -53,6 +53,7 @@ uuid = { version = "1.18.1", features = ["v7", "serde"] }
5353
derive_more = { version = "2.0.1", features = ["display", "error"] }
5454

5555
tokio-rustls = { version = "0.26.4", default-features = false, features = ["logging", "tls12"] }
56+
quinn = { version = "0.11", default-features = false, features = ["rustls", "runtime-tokio"] }
5657
rcgen = { version = "0.14.5", default-features = false, features = [] }
5758
hickory-resolver = { version = "0.25.2", default-features = false, features = [
5859
"system-config",

0 commit comments

Comments
 (0)