noisy-shuttle establishes an AEAD-encrypted secure tunnel with forward secrecy for circumventing Internet censorship. It is designed to be indistinguishable from TLS traffic with any chosen website for camouflage by copying authentic TLS handshake messages.
A shuttle server authenticates clients based on tokens piggybacked by some fields of TLS ClientHello and falling back to dumb relay when authentication failed, preventing active probing.
It is inspired by the brilliant idea of shadow-tls and built upon snow (the Rust implementation of Noise protocol).
Eavesdropper-verifiable authentic TLS handshakes with any chosen camouflage website, requiring no certificates
PSK-based covert authentication piggybacked by TLS client random and session id field
AEAD encrypted traffic with forward secrecy via ECDHE
Customizable TLS client fingerprints specified via Cli option
Server:
# server listen_addr camouflage_addr password
./noisy-shuttle server 0.0.0.0:443 www.example.com:443 Teap0taa -v
camouflage_addr
is to where TLS handshaking requests from clients are forwarded and from where responses are forwarded backed to clients.
Typically, it should be a well-known website that looks "innocent". Its port CANNOT be omitted.
Client:
# client listen_addr remote_addr sni password
./noisy-shuttle client 127.0.0.1:1080 server.addr.example:443 www.example.com Teap0taa -v
The client would serve a SOCKS5/HTTP (adaptive) proxy at listen_addr
.
remote_addr
is where the shuttle server is located.
sni
should match camouflage_addr
specified server-side.
Or optionally specifying a TLS fingerprint (chrome):
./noisy-shuttle client 127.0.0.1:1080 server.addr.example:443 www.example.com Teap0taa --tls-ja3 769,2570-4865-4866-4867-49195-49199-49196-49200-52393-52392-49171-49172-156-157-47-53,2570-0-23-65281-10-11-35-16-5-13-18-51-45-43-27-17513-2570-21,2570-29-23-24,0 --tls-alpn h2,http/1.1 --tls-sigalgos 1027,2052,1025,1283,2053,1281,2054,1537 --tls-versions 2570,772,771 --tls-keyshare 2570
e, ee
into server-side CCS in TLS 1.2