iOS client for vk-turn-proxy — a WireGuard VPN tunnel that routes traffic through VK's TURN infrastructure.
- Native iOS app with Network Extension (PacketTunnelProvider)
- Go-based WireGuard + DTLS/TURN proxy compiled as XCFramework
- Automatic VK Smart Captcha solving (SHA-256 Proof-of-Work)
- WebView fallback for captcha when PoW is rejected
- Self-healing tunnel: survives iOS sleep/wake, WiFi↔LTE handoff
- Watchdog-based dead tunnel detection (no reliance on iOS
sleep()/wake()callbacks) - Staggered reconnection to avoid TURN Allocation Quota errors
- Randomized identity (User-Agent + Russian names) per credential fetch
VKTurnProxy/ # iOS app (SwiftUI) + PacketTunnel extension
WireGuardBridge/ # Go → C bridge, builds XCFramework via Makefile
pkg/proxy/ # Go proxy: DTLS+TURN tunnel, VK creds, PoW captcha solver
go.mod, go.sum # Go module dependencies
- Xcode 15+
- Go 1.21+ (via Homebrew:
brew install go) - Apple Developer account with Network Extension entitlement
-
Build the Go XCFramework:
cd WireGuardBridge make xcframework -
Open
VKTurnProxy/VKTurnProxy.xcodeprojin Xcode. -
Set your development team and bundle identifiers.
-
Build and run on a physical iOS device (simulator won't work for Network Extension).
In the app's Settings screen, configure:
- WireGuard Config — standard WireGuard config (Interface + Peer)
- VK Link — VK call invite link (e.g.,
https://vk.com/call/join/...) - Proxy Config — JSON with
peer_addr, connection count, DTLS/UDP options
Based on vk-turn-proxy by cacggghp.
MIT