背景

sucaddy 从 v1.0 迭代到现在 v12.4,从一个实验性的代理隧道项目,变成了我日常依赖的网络基础设施。跨境流量、内网穿透、博客服务——全部跑在这 5 台节点上。

基础设施多了,运维就得跟上。之前靠手敲命令查状态,既慢又不靠谱。于是有了这套健康巡检系统。

架构

5 个节点,3 种角色:

🇰🇷 Korea    — Hub         入站 + NaiveProxy
🇭🇰 HK       — Landing+Hub  双栈出口
🇺🇸 Blog      — Hub+Blog    站点服务 + NaiveProxy
🇨🇳 成都      — Relay        隧道 + 反向服务器
🐧 Armbian    — Proxy        内网代理 + 反向客户端

所有节点运行同一套 sucaddy 二进制(amd64 全一致),配置通过 sync-config 自动同步,部署走 deploy.sh 一键推送 + MD5 校验。

巡检维度

健康检查脚本覆盖 6 个维度:

1. 存活检查

systemctl is-active + ss -tlnp + TCP 握手三重验证。5 节点 × 全部端口,缺一个就标红。

2. 稳定性评分

检测 uptime、重启次数、journal 关键错误、时钟偏移。chrony 同步下时钟偏移基本没有超过 1ms,这是我之前用 systemd-timesyncd 做不到的。

3. 版本一致性

编译后校验二进制 MD5,部署后全节点比对。之前踩过坑——某个节点部署失败,旧版跑了半个月没发现。

4. 进程纯净度

每节点只允许 1 个 sucaddy 进程,0 个 stale 残留文件。部署脚本结束后自动检查,多出来的直接告警。

5. 全链路检测

从 NETWORK-LINKS.md 自动读取 13 条链路定义,逐条验证:

  • 4 条节点直连出口
  • 4 条 SS 加密隧道(成都→韩国/香港/博客)
  • 2 条 NaiveProxy 路由(韩国→HK/Blog)
  • 1 条反向隧道(成都→Armbian)
  • 2 条 Armbian 代理出口(SOCKS5/HTTP)

每一条链路都跑实际 TCP 连接 + 延迟测量。

6. 时钟偏移

SS 2022 协议要求时间偏差不超过 30s。之前成都节点因 NTP 失效每天漂移 3s,导致隧道频繁断连。部署 chrony + 定期巡检后彻底解决。

真实数据

这是今天巡检的结果:

🟢 Korea:   A 100, uptime=9d 21h, 0 restarts
🟢 成都:     A 100, uptime=9d 21h, 0 restarts
🟢 HK:      A 100, uptime=9d 21h, 0 restarts
🟢 Blog:    A 100, uptime=9d 21h, 0 restarts
🟢 Armbian: A 100, uptime=3d 1h,  0 restarts

13/13 链路全通,近 10 天零故障。这个结果不是偶然——每天定时巡检 + 版本锁 + 时钟同步,三层保障叠出来的。

技术细节

巡检脚本结构:

scripts/
├── health-check.sh     # 入口
├── deploy.sh           # 编译 + 推送 + 核验
├── sync-config.sh      # 配置同步 + MD5
└── lib/
    ├── common.sh       # ANSI、SSH、节点加载
    ├── gather.sh       # 数据采集(含时钟偏移)
    ├── checks.sh       # 健康/稳定/版本/进程
    └── links.sh        # 全链路测试

每台节点 SSH 直连,采集时间 ~2 秒。全量检查(5 节点 + 13 链路)约 12 秒出结果。

链路定义写在 NETWORK-LINKS.md 的 LINKS_START/LINKS_END 块内,config.yaml 变更后 git post-commit hook 自动更新,不需要手动维护。

踩过的坑

  • systemd-timesyncd 不够用:成都节点每天漂移 2-3s,换了 chrony 后稳定在 0.1ms 以内
  • h2 ALPN 被拒绝:NaiveProxy 的 NextProtos 带 h2 时导致 HTTP 请求无法解析,改成 http/1.1 only 解决问题
  • 反向隧道死连接:5s 写超时 + 连接池预建 2 条控制连接,完成切换无感
  • 部署顺序反了:hub 节点最后部署,否则新灰度配置会污染 cache

总结

运维自动化不是一蹴而就的。sucaddy 这套巡检系统是从每一次故障、每一次手敲命令的烦躁中逐步拼出来的。

核心原则就三条:

  1. 能自动化就别手敲——巡检、部署、配置同步全部是脚本一键
  2. 能验证就立刻验——MD5 校验、链路全通、版本一致,不发半成品
  3. 能度量的才能管理——每台节点的 uptime、重启数、错误率、时钟偏移全部量化打分

未来计划:加告警推送(Telegram)、历史趋势图、自动故障恢复。