一个轻量级透明代理工具,在一些限制设备(如:VPN设备禁用代理)上实现 TCP 流量转发。
- 透明代理:
Linux客户端通过TPROXY拦截流量 - 流量转发: 将拦截的流量转发到
服务端 - 目标还原:
服务端根据原始目标地址建立真实连接
tproxy 透明代理架构
┌─────────────────┐ ┌─────────────────┐
│ │ │ │
│ 客户端应用程序 │ │ 目标服务器 │
│ (Any TCP App) │ │ (Real Server) │
│ │ │ │
└────────┬────────┘ └────────▲────────┘
│ │
│ ① TCP 连接 │ ⑤ 建立真实连接
│ │
▼ │
┌─────────────────────────────────────────────────┐ │
│ Linux 主机 (192.168.3.2) │ │
│ ┌──────────────────────────────────────────┐ │ │
│ │ TPROXY 透明代理 │ │ │
│ │ (iptables TPROXY rules) │ │ │
│ └───────────────┬──────────────────────────┘ │ │
│ │ ② 拦截并重定向 │ │
│ ▼ │ │
│ ┌──────────────────────────────────────────┐ │ │
│ │ tproxy-client (监听 :8080) │ │ │
│ │ │ │ │
│ │ • 接收 TPROXY 连接 │ │ │
│ │ • 获取原始目标地址 (SO_ORIGINAL_DST) │ │ │
│ │ • 维护本地连接 │ │ │
│ │ • 双向数据转发 │ │ │
│ └───────────────┬──────────────────────────┘ │ │
│ │ │ │
└──────────────────┼───────────────────────────────┘ │
│ ③ 复用 TCP 连接 │
│ (二进制协议) │
│ │
│ • Connect 消息 (UUID + 目标地址) │
│ • Data 消息 (UUID + 数据) │
│ • Disconnect 消息 (UUID) │
│ │
▼ │
┌─────────────────────────────────────────────────┐ │
│ Windows 主机 (192.168.3.3) │ │
│ ┌──────────────────────────────────────────┐ │ │
│ │ tproxy-server (监听 :8080) │ │ │
│ │ │ │ │
│ │ • 接收客户端连接 │ │ │
│ │ • 解析消息协议 │ │ │
│ │ • 管理连接映射 (UUID -> Conn) │ │ ④ 解析目标地址 │
│ │ • 建立到真实服务器的连接 │───┼────────────┘
│ │ • 双向数据转发 │ │
│ └──────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────┘
数据流向:
① 客户端应用 → TPROXY
② TPROXY → tproxy-client (本地 :8080)
③ tproxy-client → tproxy-server (复用连接)
④ tproxy-server 解析原始目标地址
⑤ tproxy-server → 真实目标服务器
返回数据: ⑤→④→③→②→①
见 LICENSE 文件。