wiki:doc/Snowflake

Version 20 (modified by dcf, 23 months ago) (diff)

Include snowflake keyword in ticket list.

Snowflake

Overview

Snowflake is a pluggable transport that proxies traffic through temporary proxies using WebRTC, a peer-to-peer protocol with built-in NAT punching. It aims to work kind of like flash proxy, but without flash proxy's problems with NAT.

Work in progress.

[tor-dev] Introducing Snowflake (webrtc pt)
https://lists.torproject.org/pipermail/tor-dev/2016-January/010310.html

User graph: https://metrics.torproject.org/userstats-bridge-transport.html?transport=snowflake.

Evaluation at PluggableTransports/SnowFlakeEvaluation.

How to run a Snowflake proxy

Option 1 (web browser)

  1. Go to https://keroserene.net/snowflake/options.html and click the Yes button to opt in to being a proxy.
  2. Go to https://keroserene.net/snowflake/snowflake.html and watch the status messages.

Option 2 (standalone)

  1. Get the #Source code.
  2. cd proxy-go
    go get
    go build
    ./proxy-go
    

Source code

https://gitweb.torproject.org/pluggable-transports/snowflake.git

The following should result in a 100% bootstrap over WebRTC:

git clone https://git.torproject.org/pluggable-transports/snowflake.git
cd snowflake/client
go get
go build
tor -f torrc

Integration with Tor Browser

(Work in progress.)

The integration of Snowflake into Tor Browser is being tracked at ticket #19001. Here is a guide on getting started. For background reading, see doc/TorBrowser/Hacking, doc/TorBrowser/BuildingWithGitian, and gitian/README.build.

You need to start with an installation of Ubuntu (probably 14.04 is the best bet). You can also build on Debian (e.g. stretch), but dcf had trouble in the make-base-vm stage and had to run that stage on Ubuntu (the rest worked on Debian).

Clone gitian-builder and dcf's branch of tor-browser-bundle. The gitian-builder and tor-browser-bundle directories need to be siblings.

git clone -b tor-browser-builder-4 https://git.torproject.org/builders/gitian-builder.git
git clone https://git.torproject.org/builders/tor-browser-bundle.git
cd tor-browser-bundle
git remote add dcf https://git.torproject.org/user/dcf/tor-browser-bundle.git
git fetch dcf
git checkout -b snowflake --track dcf/snowflake

Enter the tor-browser-bundle/gitian directory and repeatedly run the script check-prerequisites.sh, doing what it says until it stops complaining. It's going to ask you to install a bunch of packages, perhaps create groups, and install a patched python-vm-builder program.

cd tor-browser-bundle/gitian
./check-prerequisites.sh

Now make the prep-alpha target. This will build the base VMs the first time you run it, and will take a long time. It will also download all the source files, which will also take a long time. TORSOCKS= causes the downloads to not use Tor.

make prep-alpha TORSOCKS=

Then to kick the whole thing off, do this:

make build-alpha

Making the build-alpha target, rather than just alpha, enables you to restart the build where it left off after a failure. Making just alpha will cause the whole process to start from scratch, discarding everything except the base VMs—you usually don't want to do that.

While the build is running, it will seem like nothing's happening. You can see what's happening by tailing the log files gitian-builder/var/install.log and gitian-builder/var/build.log.

Currently the build only works for linux. After building the linux bundles, it will fail somewhere in the middle of windows. An alternative to make build-alpha that only builds the linux bundles is ./mkbundle-linux.sh versions.alpha (see the build-alpha target in tor-browser-bundle/gitian/Makefile).

When the build is finished you will have a newly created directory named after the Tor Browser version number, containing tar.xz and other files. Intermediate results appear in gitian-builder/inputs, alongside downloaded source files. The intermediate result files have names that include "gbuilt", e.g. pluggable-transports-linux32-gbuilt.zip.

Current problems you will run into:

  • If you run into ssh: connect to host localhost port 2223: Connection refused, this means qemu failed to start due to lack of RAM. You may encounter this if you try to build on a droplet that's too small.

WebRTC fingerprintability

Notes at Snowflake/Fingerprinting.

Tickets

See also: https://github.com/keroserene/snowflake/issues https://github.com/keroserene/go-webrtc/issues

Ticket Summary Status Owner Keywords Priority
#24465 Snowflake broken if no libatomic on host needs_revision tbb-team snowflake, tbb-rbm Medium
#25601 Multiplex - one snowflake proxy should be able to support multiple clients new snowflake tor-pt Medium
#25966 Report on Tor in the UAE (and question about Snowflake) new dcf snowflake Very Low
#27385 https://snowflake.torproject.org/embed is confusing new snowflake, ux-team High
#29207 New design for broker -- proxy protocol for snowflakes new snowflake, design Very High
#29245 Tor 0.4 eventually hits "Delaying directory fetches: No running bridges" after some period of inactivity with bridges new 040-regression, snowflake, 040-deferred-20190220 Medium
#29293 New Design for client -- broker protocol for Snowflake new snowflake, bridges, broker High
#29734 Broker should receive country stats information from Proxy and Client merge_ready cohosh snowflake, geoip, stats Medium
#29736 Use WebSocket protocol to communicate between snowflake proxies and broker assigned ahf snowflake, websocket Medium
#29863 Add disk space monitoring for snowflake infrastructure merge_ready snowflake Medium
#30310 Snowflake localization new l10n, snowflake Medium
#30498 Proxy-go is receiving a lot of client timeouts new snowflake Medium
#30513 Add {arlolra, cohosh, dcf} to default Cc of Circumvention/Snowflake tickets new qbi snowflake Medium

Attachments (4)

Download all attachments as: .zip