核心概念

理解这几个术语即可掌握全部能力:Service、Handler、Transport、Chain、Router。

1. 三层架构

与 gost 一致的分层模型:

  1. 入口(Listener/Handler):监听端口,识别协议(SOCKS5/HTTP/SS/...),得到目标地址。
  2. 路由(Router):准入控制 → 限流 → 按 Bypass/Selector 决定走哪条链。
  3. 出口(Chain/Dialer):沿链逐跳连接目标(每节点按协议/传输包装流)。

2. Service(服务)

一个「监听地址 + 协议入口」的实例。CLI 子命令大多是单个服务(如 socks5ss);run -C 支持单进程多服务共享 Router:

# router.yaml
services:
  - name: socks
    addr: 0.0.0.0:1080
    proto: socks5
  - name: web
    addr: 0.0.0.0:8080
    proto: http
    users: [admin:pass]
  - name: ss1
    addr: 0.0.0.0:8388
    proto: ss
    method: aes-256-gcm
    password: secret

3. Handler(处理入口)

每个协议一个 Handler,负责解析请求、连接目标、双向转发。当前支持全部正向入口协议:

协议Handler说明
socks5/socks4/autoSocks5Handler 等认证、UDP 关联
http/http2/httpsHttpHandlerCONNECT + GET 代理
ss/ss2/ssrSsHandler加密流解析
trojan/vmess/vlessTrojanHandler 等TLS 包裹 + 认证
sniSniHandlerSNI 路由 YAML
fileFileHandlerHTTP 静态文件服务
relayRelayHandler自定义加密中继协议

4. Transport(传输层)

隧道内承载流量的底层协议,可叠加在链上:

类型
可靠流tcp kcp quic wt(WebTransport)
TLS 类tls mtls utls(指纹伪装)
WebSocketws wss mws mwss
HTTP 类http h2 h3 grpc
多路复用mtcp mtls mux
混淆ohttp otls pht obfs obfs4 ftcp
其他icmp ssh sshd wg dtls udp serial unix

5. Chain / Node / Hop

链是「有序节点列表」:流量逐跳经过每个节点,链尾节点连接目标。同层多个等价节点组成一个 Hop,建链时按策略选其一。

Node 节点

字段说明
name节点名
proto载荷协议:http / socks5 / ss / ss2 / ssr / vmess / vless / trojan / relay / sni
transport传输层(见上表)
addrhost:port
user/pass认证
method/protocol加密方式 / SSR 协议插件
tls_ca/tls_cert/tls_key/tls_servernameTLS 参数
wg_key/wg_peer_pubWireGuard 密钥

Hop 分组

chain.yaml 顶层 hops:每个 hop 是一组等价节点,建链时按选择策略挑一个。例:hops: [[nodeA1, nodeA2], [nodeB]] 表示第一跳从 A1/A2 选一,第二跳必须 B。

6. Router 编排

Router 是核心编排器:Router::new(chains, bypass, selector)。每个入口连接先过准入 → 限流 → 选链 → 转发。

Selector 选择器

候选链选择策略:RoundRobin(轮询)/ Random(随机)/ Weighted(加权)/ Hash(按目标地址哈希)。

Bypass 旁路

目标地址匹配规则(白/黑名单):IP/CIDR、域名、通配符;reverse 取反。命中旁路的目标直接直连、不走链。

Limiter 限流

连接级限流(总连接数/并发)、流量限额(按 token/hourly_bytes 的固定窗口)、用户级限流(多用户共享 Router 时按 key 隔离)。超限返回 429/拒绝。

Observer 观测

路由事件(connect/close/route/error)记录指标,可经 Webhook POST 到外部,或由 RouterApiServer 暴露 /metrics(Prometheus)+ /status(JSON)+ Web UI。

7. 反向穿透 pf 与虚拟组网 VNet(双向服务)

pf(port-forward)是本项目提供的内网穿透能力:内网 client 主动连公网 server,把公网端口映射到内网服务。它同时构成双向服务的两半:

术语说明
隧道client↔server 的加密长连接(SS2 + mux 复用,支持 8 种承载:tcp/kcp/quic/tls/mtls/ws/wss/relay)
端口分配random / fixed / client 三模式
数据流每条公网连接 = 一条 mux 流,经隧道转发到内网
虚拟主机 vhost多域名共享端口,按 Host/SNI/:authority 路由
负载均衡组同组多 client 共享端口,RR 分发
STCP/XTCP不暴露公网端口 / P2P 打洞直连
SSH Gateway接受标准 ssh -R 反向隧道
VNet 虚拟组网多机 TUN 网卡 + 虚拟 IP 三层互通(ping/TCP/UDP),数据经 server 按虚拟 IP 路由

8. 数据流全景

公网用户 ──TCP──▶ 入口端口
                     │
                     ▼
              [Handler 协议解析]      socks5/http/ss/...
                     │ 目标地址
                     ▼
              [Router 编排]  ──► Bypass 直连?──► 直接 TCP
                     │ 选链(Selector)
                     ▼
              [Chain 链]  node1 ──▶ node2 ──▶ ... ──▶ 目标
                     │ (每节点按 proto/transport 包装流)
                     ▼
              双向 copy_bidirectional(零拷贝 splice 优化)