Rust · 单二进制 · 三平台
tunnel_proxy_rs 是纯 Rust 编写的高性能代理内核:覆盖主流代理协议 (HTTP / SOCKS / SS / Trojan / Vmess / Vless 等)与传输层 (TCP / UDP / QUIC / KCP / WebSocket / mTLS 等);原生实现 双向服务——既是内网穿透(TCP/UDP 端口映射、HTTP/HTTPS/HTTP3 虚拟主机、负载均衡、KCP/QUIC 承载),也能 虚拟组网 VNet(多机 TUN 网卡打通成一张虚拟局域网,client 经 虚拟 IP 访问其它机器及其内网资产)。单进程、低消耗、高并发。
# 本地 SOCKS5 代理
tunnel_proxy socks5 -l 0.0.0.0:1080
# 内网穿透:公网 server + 内网 client(frp 级)
tunnel_proxy pfserver -l 0.0.0.0:7000 -k mykey -b 7001-7010
tunnel_proxy pfclient -s server:7000 -k mykey -t 127.0.0.1:80
# 虚拟组网:多机 TUN 网卡互通(VNet)
tunnel_proxy pfserver -l 0.0.0.0:7000 -k mykey -b 7001-7010 --virtual-net
sudo tunnel_proxy vnet -s server:7000 -k mykey --virtual-ip 10.99.0.2
核心特性
从单点代理到内网穿透,从协议入口到流量编排,一个二进制全部搞定。
HTTP / HTTPS / HTTP/2 / HTTP/3 / Auto 自动协商 / SOCKS4a / SOCKS5 / SS / SS2 / SSR(含 auth_sha1_v4 协议插件)/ SSU / SNI / Relay / Trojan / Vmess / Vless / File 等。
TCP / TLS / WS / WSS / H2 / gRPC / QUIC / KCP(含 FEC 纠错)/ DTLS / SSH / obfs4 / ohttp·otls / pht / ftcp / icmp / WebTransport / utls 指纹 / Unix / mux(MTCP·MTLS·MWS·MWSS) / UDP / WireGuard 等。
Bypass 分流、Selector 多策略选链、并发/速率/流量三层限流、IP 准入、Hosts、DNS、Observer 指标 + Webhook 通知、配置热重载。
内网 client 主动连出穿透 NAT,frp 级能力:TCP/UDP 端口映射、HTTP/HTTPS/HTTP3 虚拟主机、负载均衡组、KCP/QUIC 传输承载,断线自动重连。
pfserver + 多机 vnet(TUN 网卡 + 虚拟 IP)组成虚拟局域网,client 经虚拟 IP 三层互通(ping / TCP / UDP),把多个内网打通成一张新网络,直接访问其它机器及 server 侧内网资产。
内嵌 Web 控制台、Prometheus 指标、完整状态查询、POST /api/reload 热重载。对接 Prometheus / Grafana 开箱即用。
Linux / macOS / Windows 全平台行为一致:Unix socket 与 named pipe 统一、透明代理自动切换实现、串口/ICMP/WireGuard 全平台可用。
协议入口
每个入口协议都可作为独立服务、链节点、或反向穿透的数据流处理端——同样的协议逻辑处处复用。
TCP/UDP 端口转发 · RTCP/RUDP 加密转发 · Runix(Unix socket/named pipe 加密承载)· Stdio(SSH ProxyCommand)· DNS 代理 · Redirect/Redu 透明代理(Linux iptables,Windows/macOS 自动切 TUN)· File HTTP 文件服务 · Serial 串口三方向转发 · TUN/TAP 虚拟网卡。
传输层
传输层与协议层正交:同一协议可跑在 TCP、TLS、WS、QUIC、KCP 任意通道之上。
对齐 gost 全参数(mtu/window/dataShards/parityShards/nodelay/interval/resend/nc/sndwnd/rcvwnd/mss/ttl/ackNodelay),内置 GF(2^8) Reed-Solomon 前向纠错——丢包链路下依旧稳定。
双向服务
内网 client 主动连出(可穿 NAT),公网用户访问 server 分配端口即可触达内网服务;多机 vnet 还能组成虚拟局域网互通互访。
random / fixed / client 三模式端口分配,公网连接经单条加密 mux 长连接复用转发。
tunnel_proxy pfserver --listen 0.0.0.0:7000 --password mykey --pool 7001-7010
tunnel_proxy pfclient --server server:7000 --password mykey --target 127.0.0.1:80
公网 UDP 端口映射到内网 UDP 服务,每数据报一条 mux 流一问一答(DNS 等场景)。
tunnel_proxy pfclient --server server:7000 --password mykey --udp 127.0.0.1:5353
多域名共享一个公网端口,分别按 Host 头、TLS SNI、QPACK :authority 路由到内网。
tunnel_proxy pfserver --password mykey --mode fixed --port 7001 \
--vhost-http 0.0.0.0:8080 --vhost-https 0.0.0.0:8443 \
--vhost-http3 0.0.0.0:443
tunnel_proxy pfclient --server server:7000 --password mykey \
--domain app.example.com --target 127.0.0.1:80
同组多个 client 共享一个公网端口,连接按 RR 轮询分发,断开自动移出成员。
tunnel_proxy pfclient --server server:7000 --password mykey --group web --target 127.0.0.1:8081
tunnel_proxy pfclient --server server:7000 --password mykey --group web --target 127.0.0.1:8082
隧道跑在 KCP 或 QUIC 上:弱网抗丢包、更低握手延迟,与 frp 的 kcp/quic 传输语义一致。
tunnel_proxy pfserver --password mykey --pool 7001-7010 --transport kcp
tunnel_proxy pfclient --server server:7000 --password mykey --transport kcp
pfserver 开 --virtual-net,多台机器各跑 vnet(TUN 网卡 + 虚拟 IP)组成虚拟局域网,client 经虚拟 IP 三层互通(ping / TCP / UDP),访问其它机器及 server 侧内网资产。
tunnel_proxy pfserver --password mykey --pool 7001-7010 --virtual-net
sudo tunnel_proxy vnet --server server:7000 --password mykey --virtual-ip 10.99.0.2
# 另一台:--virtual-ip 10.99.0.3;ping 10.99.0.3 互通
公网端口可以是标准 SOCKS5/HTTP/SS/Trojan/Vmess… 代理入口,协议解析全部发生在内网侧,还能挂载 Router 链编排。
# 公网端口 = 后端在内网的 SOCKS5 代理
tunnel_proxy pfclient --server server:7000 --password mykey \
--mode client --port 8080 --proto socks5 --config router.yaml
# 公网用户:curl -x socks5h://<server>:8080 https://example.com
cargo build --release
# 产物 target/release/tunnel_proxy
# 本地 SOCKS5 代理
tunnel_proxy socks5 -l 0.0.0.0:1080
curl -x socks5h://127.0.0.1:1080 https://example.com
# SS / Trojan / Vmess 密码代理
tunnel_proxy ss -l 0.0.0.0:8388 -m aes-256-gcm -k pass
tunnel_proxy trojan -l 0.0.0.0:8443 -k pass
# 多级代理链(逐跳转发)
tunnel_proxy chain -l 0.0.0.0:2080 -f chain.yaml
tunnel_proxy run -l 0.0.0.0:12081 -C router.yaml \
--api 127.0.0.1:18085 --reload
# Web 控制台 / 指标 / 热重载
# GET / 内嵌仪表盘
# GET /metrics Prometheus 指标
# POST /api/reload 配置热重载
# 公网服务器
tunnel_proxy pfserver --listen 0.0.0.0:7000 --password mykey --pool 7001-7010
# 内网 client:透明转发本地 80
tunnel_proxy pfclient --server server:7000 --password mykey --target 127.0.0.1:80
# 公网用户访问 http://<server>:<分配端口> 即到达内网 80
# 配合 --domain 域名注册 vhost、--group 组名做负载均衡、--transport 换 KCP/QUIC
能力对比
同一内核覆盖代理协议、传输层与内网穿透场景。
安装与构建
需要 Rust 1.97+ 工具链。