clash-verge icon indicating copy to clipboard operation
clash-verge copied to clipboard

merge 文件里 rule-providers 的 Bug

Open yaohappiness opened this issue 2 years ago • 6 comments

用 meta core 是正常的,用 premium core 会遇到下面的 Bug:

  • 主配置里同时存在 RULE-SET 和 rule-providers 时:merge 文件里不能用 rule-providers 和/或 RULE-SET。否则,整个 merge 文件的内容都不生效。

  • 主配置里只存在 rule-providers,不存在 RULE-SET;或者主配置 rule-providers 和 RULE-SET 都不存在时:merge 文件里使用 rule-providers 和 RULE-SET 正常。

排除问题

试过下面的情况,Bug 还是复现

  • rule-providers 的 type 设置为 file 或 url
  • rule-providers 的 behavior 设置为 domain、ipcidr 或 classical
  • merge 文件里的 rule-providers 放在文件的最前面
  • 开启或关闭 tun 模式、系统代理

配置和日志

merge 文件的配置

prepend-rules:
  - DOMAIN-KEYWORD,xxx,PROXY-IN-MERGE-FILE
  - RULE-SET,apple,PROXY-IN-MERGE-FILE
  - DOMAIN-KEYWORD,zzz,PROXY-IN-MERGE-FILE

rule-providers:
  apple:
    type: http
    behavior: domain
    url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/apple.txt"
    path: ./ruleset/apple.yaml
    interval: 86400

主配置,下面是正常情况

rules:
  - DOMAIN-KEYWORD,aaa,PROXY
  - DOMAIN-KEYWORD,bbb,PROXY
  - MATCH,PROXY

主配置,下面是有 Bug 的

rules:
  - DOMAIN-KEYWORD,aaa,PROXY
  - DOMAIN-KEYWORD,bbb,PROXY
  - RULE-SET,private,DIRECT
  - RULE-SET,direct,DIRECT
  - MATCH,PROXY

rule-providers:
  private:
    type: http
    behavior: domain
    url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/private.txt"
    path: ./ruleset/private.yaml
    interval: 86400

  direct:
    type: http
    behavior: domain
    url: "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/direct.txt"
    path: ./ruleset/direct.yaml
    interval: 86400

正常日志。www.apple.com 在这里命中 merge 文件里的规则。

time="2022-07-31T00:02:29+08:00" level=info msg="RESTful API listening at: 127.0.0.1:9090"
time="2022-07-31T00:02:29+08:00" level=info msg="Mixed(http+socks) proxy listening at: [::]:7890"
time="2022-07-31T00:02:30+08:00" level=info msg="Start initial compatible provider PROXY"
time="2022-07-31T00:02:30+08:00" level=info msg="Start initial rule provider google"
time="2022-07-31T00:02:30+08:00" level=info msg="Start initial rule provider direct"
time="2022-07-31T00:02:30+08:00" level=info msg="Start initial rule provider lancidr"
time="2022-07-31T00:02:30+08:00" level=info msg="Start initial rule provider apple"
time="2022-07-31T00:02:30+08:00" level=info msg="Start initial rule provider private"
time="2022-07-31T00:02:30+08:00" level=info msg="Start initial rule provider greatfire"
time="2022-07-31T00:02:30+08:00" level=info msg="Start initial rule provider tld-not-cn"
time="2022-07-31T00:02:30+08:00" level=info msg="Start initial rule provider reject"
time="2022-07-31T00:02:30+08:00" level=info msg="Start initial rule provider cncidr"
time="2022-07-31T00:02:30+08:00" level=info msg="Start initial rule provider telegramcidr"
time="2022-07-31T00:02:30+08:00" level=info msg="Start initial rule provider icloud"
time="2022-07-31T00:02:30+08:00" level=info msg="Start initial rule provider proxy"
time="2022-07-31T00:02:30+08:00" level=info msg="Start initial rule provider gfw"
time="2022-07-31T00:02:31+08:00" level=info msg="Start initial compatible provider PT"
time="2022-07-31T00:02:31+08:00" level=info msg="Start initial compatible provider PROXY"
time="2022-07-31T00:02:31+08:00" level=info msg="Start initial rule provider apple"
time="2022-07-31T00:02:47+08:00" level=info msg="[TCP] 127.0.0.1:5820 --> www.apple.com:443 match RuleSet(apple) using PROXY-IN-MERGE-FILE"

有 Bug 的日志。merge 文件里的规则没有生效,www.apple.com 命中了主配置里的规则。

time="2022-07-30T23:44:14+08:00" level=info msg="RESTful API listening at: 127.0.0.1:9090"
time="2022-07-30T23:44:14+08:00" level=info msg="Mixed(http+socks) proxy listening at: [::]:7890"
time="2022-07-30T23:44:15+08:00" level=info msg="Start initial compatible provider PROXY"
time="2022-07-30T23:44:15+08:00" level=info msg="Start initial rule provider direct"
time="2022-07-30T23:44:15+08:00" level=info msg="Start initial rule provider icloud"
time="2022-07-30T23:44:15+08:00" level=info msg="Start initial rule provider google"
time="2022-07-30T23:44:15+08:00" level=info msg="Start initial rule provider proxy"
time="2022-07-30T23:44:15+08:00" level=info msg="Start initial rule provider lancidr"
time="2022-07-30T23:44:15+08:00" level=info msg="Start initial rule provider private"
time="2022-07-30T23:44:15+08:00" level=info msg="Start initial rule provider greatfire"
time="2022-07-30T23:44:15+08:00" level=info msg="Start initial rule provider telegramcidr"
time="2022-07-30T23:44:15+08:00" level=info msg="Start initial rule provider cncidr"
time="2022-07-30T23:44:15+08:00" level=info msg="Start initial rule provider reject"
time="2022-07-30T23:44:16+08:00" level=info msg="Start initial rule provider apple"
time="2022-07-30T23:44:16+08:00" level=info msg="Start initial rule provider gfw"
time="2022-07-30T23:44:16+08:00" level=info msg="Start initial rule provider tld-not-cn"
time="2022-07-30T23:44:16+08:00" level=info msg="Start initial compatible provider PT"
time="2022-07-30T23:44:16+08:00" level=info msg="Start initial compatible provider PROXY"
time="2022-07-30T23:44:16+08:00" level=info msg="Start initial rule provider apple"
time="2022-07-30T23:44:36+08:00" level=info msg="[TCP] 127.0.0.1:5107 --> www.apple.com:443 match RuleSet(direct) using DIRECT"

yaohappiness avatar Aug 01 '22 06:08 yaohappiness

软件版本是 1.0.4,系统 Win 10 x64。

yaohappiness avatar Aug 01 '22 06:08 yaohappiness

主配置里同时存在 RULE-SET 和 rule-providers 时:merge 文件里不能用 rule-providers 和/或 RULE-SET。否则,整个 merge 文件的内容都不生效。

因为你的merge里 用了prepend-rules 和 rule-providers,这里的rules是增量,但是rule-providers会覆盖主配置的,所以主配置配了的rule-set就异常了。这里你用prepend-rule-providers就可以了

zzzgydi avatar Aug 01 '22 09:08 zzzgydi

@zzzgydi

这里你用prepend-rule-providers就可以了

试了一下不行。

这个功能是不是还没有实现?查看 src/services/enhance.ts,发现没有定义。

非常奇怪的情况是,用 meta core 的时候主配置和 merge 里的规则都能生效,只是加载有点慢。

yaohappiness avatar Aug 01 '22 13:08 yaohappiness

好像是没有,sorry记错,rule-providers不是数组,没这个

zzzgydi avatar Aug 01 '22 14:08 zzzgydi

#106 是不是和这个重复了

FlyMeToTheMars avatar Aug 22 '22 18:08 FlyMeToTheMars

@FlyMeToTheMars 不是一样的功能,这个issue是新增enhance规则,#106是新增providers页面

zzzgydi avatar Aug 23 '22 02:08 zzzgydi