Verify steps
环境 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
mm → 6 配置文件管理 → b 本地生成配置文件 → 2 选择规则模版 → 选 "ShellCrash-ruleset全分组规则+去广告" (ShellCrash_RS_Full_BanAds.json)
- 1 生成包含全部提供者的配置文件(生成成功,
jsons/config.json 更新)
- 重启服务
实际行为 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.sh 的 gen_dns() 硬编码只生成 cn 规则集到 add_rule_set.json;gen_outbounds() 生成的 route.json 只有基础规则。模板(providers/outbounds.json)中完整的 route.rules 和 route.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
Verify steps
环境 Environment
Description
选择规则模板(如 "ShellCrash-ruleset全分组规则+去广告")后,生成的 route.json 没有引用模板中定义的 rule_set,导致模板的分流规则完全未生效。
复现步骤 Steps to reproduce
mm→ 6 配置文件管理 → b 本地生成配置文件 → 2 选择规则模版 → 选 "ShellCrash-ruleset全分组规则+去广告" (ShellCrash_RS_Full_BanAds.json)jsons/config.json更新)实际行为 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.sh的gen_dns()硬编码只生成cn规则集到add_rule_set.json;gen_outbounds()生成的route.json只有基础规则。模板(providers/outbounds.json)中完整的route.rules和route.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