Pluggable Transport using WebRTC, inspired by Flashproxy.
Find a file
2016-01-19 18:06:40 -08:00
client consolidate RequestInfo into MeekChannel with a simplified Negotiate method 2016-01-19 18:06:40 -08:00
proxy use coffeelint 2016-01-15 08:47:06 -08:00
rendezvous begin appengine rendezvous component - domain fronting works, 2016-01-19 13:24:57 -08:00
server Use chan struct{} instead 2016-01-19 13:41:19 -08:00
.gitignore use coffeelint 2016-01-15 08:47:06 -08:00
LICENSE add LICENSE (closes #4) 2016-01-02 11:20:32 -08:00
README.md add --meek flag to client to toggle the domain fronted rendezvous 2016-01-19 17:21:10 -08:00

snowflake-pt

A Pluggable Transport using WebRTC

Status

  • Successfully bootstraps over WebRTC, both directly to a server plugin, as well as through the browser which proxies WebRTC to websocket.
  • Needs work on signaling with the facilitator.

Usage

There are currently two ways to try this:

  • Directly to the go-webrtc server plugin.
  • Through a browser snowflake proxy.

Using the server plugin uses an HTTP server that simulates the interaction that a client would have with a facilitator. Using the browser proxy (which will soon be the only way) requires copy and pasting between 3 terminals and a browser tab. Once a signalling facilitator is implemented (issue #1) this will become much simpler to use.

-- Via WebRTC Server --

Edit server/torrc and add "-http 127.0.0.1:8080" to the end of the ServerTransportPlugin line:

ServerTransportPlugin snowflake exec ./server -http 127.0.0.1:8080
cd server/
go build
tor -f torrc

Edit client/torrc and add "-url http://127.0.0.1:8080" to the end of the ClientTransportPlugin line:

ClientTransportPlugin snowflake exec ./client -url http://127.0.0.1:8080/
cd client/
go build
tor -f torrc

At this point the tor client should bootstrap to 100%.

-- Via Browser Proxy --

Open up three terminals for the client:

A: tor -f torrc SOCKSPort auto

B: cat > signal

C: tail -F snowflake.log

To connect through the WebRTC browser proxy, first make sure coffeescript is installed. Then, build with:

cd proxy/
cake build

Then start a local http server in the proxy/build/ in any way you like. For instance:

cd build/
python -m http.server

Open a browser tab to 0.0.0.0:8000/snowflake.html. Input your desired relay address, or nothing/gibberish, which will cause snowflake to just use a default relay.

  • Look for the offer in terminal C; copy and paste it into the browser.
  • Copy and paste the answer generated in the browser back to terminal B.
  • Once WebRTC successfully connects, the browser terminal should turn green. Shortly after, the tor client should bootstrap to 100%.

More

To try using the Meek signaling channel (which will soon be fully ready), add the --meek flag like so:

ClientTransportPlugin snowflake exec ./client --meek

More documentation on the way.