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 访问其它机器及其内网资产)。单进程、低消耗、高并发。

tunnel_proxy — 快速开始
# 本地 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
0代理协议
0传输层
0编排组件
0单元测试全绿
0平台可用

核心特性

不止代理,而是一整套安全隧道平台

从单点代理到内网穿透,从协议入口到流量编排,一个二进制全部搞定。

🧩

代理协议

HTTP / HTTPS / HTTP/2 / HTTP/3 / Auto 自动协商 / SOCKS4a / SOCKS5 / SS / SS2 / SSR(含 auth_sha1_v4 协议插件)/ SSU / SNI / Relay / Trojan / Vmess / Vless / File 等。

🚇

23 种传输通道

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 等。

🧭

Router 智能编排

Bypass 分流、Selector 多策略选链、并发/速率/流量三层限流、IP 准入、Hosts、DNS、Observer 指标 + Webhook 通知、配置热重载。

🕳️

反向穿透 pf

内网 client 主动连出穿透 NAT,frp 级能力:TCP/UDP 端口映射、HTTP/HTTPS/HTTP3 虚拟主机、负载均衡组、KCP/QUIC 传输承载,断线自动重连。

🕸️

虚拟组网 VNet

pfserver + 多机 vnet(TUN 网卡 + 虚拟 IP)组成虚拟局域网,client 经虚拟 IP 三层互通(ping / TCP / UDP),把多个内网打通成一张新网络,直接访问其它机器及 server 侧内网资产。

📊

观测与 API

内嵌 Web 控制台、Prometheus 指标、完整状态查询、POST /api/reload 热重载。对接 Prometheus / Grafana 开箱即用。

🖥️

三平台一致

Linux / macOS / Windows 全平台行为一致:Unix socket 与 named pipe 统一、透明代理自动切换实现、串口/ICMP/WireGuard 全平台可用。

协议入口

代理协议统一 Handler 抽象

每个入口协议都可作为独立服务、链节点、或反向穿透的数据流处理端——同样的协议逻辑处处复用。

HTTP HTTPSHTTP/2 + TLS HTTP/2 HTTP/3h3socks Auto首字节嗅探 SOCKS4a SOCKS5 Shadowsocks SS2022 ShadowsocksRauth_sha1_v4 SSU SNI RelayCONNECT/BIND/UDP Trojan Vmess Vless FileHTTP 文件服务

特殊协议同样覆盖

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 任意通道之上。

TCP TLS / mTLS WebSocket / WSS HTTP/2 / h2c gRPC QUIC / HTTP/3 KCPRS FEC 纠错 DTLS SSH / SSHd Unix / named pipe obfs4防探测 ohttp / otls phtPlain HTTP Tunnel ftcpFake TCP ICMPQUIC-over-ICMP WebTransport utls指纹伪装 WireGuardboringtun muxmtcp/mtls/mws/mwss

KCP 与 FEC

对齐 gost 全参数(mtu/window/dataShards/parityShards/nodelay/interval/resend/nc/sndwnd/rcvwnd/mss/ttl/ackNodelay),内置 GF(2^8) Reed-Solomon 前向纠错——丢包链路下依旧稳定。

双向服务

不只能代理,还能组网:穿透 + 虚拟局域网

内网 client 主动连出(可穿 NAT),公网用户访问 server 分配端口即可触达内网服务;多机 vnet 还能组成虚拟局域网互通互访。

🔌 TCP 端口映射

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 端口映射到内网 UDP 服务,每数据报一条 mux 流一问一答(DNS 等场景)。

tunnel_proxy pfclient --server server:7000 --password mykey --udp 127.0.0.1:5353

🌐 HTTP / HTTPS / HTTP3 虚拟主机

多域名共享一个公网端口,分别按 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 传输承载

隧道跑在 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

🕸️ 虚拟组网 VNet

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 互通

🚀 全协议 Handler 复用

公网端口可以是标准 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

使用教程

从零到内网穿透,四步上手

代理协议、传输通道、端口转发与反向穿透全场景的完整手册见:

打开完整教程
01

构建与本地代理

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
02

密码代理与链式转发

# 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
03

Router 编排 + 控制台

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 配置热重载
04

内网穿透 · 把本地服务暴露到公网

# 公网服务器
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

能力对比

协议与传输覆盖 · 内网穿透能力

同一内核覆盖代理协议、传输层与内网穿透场景。

vs gost

  • 协议 / 传输 / 组件主体能力覆盖
  • SSR 全协议 × 混淆组合(含 auth_sha1_v4)
  • WireGuard(boringtun)
  • 反向穿透 pf(内网穿透)
  • 单进程多服务共享 Router
  • splice 零拷贝(Linux)

vs frp

  • TCP / UDP 端口映射
  • HTTP / HTTPS / HTTP3 虚拟主机
  • 负载均衡组(RR)
  • KCP / QUIC 传输承载
  • 公网端口 = 任意协议代理入口
  • 复用全部 Handler + Router 编排

安装与构建

从源码构建

需要 Rust 1.97+ 工具链。

git clone https://github.com/mcdn-git/tunnel_proxy.git
cd tunnel_proxy
cargo build --release
# 产物:target/release/tunnel_proxy

# 质量门禁(CI 强制)
cargo clippy --all-targets    # 0 warning
cargo fmt --check             # 0 diff
cargo test -p tunnel-proxy-core --lib   # 293 passed