Skip to content

[Bug] sing-box 内核选择规则模板后 route.json 未引用模板 rule_set,分流规则完全不生效 #1326

Description

@foxlesbiao

Verify steps

  • 我已经在 Issue Tracker 中找过我要提出的问题
  • 我已经使用公测版本测试过,问题依旧存在
  • 我已经仔细看过常见问题并无法自行解决问题

环境 Environment

  • ShellCrash 1.9.5beta1 (dev)
  • 内核: sing-box 1.14.0-alpha.50 (singboxr, arm64)
  • 系统: OpenWrt 18.06-SNAPSHOT (小米)
  • 安装目录: /mnt/usb-d2304ff3/ShellCrash (USB)

Description

选择规则模板(如 "ShellCrash-ruleset全分组规则+去广告")后,生成的 route.json 没有引用模板中定义的 rule_set,导致模板的分流规则完全未生效。

复现步骤 Steps to reproduce

  1. mm → 6 配置文件管理 → b 本地生成配置文件 → 2 选择规则模版 → 选 "ShellCrash-ruleset全分组规则+去广告" (ShellCrash_RS_Full_BanAds.json)
  2. 1 生成包含全部提供者的配置文件(生成成功,jsons/config.json 更新)
  3. 重启服务

实际行为 Actual behavior

启动后 /tmp/ShellCrash/jsons/route.json 只有 6 条基础规则:

{
  "route": {
    "rules": [
      {"action": "sniff"},
      {"protocol": "dns", "action": "hijack-dns"},
      {"ip_is_private": true, "outbound": "DIRECT"},
      {"protocol": "quic", "action": "reject", "no_drop": true},
      {"protocol": "bittorrent", "action": "reject"},
      {"outbound": "节点选择"}
    ]
  }
}

/tmp/ShellCrash/providers/outbounds.json(模板生成)里明明有完整的 24 条 rules + 22 个 rule_set 定义(private/ads/ai/netflix/cn/cnip 等),add_rule_set.json 也只被硬编码成仅含 cn

{
  "route": {
    "rule_set": [
      {
        "tag": "cn",
        "type": "remote",
        "format": "binary",
        "path": "./ruleset/cn.srs",
        "url": "https://testingcf.jsdelivr.net/gh/DustinWin/ruleset_geodata@sing-box-ruleset/cn.srs"
      }
    ]
  }
}

结果:所有流量走代理(国内网站也绕代理),模板里配置的广告拦截、流媒体分流、国内直连全部不生效。

期望行为 Expected behavior

选择模板后,route.json 应引用模板中定义的完整 rule_set(或至少 add_rule_set.json 应包含模板的全部规则集定义),使分流规则生效。

根因分析 Root cause (self-investigated)

starts/singbox_modify.shgen_dns() 硬编码只生成 cn 规则集到 add_rule_set.jsongen_outbounds() 生成的 route.json 只有基础规则。模板(providers/outbounds.json)中完整的 route.rulesroute.rule_set 被丢弃,未合并进最终配置。

临时解决方案 Workaround

$CRASHDIR/jsons/route.json(持久化目录,启动时软链为 cust_route.json 增量合并)手动写入完整的 route 引用,可绕过此问题:

{
  "route": {
    "rules": [
      {"action": "sniff"},
      {"protocol": "dns", "action": "hijack-dns"},
      {"ip_is_private": true, "outbound": "DIRECT"},
      {"protocol": "quic", "action": "reject", "no_drop": true},
      {"protocol": "bittorrent", "action": "reject"},
      {"rule_set": ["Custom_Direct_Domain", "Custom_Direct_IP"], "outbound": "DIRECT"},
      {"rule_set": ["Custom_Proxy_Domain"], "outbound": "节点选择"},
      {"rule_set": ["ads"], "outbound": "REJECT"},
      {"rule_set": ["cn", "cnip"], "outbound": "DIRECT"},
      {"outbound": "节点选择"}
    ]
  }
}

相关链接 Related

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