sucaddy v5.1 架构精简:用 SSH 反向隧道取代自建 Relay

为什么动了 Relay? sucaddy 的 Relay 模块最初的设计思路很朴素:把边缘节点的流量通过中继节点转发,实现跨网段互通。代码里手写了一套 AES-256-GCM 加密,用 FIFO 队列管理连接,单连接模式跑通信。 用着用着问题就出来了: FIFO 死连接:旧连接不释放,把队列占满,新连接挤不进去 没有多路复用:一个连接只能传一个流,并发能力为零 断线重连有间隙:1 秒空窗期间请求直接丢,实测成功率只有 67% 每次排查这些问题都让我怀疑人生——这些功能 SSH 原生不就自带吗?为什么我要自己写一遍,还写得这么烂? 方案对比:自建 vs 成熟方案 维度 自建 Relay SSH 反向隧道 加密 手写 60 行 AES-256-GCM SSH 内置 AES-256-GCM 多路复用 ❌ ✅ SSH channels 成功率 67% 100% 延迟 3.5-4.8s 2.3-2.6s 代码量 ~350 行 0 行 保活 自己写心跳 autossh + systemd 结论很明显:删掉它。 具体怎么干的 SSH 反向隧道拓扑 边缘节点 → 中心节点 :端口A → 边缘节点本地服务(直连回内网) 边缘节点 → 中心节点 :端口B → 边缘节点出墙链路 中心节点上用 systemd + autossh 保活,断线自动重连 边缘节点用 cron keepalive 防止 NAT 超时 一条命令搞定:ssh -R [端口]:[目标地址]:[目标端口] user@host NaiveProxy 新增 tcp:ADDR 路由 在 NaiveProxy 里加了一个新的路由类型:route: tcp:ADDR。用户认证成功后,直接转发到本地指定端口(比如 SSH 隧道的入口)。大约 25 行代码,替代了整个 relay 入口模块。 ...

2026-04-29 · 2 min