
WebRTC経由でデータをトンネリングして検閲を回避する
ビデオ通話プラットフォーム(VK Call、Yandex Telemost、WB Stream)を介してインターネットトラフィックをトンネリングし、政府のホワイトリスト検閲を回避します。
ステップバイステップのセットアップガイド(ロシア語):docs/SETUP.md
2つのトンネルモードが利用可能です:DC(DataChannel)とVideo(VP8データエンコーディング)。推奨セットアップは両端でヘッドレスです - 純粋なGo(Pion)がプラットフォームのSFUと直接通信し、ブラウザは不要です。ChaCha20難読化、設定可能なVP8ペーシング、LiveKit/WB Streamバックエンドはヘッドレス専用機能です。
レガシーブラウザパス(JSフックを備えたElectronデスクトップクリエイターに対するAndroid WebViewジョイナー)はVK DCでまだ動作しますが、遅く、難読化できず、段階的に廃止されています。新しいデプロイメントではヘッドレスを使用すべきです。
PionはパブリッシャーPC上でSCTP DataChannelを開き、それを介してTCP/UDPをトンネリングします。フレームは他のDataChannelペイロードと同様にプラットフォームのSFUを通過します。
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モードと同じパイプラインですが、トンネルはSCTP DataChannelではなく、公開されたVP8ビデオトラック上を流れます。SFUがDataChannelをレート制限するがRTPは通す場合(例:Telemost)に有用で、場合によってはプラットフォーム上必須です(WB Streamのパブリッシャートラックは常にビデオです)。トンネルフレーミングとその上の多重化レイヤーはDCモードと同じです。
トラフィックは政府のホワイトリストに載っているプラットフォームのSFUを通過します。DPIから見ると通常のビデオ通話のように見えます。
relay/ - 両端で共有されるGoリレー:SOCKS5プロキシ、tun2socks配線、DC/VP8トンネル、ChaCha20難読化器、コネクション多重化器、gomobile/iOSバインディングheadless/vk/ - ヘッドレスVKクリエイター:VK HTTP APIを介して通話を作成または参加、Pion DC/VP8トンネル、ブラウザ不要headless/telemost/ - 同じモデルのヘッドレスTelemost(Yandex)クリエイターheadless/wbstream/ - ヘッドレスWB Streamクリエイター(LiveKitバックエンド、匿名ゲストトークン)headless/dion/ - 同じモデルのヘッドレスDIONクリエイターheadless/bitrix/ - ヘッドレスBitrixクリエイター(適応型DC/VP8、ゲスト参加)headless/wbstream-joiner/ - デスクトップWB Streamジョイナー(クリエイターのカウンターパート、テストとLinuxクライアントで使用)headless/telemost-joiner/ - デスクトップTelemostジョイナー(クリエイターのカウンターパート、テストとLinuxクライアントで使用)headless/dion-joiner/ - デスクトップDIONジョイナー(クリエイターのカウンターパート、テストとLinuxクライアントで使用)headless/bitrix-joiner/ - デスクトップBitrixジョイナー(クリエイターのカウンターパート、テストとLinuxクライアントで使用)headless/vk-bot/ - オンデマンドでヘッドレスクリエイターを起動し、参加リンクを返信するスタンドアロンVK Long Pollボット(Electronボットのサーバーサイド代替)ビルド済みバイナリはGitHub Releasesで入手できます。
GitHub ReleasesからElectronアプリをダウンロードして実行します。Goリレーが自動的にバンドルされています。
重要: 通話はCreatorアプリ内から作成する必要があります。アプリから既存の通話に参加しても機能しません - 通話開始の瞬間からJSフックが存在している必要があります。
3つの形式が利用可能です。デバイスに合うものを選んでください:
whitelist-bypass.apkをインストールします。初回起動時にVPNプロンプトを許可します。参加リンクを貼り付けてGOをタップすると、システム全体のトラフィックが通話を経由して流れます。whitelist-bypass-proxy.ipaをインストールします(AltStore / Sideloadly / 開発者アカウント経由でサイドロード)。ローカルSOCKS5プロキシのみを公開します - システムVPNはありません。デバイス全体をプロキシするには、SOCKS5対応のVPNアプリ(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のいずれか1つの引数を取ります。
./build-ios.sh proxy # ios-proxy-app -> prebuilts/whitelist-bypass-proxy.ipa
./build-ios.sh vpn # ios-vpn-app -> prebuilts/whitelist-bypass-vpn.ipa
このスクリプトはMobile.xcframeworkをアプリディレクトリにビルドし、アプリのstrip-signing.shを実行してプロジェクトから開発者チームをクリアし、アプリを未署名でビルドし、未署名のIPAをprebuilts/に書き込みます。
デバイスで実行するには、Xcodeで対応する.xcodeprojを開き、Signing & Capabilitiesでチームと一意のバンドル識別子を設定してビルドします。vpnバリアントはそのバンドル識別子にNetwork Extension機能が必要です。
prebuilts/の出力:
Dockerを使用してプロジェクトをビルドするには、次を実行します:
docker compose -f docker-build/docker-compose.yml up
これにより、すべてのコンポーネント(creator-app、headless、android app)がprebuildフォルダにビルドされます(macOSクリエイターを除く)。
ブラウザなしでAPIを介して通話を作成する純粋なGoクリエイター。ElectronもJSフックも不要 - Go Pion PeerConnectionがDataChannelトンネルを直接処理します。
./build-headless.sh
10個のバイナリが生成されます - 5つのクリエイター、4つのLinuxジョイナー、VKボット:
./headless/vk/headless-vk-creator --cookies cookies-vk.json
./headless/telemost/headless-telemost-creator --cookies cookies-yandex.json
./headless/wbstream/headless-wbstream-creator --cookies cookies-wbstream.json
./headless/dion/headless-dion-creator --cookies cookies-dion.json
./headless/bitrix/headless-bitrix-creator --cookies cookies-bitrix.json
./headless/wbstream-joiner/headless-wbstream-joiner --room <link> --socks-port 1080
./headless/dion-joiner/headless-dion-joiner --room <link> --socks-port 1080
./headless/telemost-joiner/headless-telemost-joiner --tm-link <link> --socks-port 1080
./headless/bitrix-joiner/headless-bitrix-joiner --link <link> --socks-port 1080
./headless/vk-bot/headless-vk-bot --token <t> --group-id <g> --bins-dir <dir>
4つのクリエイターすべてが、デスクトップクリエイターアプリ(Export Cookiesボタン)からエクスポートされたクッキーをJSON [{"name":"..","value":".."},...]として必要とします。DIONは{"email":"..","password":"..","cookies":[]}も受け付け、その後自身でログインします。docs/SETUP.mdを参照。
デフォルトでは各バイナリは新しい通話を作成します。既存の通話に接続するには(リンクを無効化せずにサーバーを再起動、複数のシェイプされたセッションなど):
通話作成フラグとは相互排他的です(VKの--peer-id;その他には作成フラグがありません)。
customは未設定のフラグに対してunlimitedのデフォルトにフォールバックするため、部分的なオーバーライドが機能します:
./headless-vk-creator --cookies cookies-vk.json --vk-link https://vk.com/call/join/<token> \
--resources custom --read-buf 65536 --max-dc-buf 8388608 --mem-limit 268435456 \
--write-file /var/run/whitelist-bypass/call.txt
read-buf - TCP/DC読み取りバッファサイズ。小さいほどバックプレッシャーチェックが頻繁になり、メモリのバーストが少なくなりますmax-dc-buf - DataChannelのバッファ量がこれを超えるとTCP読み取りを一時停止します;VKでのみ配線されています(Pion BufferedAmountLowThreshold)mem-limit - Goランタイムのソフトメモリ制限;上限付近でGCをより積極的にします0xd986b7576340d8d7b04f806dfd38a182b19edf50 - USDC (ERC20)TTEo4XXTB6CqhEiKpyoncfk3skEvoq3bCP - USDT (TRC20)UQCZge2JzLmwNtI56p-ZxLuN2f7ZMCPGqO0XTt3wJ-cy8JaE - USDT (TON)headless/tests/ - ライブエンドツーエンドテスト(実際のSFUを介したクリエイター+ジョイナー);同一ホストまたはDocker化されたnetnsスタンドで実行、headless/tests/README.mdを参照android-app/ - Androidジョイナー:VpnService + tun2socks + ヘッドレスPion(主要パス);レガシーブラウザフロー用のWebViewフォールバックも保持ios-proxy-app/ - iOSジョイナー:gomobile xcframeworkを介したSOCKS5 + ヘッドレスPioncreator-app/ - Electronデスクトップクリエイターアプリ:レガシーブラウザパスまたはヘッドレスGoバイナリの起動のいずれかを実行できるGUIフロントエンド;インタラクティブな使用とデプロイメントの両方に適していますhooks/ - レガシーブラウザパス用のJavaScriptフック(DCおよびビデオモード、VKおよびTelemost)。ヘッドレスはJSフックを使用しません。| File | Platform |
|---|
WhitelistBypass Creator-*-arm64.dmg | macOS |
WhitelistBypass Creator-*-x64.exe | Windows x64 |
WhitelistBypass Creator-*-ia32.exe | Windows x86 |
WhitelistBypass Creator-*.AppImage | Linux x64 |
whitelist-bypass.apk | Android |
whitelist-bypass-proxy.ipa | iOS proxy app, unsigned |
whitelist-bypass-vpn.ipa | iOS VPN app, unsigned |
headless-vk-creator-linux-x64 | Linux x64 |
headless-vk-creator-linux-ia32 | Linux x86 |
headless-telemost-creator-linux-x64 | Linux x64 |
headless-telemost-creator-linux-ia32 | Linux x86 |
headless-wbstream-joiner-linux-x64 | Linux x64 |
headless-wbstream-joiner-linux-ia32 | Linux x86 |
headless-telemost-joiner-linux-x64 | Linux x64 |
headless-telemost-joiner-linux-ia32 | Linux x86 |
headless-vk-bot-linux-x64 | Linux x64 |
headless-vk-bot-linux-ia32 | Linux x86 |
| Flag | VK | TM | WB | Description |
|---|
--cookies <path> | yes | yes | yes | cookies JSONへのパス |
--cookie-string <str> | yes | yes | - | 生のクッキー文字列 name=val; name=val |
--write-file <path> | yes | yes | yes | アクティブな参加リンクをこのファイルに追記(1行に1リンク) |
--resources <mode> | yes | yes | yes | default / moderate / unlimited / custom(下記参照) |
--read-buf <bytes> | yes | yes | yes | DC/RTP読み取りバッファ;--resources customの場合のみ参照 |
--max-dc-buf <bytes> | yes | - | - | DataChannel BufferedAmountLowThreshold;--resources customの場合のみ |
--mem-limit <bytes> | yes | yes | yes | Goソフトメモリ制限(debug.SetMemoryLimit);--resources customの場合のみ |
| Creator | Flag | Value |
|---|
| VK | --vk-link <link> | https://vk.com/call/join/<token> |
| Telemost | --tm-link <uri> | https://telemost.yandex.ru/j/<id> |
| WB Stream | --room <id> | wbstream://<uuid> または単にUUID |
| DION | --room <id> | dion://<id> または https://dion.vc/event/<id> |
| Mode | read-buf | max-dc-buf (VK) | mem-limit |
|---|
moderate | 16 KB | 1 MB | 64 MB |
default | 32 KB | 4 MB | 128 MB |
unlimited | 64 KB | 8 MB | 256 MB |
custom | --read-bufから | --max-dc-bufから | --mem-limitから |