连接架构
一个入口客户端 Socket,一个蜂窝绑定目标 Socket
CellRoute 是应用层 TCP 代理。客户端通过 Wi-Fi 或热点主动连接手机;CellRoute 再为目标创建一条使用 Android 蜂窝 Network 的独立出站 Socket。
- 01客户端支持代理的应用
- 02手动代理SOCKS5 或 HTTP
- 03手机入口Wi-Fi / 热点地址
- 04CellRoute本地 TCP 代理
- 05蜂窝 DNS解析并校验目标
- 06目标 Socket单独绑定蜂窝 Network
- 07互联网目标TCP 目的地
为什么客户端 Socket 不能绑定蜂窝 Network
已接受的客户端 Socket 属于把请求送到手机的 Wi-Fi 或热点入口。把它绑定到蜂窝网络只会破坏本地客户端连接,并不能改变目标方向的出口。
目标 Socket 如何使用蜂窝网络
CellRoute 为每条代理请求从蜂窝 Network 的 socketFactory 创建新 Socket,在策略校验通过后连接目标。这样无需绑定整个应用进程。
val socket = cellularNetwork.socketFactory.createSocket()
socket.connect(targetAddress, timeout)简化示意:省略了错误处理、安全检查和生命周期管理。
为什么域名也要通过蜂窝 Network 解析
使用与目标 Socket 相同的蜂窝 Network 解析域名,可让 DNS 结果与实际出口路径一致。连接前还会根据目标地址 ACL 校验解析后的 IP。
val addresses = cellularNetwork.getAllByName(host)简化示意:省略了错误处理、安全检查和生命周期管理。
HTTPS CONNECT 只是 TCP 隧道
CONNECT 建立后,CellRoute 仅转发 TCP 字节流。TLS 仍在客户端与目标之间端到端完成,不安装 CA、不做中间人解密,也不记录 TLS 明文。
为什么这不是 VPN 或透明路由
CellRoute 不捕获数据包、不创建隧道网卡、不修改 Android 路由、不提供透明 NAT,也不修改系统全局代理。只有主动使用代理的应用和 TCP 流量会参与。