Skip to content

修复协议注册时的静默占位与字段校验#45

Draft
MiChongs wants to merge 1 commit into
codex/transport-finalmask-fullfrom
codex/protocol-registration-validation
Draft

修复协议注册时的静默占位与字段校验#45
MiChongs wants to merge 1 commit into
codex/transport-finalmask-fullfrom
codex/protocol-registration-validation

Conversation

@MiChongs

Copy link
Copy Markdown
Owner

背景

协议注册表此前会把未知协议以及部分协议的无效配置转换成 StubOutbound。这种节点能够通过配置加载和运行时构建,只有真正拨号时才返回“不支持”,导致错误被推迟到数据面,并且可能在订阅热更新后留下一个表面可用、实际不可拨号的节点。

本变更位于完整 FinalMask 实现之上,专门收紧所有仍会生成占位出站的注册路径。该分支只包含一个提交,便于独立审查和回滚。

修改内容

  • 未知协议不再注册占位出站,直接返回包含原始协议名的配置错误。
  • Shadowsocks:
    • 强制要求非空密码;
    • 未知加密算法在注册期报错;
    • Shadowsocks 2022 密钥长度或格式错误会保留底层错误并拒绝注册。
  • ShadowsocksR:
    • 强制要求非空密码;
    • 未知加密算法、混淆方式和协议插件均在注册期报错。
  • Snell:
    • 强制要求非空 PSK;
    • 显式配置的未知加密算法不再回退到默认算法;
    • 非法版本号和未知混淆类型不再被静默忽略。
  • WireGuard:
    • 强制要求私钥和对端公钥;
    • 私钥、公钥、预共享密钥必须严格解码为 32 字节;
    • 地址列表中的每个地址都必须合法,错误项不再被跳过。
  • Sudoku:
    • 强制要求非空密钥;
    • 非法 AEAD、填充上下限和自定义表配置均在注册期失败。
  • 删除注册表对 StubOutbound 的依赖以及已无用途的协议名映射函数。
  • 增加覆盖未知协议、缺失凭据、非法算法、密钥、地址、版本、混淆和数值字段的回归测试。

行为变化

错误配置现在会使静态配置构建或订阅节点热更新原子失败,不会污染运行中的出站注册表。合法配置的协议行为不变。

验证

  • cargo test -p core-outbound --no-fail-fast:415 项全部通过。
  • cargo test -p core-config --no-fail-fast:121 项全部通过。
  • cargo check --workspace --all-targets:通过。
  • cargo fmt --all:通过。
  • git diff --check:通过。

依赖关系

本 PR 的目标分支为 codex/transport-finalmask-full,因为审查和修复是在完整 FinalMask 协议栈基础上完成。合并时应先处理其基线 PR。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant