Skip to content

GitLab

  • Projects
  • Groups
  • Snippets
  • Help
    • Loading...
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in
S
Snowflake
  • Project overview
    • Project overview
    • Details
    • Activity
    • Releases
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 42
    • Issues 42
    • List
    • Boards
    • Labels
    • Service Desk
    • Milestones
  • Merge Requests 5
    • Merge Requests 5
  • CI / CD
    • CI / CD
    • Pipelines
    • Jobs
    • Schedules
  • Operations
    • Operations
    • Incidents
    • Environments
  • Analytics
    • Analytics
    • CI / CD
    • Repository
    • Value Stream
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Members
    • Members
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar

GitLab is used only for code review, issue tracking and project management. Canonical locations for source code are still https://gitweb.torproject.org/ https://git.torproject.org/ and git-rw.torproject.org.

  • The Tor Project
    • A
      Anti-censorship
  • Pluggable Transports
  • Snowflake
  • Wiki
  • Home

Last edited by David Fifield Feb 05, 2021
Page history

Home

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)
  • technical writeup
  • thesis chapter

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)

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)

  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/. Once it is installed, set up your workspace and environment variables (more detailed instructions here: https://golang.org/doc/code.html#Workspaces).
mkdir -p ~/go/src
echo "export GOPATH=$HOME/go" >> ~/.bash_profile
source ~/.bash_profile
  1. Clone the source code the src/ directory of your workspace.
cd $GOPATH/src
git clone https://git.torproject.org/pluggable-transports/snowflake.git
  1. Get the dependencies and build the source code.
cd snowflake
cd proxy
go get
go build
  1. 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:

  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.

Clone repository
  • Fingerprinting
  • NAT matching
  • SnowflakeProxyAndroid
  • Home