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.
User graph: https://metrics.torproject.org/userstats-bridge-transport.html?transport=snowflake.
Evaluation at PluggableTransports/SnowFlakeEvaluation.
欢迎测试 Tor 浏览器的新网桥 (目前仅支持 Mac OS X 与 Linux) (#22782 (closed) has been fixed, it needs to be retested now)
How to run a Snowflake proxy
Option 1 (addon)
Firstly make sure you have WebRTC enabled. Then you can install this addon for Firefox or this one for Chrome which will let you become a Snowflake proxy. It can also inform you about how many people you have helped in the last 24 hours.
Option 2 (web browser)
In a browser where WebRTC is enabled:
- Go to https://snowflake.torproject.org/embed and toggle the button to opt in to being a proxy. You shouldn't close that page if you want to remain a snowflake bridge.
Option 3 (standalone)
There are several ways to setup and run a standalone Go snowflake proxy.
Docker setup
You must first have Docker and docker-compose installed.
We have a Docker image to ease the setup of a snowflake proxy. First download docker-compose.yml. Then, deploy the proxy by running
docker-compose up -d snowflake-proxy
You should now see the output:
Creating snowflake-proxy ... done
and your proxy is up and running!
Ansible
There is now an ansible role to install a Snowflake proxy on Debian created by Jacobo Nájera: https://galaxy.ansible.com/nvjacobo/snowflake
Compiling and running from source
-
First you will need to install and configure Go to build the standalone proxy-go code. If you are running Ubuntu or Debian, you can install Go by executing
apt install golang
. Otherwise visit https://golang.org/dl/. You will need Go 1.13+ to run the Snowflake proxy. -
Clone the source code.
git clone https://git.torproject.org/pluggable-transports/snowflake.git
-
Build the Snowflake proxy.
go build
-
Run the Snowflake proxy.
For our fallback proxy-go instances on snowflake-broker, we manage proxy-go instances using runit. However, a simpler nohup command will also allow you to run an instance in the background.
nohup ./proxy &
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
Snowflake is included in alpha releases of Tor Browser.
Integration of Snowflake into stable Tor Browser is being tracked at ticket #19001 (closed).
To build from source code, see doc/TorBrowser/Hacking. In the tor-browser-build directory, make alpha
or make testbuild
will result in browsers with included Snowflake.
WebRTC fingerprintability
Notes at Fingerprinting.
Reporting bugs
There are two ways to file a bug report:
- Request an account at the Tor Project GitLab, then open a new issue in the Snowflake project.
- File an anonymous ticket by generating an identifier and logging in with it. Then, find the Snowflake project in the "List of all projects" and create a new issue.
Please try to be as descriptive as possible with your ticket and if possible include log messages that will help us reproduce the bug.