Skip to content

[Bug] ShellCrash 配合 QUIC/AnyTLS 协议机场的两个适配问题 #1297

Description

@zhangzongli

Verify steps

  • 我已经在 Issue Tracker 中找过我要提出的问题 I have searched on the issue tracker for a related issue.
  • 我已经使用公测版本测试过,问题依旧存在 I have tested using the test mod, and the issue still exists.
  • 我已经仔细看过 常见问题 并无法自行解决问题

Description

ShellCrash 在配合使用 QUIC、AnyTLS 等非标准协议(且节点域名依赖私有 DoH 解析)的机场时,会遇到两个导致无法翻墙的问题。

问题一:不走订阅自带的 DoH,节点能加载但无法使用

这类机场的节点域名(如 *.quandao.com)只有通过机场自有的私有 DoH 才能解析到正确 IP,公共 DNS 会返回过期地址。ShellCrash 的 clash_modify.sh 在生成 DNS 配置时没有保留订阅中的 nameserver-policyproxy-server-nameserver,导致域名解析失败,表现为面板中节点全部加载成功但所有连接超时。

修复方式:修改 clash_modify.sh 第 57-58 行,在 nameserver-policy 中为机场域名指定私有 DoH,并将 proxy-server-nameserver 指向相同的私有 DoH,同时确保 dns_mod=mix

问题二:自定义代理组时 YAML 校验失败

通过 yamls 目录创建自定义代理组时,clash_modify.sh 有两处代码缺陷会导致生成的 YAML 缩进错乱,报错 proxies[x] expected type 'string', got unconvertible type 'map[string]interface {}'

  1. 第 128 行提取 space_name(基准缩进)的 grep 正则 '^ *- \{?name: ' 匹配不到内联 YAML 格式 { name: xxx }{name 之间有空格),导致 space_name 为空,自定义组的 - name: 缩进被清零。
  2. 第 131 行管道中 #自定义策略组开始/结束 标记在缩进变换之前插入,被 s/^ */ 额外添加空格,导致标记处于 YAML 属性级缩进;由于 YAML 解析器忽略注释,后续的订阅原始组被误吞进自定义组的 proxies: 列表。

修复方式:第 128 行改用 sed -n '/^ *- /{s/^\( *\).*/\1/p;q}' 提取缩进(不依赖具体格式);第 131 行将标记移到管道末尾并去掉前导空格;第 124-125、230 行的基于标记的删除逻辑可一并删除(core_config 每次从原始订阅重新提取,标记从未真正被匹配到)。


以上两个问题均在小米 AX1800 + 狗狗加速机场环境下复现并修复,修复后的 clash_modify.sh 可正常生成校验通过的配置。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions