12 home
meskio edited this page 2022-03-18 09:38:51 +00:00

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 has been fixed, it needs to be retested now)

snowflake-schematic.png

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:

  1. 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, Fedora, ArchLinux, FreeBSD and Ubuntu created by Jacobo Nájera: https://galaxy.ansible.com/nvjacobo/snowflake

Compiling and running from source
  1. 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.

  2. Clone the source code.

    git clone https://git.torproject.org/pluggable-transports/snowflake.git
    
  3. Build the Snowflake proxy.

    cd snowflake/proxy
    go build
    
  4. 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 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.

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:

  1. Request an account at the Tor Project GitLab, then open a new issue in the Snowflake project.
  2. 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.