
Tunneling di dati su webrtc per aggirare la censura
Instrada il traffico internet attraverso piattaforme di videochiamata (VK Call, Yandex Telemost, WB Stream) per aggirare la censura basata su whitelist governative.
Guida passo-passo alla configurazione (in russo): docs/SETUP.md
Sono disponibili due modalità di tunnel: DC (DataChannel) e Video (codifica dati VP8). La configurazione consigliata è headless su entrambe le estremità - Go puro (Pion) comunica direttamente con l'SFU della piattaforma, senza browser. L'offuscamento ChaCha20, il pacing VP8 configurabile e il backend LiveKit/WB Stream sono funzionalità esclusive della modalità headless.
Un percorso browser legacy (joiner Android WebView contro un creator desktop Electron con hook JS) funziona ancora per VK DC, ma è più lento, non può offuscare ed è in fase di dismissione. I nuovi deployment dovrebbero usare la modalità headless.
Pion apre un SCTP DataChannel sul PC publisher e vi incanala TCP/UDP. I frame passano attraverso l'SFU della piattaforma come qualsiasi altro payload 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
Stessa pipeline della modalità DC, ma il tunnel viaggia su una traccia video VP8 pubblicata invece che su un SCTP DataChannel. Utile quando l'SFU applica rate-limiting ai DataChannel ma lascia passare RTP (es. Telemost), e obbligatorio a livello di piattaforma in alcuni casi (la traccia publisher di WB Stream è sempre video). Il framing del tunnel e il layer di multiplexing sovrastante sono gli stessi della modalità DC.
Il traffico passa attraverso l'SFU della piattaforma, che è nella whitelist governativa. Per il DPI sembra una normale videochiamata.
relay/ - Relay Go condiviso da entrambe le estremità: proxy SOCKS5, plumbing tun2socks, tunnel DC/VP8, offuscatore ChaCha20, multiplexer di connessioni, binding gomobile/iOSheadless/vk/ - Creator VK headless: crea o si unisce a una chiamata tramite l'API HTTP di VK, tunnel Pion DC/VP8, senza browserheadless/telemost/ - Creator Telemost (Yandex) headless con lo stesso modelloheadless/wbstream/ - Creator WB Stream headless (basato su LiveKit, token guest anonimi)headless/dion/ - Creator DION headless con lo stesso modelloheadless/bitrix/ - Creator Bitrix headless (DC/VP8 adattivo, join come guest)headless/wbstream-joiner/ - Joiner WB Stream desktop (controparte del creator, usato per test e client Linux)headless/telemost-joiner/ - Joiner Telemost desktop (controparte del creator, usato per test e client Linux)headless/dion-joiner/ - Joiner DION desktop (controparte del creator, usato per test e client Linux)headless/bitrix-joiner/ - Joiner Bitrix desktop (controparte del creator, usato per test e client Linux)headless/vk-bot/ - Bot VK Long Poll standalone che genera creator headless su richiesta e risponde con il link di join (alternativa lato server al bot Electron)headless/tests/ - Test end-to-end live (creator + joiner su un SFU reale); eseguibili sullo stesso host o in uno stand Dockerizzato con netns, vedi headless/tests/README.mdandroid-app/ - Joiner Android: VpnService + tun2socks + Pion headless (percorso principale); mantiene anche un fallback WebView per il flusso browser legacyios-proxy-app/ - Joiner iOS: SOCKS5 + Pion headless tramite l'xcframework gomobilecreator-app/ - App creator desktop Electron: front-end GUI che può eseguire il percorso browser legacy o avviare i binari Go headless; adatta sia all'uso interattivo che ai deploymenthooks/ - Hook JavaScript per il percorso browser legacy (modalità DC e Video, VK e Telemost). La modalità headless non usa hook JS.I binari precompilati sono disponibili su GitHub Releases.
Scarica ed esegui l'app Electron da GitHub Releases. Include automaticamente il relay Go.
Importante: La chiamata deve essere creata dall'interno dell'app Creator. Unirsi a una chiamata esistente dall'app non funzionerà - gli hook JS devono essere presenti dal momento in cui la chiamata inizia.
Sono disponibili tre forme; scegli quella più adatta al dispositivo:
whitelist-bypass.apk da Releases. Consenti il prompt VPN al primo avvio. Incolla il link di join e tocca GO; il traffico a livello di sistema fluisce attraverso la chiamata.whitelist-bypass-proxy.ipa da Releases (sideload tramite AltStore / Sideloadly / il tuo account sviluppatore). Espone solo un proxy SOCKS5 locale - nessuna VPN di sistema. Per proxare l'intero dispositivo, punta qualsiasi app VPN compatibile con SOCKS5 (Shadowrocket, Streisand, ...) all'endpoint SOCKS5 mostrato dall'app; oppure imposta il proxy per singola app (Telegram ha supporto integrato).--socks-user / --socks-pass abilitano l'autenticazione SOCKS5 username/password.
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]La guida completa passo-passo (in russo) copre ogni piattaforma in dettaglio: vedi 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
Richiede Xcode e macOS. build-ios.sh accetta un argomento, proxy o 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