f147ffbe9e62d01dbb5c2350a44982d0b7dff3c6
cleanTargets 只做 trim/lower,从不校验取值——port:[70000]、ip_cidr:"not-a-cidr" 这类语法正确但语义非法的值会被顺利渲染进 sing-box 配置。SIGHUP 热重载路径下 sing-box 会自己校验并拒绝这份新配置、保留旧实例继续跑,但 agent 早已把它当 "渲染成功"写盘并记正常日志——于是 /etc/sing-box/config.json 内容看起来正常 (能被 json.load 解析、rules 都在),但线上的 gate 其实完全没生效,而这在 运维层面几乎不可见。 修复: - LoadACLConfig 解析成功后跑一遍 validate():每个 target 的 ip_cidr 必须能被 netip.ParsePrefix 解析,每个 port 必须落在 1-65535,否则返回 error——与解析 失败走同一条路径(fail-closed last-good 兜底),而不是把坏值一路渲染出去。 - 新增 TestRenderedConfig_PassesSingBoxCheck:把渲染结果喂给真实 sing-box 1.13.13 二进制的 `check` 子命令断言 exit 0,把设计 §9 "产物合法性" 验收项落成常驻测试 (exec.LookPath 找不到二进制则 t.Skip,不 fail)。本机 sing-box(homebrew 装, 无 with_v2ray_api tag)会因实验性 v2ray_api 段落报编译期不支持的 FATAL——与本 测试要验的 ACL/route 语法合法性无关,故只在这条测试内剥离该段落后再校验。 TDD:acl_test.go 新增 TestLoadACLConfig_RejectsInvalidPort / _RejectsInvalidCIDR (RED:此前返回 nil error)、TestACL_InvalidPortFallsBackToLastGood(RED:非法端口 被渲染进配置)。三条现全绿。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Pangolin
面向中国大陆用户的终端 VPN(科学上网)项目。
- 设计方案:
docs/技术方案.md - 实施计划:
plan/ - 部署(Phase 0,容器化 + CI/CD):
deploy/
Phase 0 现状
数据面两条线,容器化、经 Gitea Actions 自动部署到节点,与现网服务隔离:
- Xray VLESS + REALITY(主线,经宿主 nginx SNI 分流)
- sing-box Hysteria2(晚高峰加速线,UDP 443)
部署细节见 deploy/README.md。
Description
Releases
22
client 1.1.1
Latest
Languages
Go
36%
Dart
21.3%
JavaScript
13%
HTML
12.8%
Shell
4.4%
Other
12.3%