
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ボットのサーバーサイド代替)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フックを使用しません。ビルド済みバイナリは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/の出力:
| 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 |
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ボット: