
वेबआरटीसी पर डेटा टनलिंग करके सेंसरशिप को बायपास करना
सरकारी व्हाइटलिस्ट सेंसरशिप को बायपास करने के लिए वीडियो कॉलिंग प्लेटफॉर्म (VK Call, Yandex Telemost, WB Stream) के माध्यम से इंटरनेट ट्रैफिक को टनल करता है।
चरण-दर-चरण सेटअप गाइड (रूसी में): docs/SETUP.md
दो टनल मोड उपलब्ध हैं: DC (DataChannel) और Video (VP8 डेटा एन्कोडिंग)। अनुशंसित सेटअप दोनों सिरों पर हेडलेस है - शुद्ध Go (Pion) सीधे प्लेटफॉर्म के SFU से बात करता है, कोई ब्राउज़र नहीं। ChaCha20 ऑब्फस्केशन, कॉन्फ़िगर करने योग्य VP8 पेसिंग, और LiveKit/WB Stream बैकएंड हेडलेस-केवल सुविधाएँ हैं।
एक लेगेसी ब्राउज़र पथ (Android WebView जॉइनर बनाम JS हुक्स वाले Electron डेस्कटॉप क्रिएटर के विरुद्ध) अभी भी 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 DataChannels को रेट-लिमिट करता है लेकिन 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 क्लाइंट के लिए उपयोग किया जाता है)प्रीबिल्ट बाइनरीज़ GitHub Releases पर उपलब्ध हैं।
GitHub Releases से Electron ऐप डाउनलोड करें और चलाएँ। यह स्वचालित रूप से Go रिले को बंडल करता है।
महत्वपूर्ण: कॉल Creator ऐप के भीतर से बनाई जानी चाहिए। ऐप से किसी मौजूदा कॉल में जॉइन करना काम नहीं करेगा - कॉल शुरू होने के क्षण से JS हुक्स मौजूद होने चाहिए।
तीन रूप उपलब्ध हैं; जो भी डिवाइस के अनुकूल हो उसे चुनें:
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।
./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 चलाती है, ऐप को अहस्ताक्षरित बनाती है, और prebuilts/ में एक अहस्ताक्षरित IPA लिखती है।
किसी डिवाइस पर चलाने के लिए, 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 क्रिएटर को छोड़कर)
शुद्ध Go क्रिएटर जो ब्राउज़र के बिना API के माध्यम से कॉल बनाते हैं। कोई Electron नहीं, कोई JS हुक्स नहीं - Go Pion PeerConnection सीधे DataChannel टनल को संभालता है।
./build-headless.sh
दस बाइनरीज़ उत्पन्न होती हैं - पाँच क्रिएटर, चार 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>
सभी चार क्रिएटर को डेस्कटॉप क्रिएटर ऐप (Export Cookies बटन) से निर्यात किए गए कुकीज़ की आवश्यकता होती है, JSON [{"name":"..","value":".."},...] के रूप में। DION {"email":"..","password":"..","cookies":[]} भी स्वीकार करता है और फिर स्वयं लॉग इन करता है, देखें docs/SETUP.md।
डिफ़ॉल्ट रूप से प्रत्येक बाइनरी एक नई कॉल बनाती है। किसी मौजूदा कॉल से जुड़ने के लिए (लिंक को अमान्य किए बिना सर्वर रीस्टार्ट, कई शेप्ड सेशन, ...):
कॉल-क्रिएशन फ्लैग के साथ परस्पर अनन्य (--peer-id VK के लिए; अन्य के पास कोई क्रिएशन फ्लैग नहीं है)।
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/vk-bot/ - स्टैंडअलोन VK Long Poll बॉट जो मांग पर हेडलेस क्रिएटर स्पॉन करता है और जॉइन लिंक के साथ जवाब देता है (Electron बॉट का सर्वर-साइड विकल्प)headless/tests/ - लाइव एंड-टू-एंड परीक्षण (क्रिएटर + जॉइनर एक वास्तविक SFU पर); समान-होस्ट पर या Dockerized netns स्टैंड में चलाएँ, देखें headless/tests/README.mdandroid-app/ - Android जॉइनर: VpnService + tun2socks + हेडलेस Pion (प्राथमिक पथ); लेगेसी ब्राउज़र फ्लो के लिए एक WebView फ़ॉलबैक भी बनाए रखता हैios-proxy-app/ - iOS जॉइनर: gomobile xcframework के माध्यम से SOCKS5 + हेडलेस Pioncreator-app/ - Electron डेस्कटॉप क्रिएटर ऐप: GUI फ्रंट-एंड जो या तो लेगेसी ब्राउज़र पथ चला सकता है या हेडलेस Go बाइनरीज़ को स्पॉन कर सकता है; इंटरैक्टिव उपयोग और तैनाती दोनों के लिए उपयुक्तhooks/ - लेगेसी ब्राउज़र पथ के लिए JavaScript हुक्स (DC और Video मोड, VK और Telemost)। हेडलेस JS हुक्स का उपयोग नहीं करता।| फ़ाइल | प्लेटफॉर्म |
|---|
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 |
| फ्लैग | VK | TM | WB | विवरण |
|---|
--cookies <path> | yes | yes | yes | कुकीज़ JSON का पथ |
--cookie-string <str> | yes | yes | - | कच्ची कुकी स्ट्रिंग name=val; name=val |
--write-file <path> | yes | yes | yes | सक्रिय जॉइन लिंक को इस फ़ाइल में जोड़ें (प्रति पंक्ति एक लिंक) |
--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 के साथ |
| क्रिएटर | फ्लैग | मान |
|---|
| 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> |
| मोड | 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 से |