
Туннелирование данных через WebRTC для обхода цензуры
Туннелирует интернет-трафик через платформы видеозвонков (VK Call, Yandex Telemost, WB Stream) для обхода государственной цензуры белых списков.
Пошаговое руководство по установке (на русском): docs/SETUP.md
Доступны два режима туннеля: DC (DataChannel) и Video (кодирование данных VP8). Рекомендуемая конфигурация — headless на обоих концах — чистый Go (Pion) напрямую взаимодействует с SFU платформы, без браузера. Обфускация ChaCha20, настраиваемый VP8 pacing и бэкенд LiveKit/WB Stream — это функции, доступные только в headless-режиме.
Устаревший браузерный путь (Android WebView joiner против Electron desktop creator с JS-хуками) всё ещё работает для VK DC, но он медленнее, не может обфусцировать и постепенно выводится из эксплуатации. Новые развёртывания должны использовать headless.
Pion открывает SCTP DataChannel на publisher PC и туннелирует TCP/UDP через него. Кадры проходят через SFU платформы как любая другая полезная нагрузка DataChannel.
Joiner (censored, Android/iOS/Linux) Creator (free internet)
All apps
|
VpnService (captures all traffic)
|
tun2socks (IP -> TCP)
|
SOCKS5 proxy (Go, :1080)
|
Headless joiner (Pion) Headless creator (Pion)
| |
DataChannel <------- SFU -------> DataChannel
|
Relay bridge
|
Internet
Тот же конвейер, что и в режиме DC, но туннель передаётся через опубликованный видеотрек VP8 вместо SCTP DataChannel. Полезно, когда SFU ограничивает скорость DataChannel, но пропускает RTP (например, Telemost), а в некоторых случаях обязателен на платформе (publisher track в WB Stream всегда видео). Кадрирование туннеля и мультиплексирующий слой над ним такие же, как в режиме DC.
Трафик проходит через SFU платформы, который находится в государственном белом списке. Для DPI это выглядит как обычный видеозвонок.
relay/ — Go-релей, общий для обоих концов: SOCKS5-прокси, обвязка tun2socks, туннель DC/VP8, обфускатор ChaCha20, мультиплексор соединений, привязки gomobile/iOSheadless/vk/ — Headless VK creator: создаёт или присоединяется к звонку через VK HTTP API, туннель Pion DC/VP8, без браузераheadless/telemost/ — Headless Telemost (Yandex) creator с той же модельюheadless/wbstream/ — Headless WB Stream creator (на базе LiveKit, анонимные гостевые токены)headless/dion/ — Headless DION creator с той же модельюheadless/bitrix/ — Headless Bitrix creator (адаптивный DC/VP8, гостевое присоединение)headless/wbstream-joiner/ — Desktop WB Stream joiner (аналог creator, используется для тестов и Linux-клиентов)headless/telemost-joiner/ — Desktop Telemost joiner (аналог creator, используется для тестов и Linux-клиентов)headless/dion-joiner/ — Desktop DION joiner (аналог creator, используется для тестов и Linux-клиентов)headless/bitrix-joiner/ — Desktop Bitrix joiner (аналог creator, используется для тестов и Linux-клиентов)headless/vk-bot/ — Автономный VK Long Poll бот, который по запросу запускает headless creators и отвечает ссылкой для присоединения (серверная альтернатива Electron-боту)headless/tests/ — Живые сквозные тесты (creator + joiners через реальный SFU); запускаются на том же хосте или в докеризованном netns-стенде, см. headless/tests/README.mdandroid-app/ — Android joiner: VpnService + tun2socks + headless Pion (основной путь); также сохраняет WebView fallback для устаревшего браузерного потокаios-proxy-app/ — iOS joiner: SOCKS5 + headless Pion через gomobile xcframeworkcreator-app/ — Electron desktop creator app: GUI-фронтенд, который может запускать либо устаревший браузерный путь, либо порождать headless Go-бинарники; подходит как для интерактивного использования, так и для развёртыванийhooks/ — JavaScript-хуки для устаревшего браузерного пути (режимы DC и Video, VK и Telemost). Headless не использует JS-хуки.Готовые бинарники доступны на GitHub Releases.
Скачайте и запустите Electron-приложение из GitHub Releases. Оно автоматически включает Go-релей.
Важно: Звонок должен быть создан из Creator-приложения. Присоединение к существующему звонку из приложения не сработает — JS-хуки должны присутствовать с момента начала звонка.
Доступны три формы; выберите ту, что подходит устройству:
whitelist-bypass.apk из Releases. Разрешите запрос VPN при первом запуске. Вставьте ссылку для присоединения и нажмите GO; общесистемный трафик пойдёт через звонок.whitelist-bypass-proxy.ipa из Releases (sideload через AltStore / Sideloadly / ваш dev-аккаунт). Предоставляет только локальный SOCKS5-прокси — без системного VPN. Чтобы проксировать всё устройство, направьте любое VPN-приложение с поддержкой SOCKS5 (Shadowrocket, Streisand, ...) на SOCKS5-эндпоинт, который показывает приложение; или настройте прокси для каждого приложения отдельно (Telegram имеет встроенную поддержку).--socks-user / --socks-pass включают аутентификацию по имени пользователя/паролю SOCKS5.
headless-wbstream-joiner --room <link> --socks-port 1080 [--socks-user u --socks-pass p]headless-telemost-joiner --tm-link <link> --socks-port 1080 [--socks-user u --socks-pass p]headless-dion-joiner --room <link> --socks-port 1080 [--socks-user u --socks-pass p]headless-bitrix-joiner --link <link> --socks-port 1080 [--socks-user u --socks-pass p]Полное пошаговое руководство (на русском) подробно описывает каждую платформу: см. docs/SETUP.md.
go install golang.org/x/mobile/cmd/gomobile@latest)go install golang.org/x/mobile/cmd/gobind@latest)# Full release build (Android APK + Creator app + Headless creators + Linux joiners + VK bot + iOS IPA on macOS)
./make-release.sh
# Individual builds
./build-go.sh # Go .aar, relay binary, headless creators
./copy-hooks.sh # Copy JS hooks to android assets
./build-app.sh # Android APK
./build-headless.sh # Headless binaries only (current platform)
./build-cli.sh # Per-arch zips of headless creators + joiners + vk-bot
./build-creator.sh # Creator Electron app (all platforms)
./build-ios.sh proxy # iOS proxy app, xcframework + unsigned IPA
./build-ios.sh vpn # iOS VPN app, xcframework + unsigned IPA
Требуется Xcode и macOS. build-ios.sh принимает один аргумент — proxy или vpn.
./build-ios.sh proxy # ios-proxy-app -> prebuilts/whitelist-bypass-proxy.ipa
./build-ios.sh vpn # ios-vpn-app -> prebuilts/whitelist-bypass-vpn.ipa