Snowflake
Snowflake — pluggable transport для Tor, работающий через WebRTC. Идея: тысячи волонтёров устанавливают браузерное расширение (или запускают Snowflake в фоне), их браузеры становятся временными proxy-точками. Клиенту дают случайную из них, он подключается WebRTC-звонком, через этого волонтёра идёт в Tor.
Почему это работает против цензуры
- Динамические IP. Snowflake-прокси — это обычные домашние IP пользователей со всего мира. Постоянно меняются, банить бесполезно.
- Похоже на видеозвонок. WebRTC — стандартный протокол Zoom / Google Meet / Discord / Telegram. Блокировать WebRTC полностью — сломать видеосвязь для всех.
- STUN/TURN серверы. Использует Google STUN / другие публичные STUN, которые тоже сложно заблокировать (пришлось бы отрубать Google целиком).
Как устроен
[client] ⟶ [broker] (говорит: "хочу прокси")
⟵ [broker] (даёт SDP offer от прокси)
[client] ⟷ [proxy = чей-то браузер] (WebRTC-канал)
⟶ [bridge = Tor-мост]
⟶ Tor-сеть
- Клиент шлёт запрос на broker (rendezvous-сервер, знаменитая проблема: его тоже блокируют, поэтому доступ к нему сам маскируется через domain fronting).
- Broker находит свободного волонтёра, обменивает SDP-предложения между клиентом и волонтёром.
- Клиент устанавливает WebRTC data-channel с волонтёром.
- Волонтёр перекидывает пакеты на «настоящий» Tor snowflake-мост.
- С Tor-моста трафик уходит в сеть Tor как обычно.
Стать волонтёром
Тысячи людей помогают этой системой. Способы:
- snowflake.torproject.org — просто открыть вкладку, будет проксировать пока вкладка активна.
- Расширение для Firefox/Chrome: Snowflake add-on. Работает в фоне, кушает минимум трафика (обычно <10 МБ/сутки).
- Standalone-версия для сервера:
snowflake-proxyиз go-репо.
Настроить лимит трафика можно (по умолчанию 0 = без лимита, но в браузерной версии активен только пока вкладка открыта).
Плюсы
- IP-адреса прокси меняются постоянно и бесконтрольно — блокировать бесполезно.
- Похоже на легитимный WebRTC — DPI трудно отличить от видеозвонка.
- Работает в самых жёстких режимах (Иран, Туркменистан).
Минусы
- Медленно и нестабильно. Прокси = чей-то браузер, может закрыться в любой момент. Клиент постоянно переподключается к новым.
- Broker — точка отказа. Если broker заблокирован, ты не можешь получить прокси. Broker сам защищается через domain fronting или Tor.
- WebRTC утечки. WebRTC палит локальный IP через STUN. В контексте Snowflake это не критично, но принцип остался.
- Не бридж-агностик. Есть только один общий snowflake-мост в Tor. Если его атакуют — все snowflake-пользователи страдают.
Идейные потомки
Схема Snowflake повлияла на olcRTC — тоже WebRTC-туннель, но не для Tor, а для произвольного TCP-трафика (VLESS/SS/что угодно) под видом Jitsi/Yandex Telemost.