
WebRTC를 통해 데이터를 터널링하여 검열 우회
정부 화이트리스트 검열을 우회하기 위해 영상 통화 플랫폼(VK Call, Yandex Telemost, WB Stream)을 통해 인터넷 트래픽을 터널링합니다.
단계별 설정 가이드(러시아어): docs/SETUP.md
두 가지 터널 모드를 사용할 수 있습니다: 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 훅이 존재해야 합니다.
세 가지 형태를 사용할 수 있습니다. 기기에 맞는 것을 선택하세요:
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를 실행하여 프로젝트에서 개발자 팀을 제거하고, 앱을 서명 없이 빌드한 후, 서명되지 않은 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 creator 제외).
브라우저 없이 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>
네 개의 생성자 모두 데스크톱 생성자 앱에서 내보낸 쿠키(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 및 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 | cookies 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에서 |