V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
traffic
V2EX  ›  宽带症候群

有没有优雅的 Clash 规则修改方式

  •  2
     
  •   traffic · 2023-05-24 02:10:18 +08:00 · 13020 次点击
    这是一个创建于 553 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我目前的 CLASH 订阅使用方式是


    Parser 很好用,能够添加策略组、新订阅、新节点等等。

    但是手机、路由器该怎么办呢? Parser 是 Clash For Windows 独有的功能。


    所以想请教各位,有没有什么办法能够直接在订阅链接里就将规则自定义(基于某个现有规则修改)完成,而不需要依赖于特定客户端。

    这样既不用自己维护基础规则,又能根据自己的需要进行修改,同时不局限于某个客户端实现。

    订阅链接例子:

    https://acl4ssr-sub.github.io//sub?target=clash&new_name=true&url=<订阅链接>&insert=false&config=https%3A%2F%2Fraw.githubusercontent.com%2FACL4SSR%2FACL4SSR%2Fmaster%2FClash%2Fconfig%2FACL4SSR_Online_Full_MultiMode.ini&emoji=true&list=false&tfo=false&scv=false&fdn=false&sort=false&clash.doh=true&new_name=true&append_type=true&udp=true&scv=true
    

    Parser 例子:

    parsers: # array
      #匹配所有这个开头的规则
      - reg: https://(acl4ssr-sub|sub.xeton).dev.+$
        yaml:
          #mix-object:
           # authentication:
            #  - "proxy:K"
          append-proxies: #添加自定义节点
            - name: "socks5 代理"
              type: socks5
              server: geo.
              port: 42
              username: 
              password: 
              # tls: true
              # skip-cert-verify: true
              # udp: true
          append-proxy-groups: # 添加自定义策略组
            - name: 🇹🇷 土耳其节点
              type: select
              url: http://www.gstatic.com/generate_204
              interval: 300
              proxies:
                - DIRECT
                - 🚀 节点选择
            - name: 🇪🇺 欧洲节点
              type: select
              url: http://www.gstatic.com/generate_204
              interval: 300
              proxies:
                - DIRECT
                - 🚀 节点选择
            - name: 🇪🇺 欧盟节点
              type: select
              url: http://www.gstatic.com/generate_204
              interval: 300
              proxies:
                - DIRECT
                - 🚀 节点选择
            - name: 🚰 大流量
              type: select
              url: http://www.gstatic.com/generate_204
              interval: 300
              proxies:
                - DIRECT
              use:
                - hightraffic
                #- hightraffic2
            - name: 🚰 大流量选择器
              type: select
              url: http://www.gstatic.com/generate_204
              interval: 300
              proxies:
                - DIRECT
              use:
                - hightraffic
                #- hightraffic2
            - name: 🚰 大流量负载均衡
              type: load-balance
              url: http://www.gstatic.com/generate_204
              interval: 300
              use:
                - hightraffic
                #- hightraffic2
            - name: 🚰 大流量自动选择
              type: url-test
              url: http://www.gstatic.com/generate_204
              interval: 300
              use:
                - hightraffic
                #- hightraffic2
          mix-proxy-providers:  #添加自定义规则组
            hightraffic: 
              type: http 
              path: ./Proxy/hightraffic.yaml 
              #大流量机场的订阅链接,需要是 clash 格式
              url: https://
              interval: 21600 
              health-check:  
                  enable: true
                  url: http://www.gstatic.com/generate_204
                  interval: 300
          commands:
            # 向 策略组 内添加节点
            #- proxy-groups.🚰 大流量.proxies=[]proxyNames|^(?=(.Trojan.*(香港)))\1((?!(Hongkong)).)*$
            #- proxy-groups.🚰 大流量负载均衡.proxies=[]proxyNames|^(?=(.Trojan.*(香港)))\1((?!(Hongkong)).)*$
            # 向 其他策略组 添加 该策略组
            - proxy-groups.🚀 节点选择.proxies.0+🚰 大流量 # 向 🚀 节点选择 策略组添加组名🚰大流量  
            - proxy-groups.🚀 节点选择.proxies.0+🚰 大流量负载均衡
            - proxy-groups.🚀 节点选择.proxies.0+🚰 大流量自动选择
            - proxy-groups.Ⓜ️ 微软云盘.proxies.0+🚰 大流量
            - proxy-groups.Ⓜ️ 微软云盘.proxies.0+🚰 大流量负载均衡
            - proxy-groups.Ⓜ️ 微软云盘.proxies.0+🚰 大流量自动选择
    
          prepend-rules:  #添加自定义规则
            # 自定义开始
            - DOMAIN-SUFFIX,example.com,♻️ 自动选择
    39 条回复    2024-10-10 20:44:19 +08:00
    enzyme
        1
    enzyme  
       2023-05-24 05:46:43 +08:00 via iPhone
    用 proxy-providers 和 rule-providers
    eb0c6551
        2
    eb0c6551  
       2023-05-24 05:55:41 +08:00
    我也想找到一个比较好的办法,我目前用免费的 Cloudflare Workers ,直接暴力替换和编辑 yaml 文件再返回,相当于自己又订阅“转换”了一层。
    SenLief
        3
    SenLief  
       2023-05-24 07:22:26 +08:00 via iPhone
    自己托管规则在 gist ,然后修改 gist 更新即可。
    aptupdate
        4
    aptupdate  
       2023-05-24 07:34:29 +08:00 via iPhone   ❤️ 2
    https://github.com/LittlePonyX/ClashXKindly-config
    可以试试这个,如果是 Meta 内核的话就能更简单点。
    AS4694lAS4808
        5
    AS4694lAS4808  
       2023-05-24 07:42:27 +08:00 via Android
    目前是一个文件写好所有规则,包括 proxy ,proxy-provider ,rule-provider ,精心设置的 rule (比如 MATCH 选择, 选择 use Direct 和一个 proxy-provider ,方便随时切换白名单模式和 gfw 模式),然后传到公网私有 git ,供所有客户端订阅。
    shunia
        6
    shunia  
       2023-05-24 09:46:38 +08:00
    1 楼正解,我也是上个月才知道的。需要根据原始订阅链接,手写一份 yml ,以后就基本可以一劳永逸了。

    ```
    proxy-providers:
    {定一个名字比如机场}:
    url: {clash 的原始订阅链接}
    {...其他字段比如更新频率}

    rule-providers:
    reject:
    url: {三方规则的链接,比如 Loyalsoldier 或者 ACL4SSR}
    {...其他规则}
    ```

    剩下的内容保留原始订阅文件的大部分内容,去掉并对应更改原始订阅里的 rules 就好了。

    另外还学了一个 relay 的设置方法,感觉有的时候也挺有用的: https://gist.github.com/miaomiaoclub/6947f7cb93846301f1658da0edcd61bf
    kongxiao00532
        7
    kongxiao00532  
       2023-05-24 09:49:05 +08:00
    马一波 每次更新以后改规则太痛苦了
    sp670
        8
    sp670  
       2023-05-24 10:06:09 +08:00   ❤️ 1
    一直记事本手搓的路过。。。
    ryalu
        9
    ryalu  
       2023-05-24 10:16:56 +08:00   ❤️ 1
    用 proxy-providers 和 rule-providers, 自己定义好模版,然后自己弄个脚本解析下订阅链接并填充到模板中,这个只需要手动生成一次就行。我自己搞了个可以参考下 https://github.com/ryan961/clashset
    banmuyutian
        10
    banmuyutian  
       2023-05-24 10:17:01 +08:00   ❤️ 1
    我的做法:fork 一份 ACL4SSR 按个人需求修改,部署 subconverter 到自己的轻量服务器,这样多端都可以拿到统一配置了
    lihang1329
        11
    lihang1329  
       2023-05-24 10:38:53 +08:00
    happy23
        12
    happy23  
       2023-05-24 10:55:07 +08:00 via iPhone
    前段时间刚在捣鼓,目前是自己搭建了 subconverter ,然后在 subconverter 自定义了规则。
    ae
        13
    ae  
       2023-05-24 11:19:19 +08:00
    关注一下
    xipuxiaoyehua
        14
    xipuxiaoyehua  
       2023-05-24 11:20:32 +08:00
    有没有可能 subconveter 就可以自定义配置呢
    zhywang
        15
    zhywang  
       2023-05-24 11:45:58 +08:00
    自己写个 python 脚本,定义好分组逻辑,然后用这个脚本生成最终的 yml 不就好了,估计简单需求逻辑代码 100 行以内就可以搞定
    K8dcnPEZ6V8b8Z6
        16
    K8dcnPEZ6V8b8Z6  
       2023-05-24 11:49:37 +08:00
    自己手搓 然后把原始规则作为 provider 就好
    规则这种东西真的只能各用各的
    Mrcocoa
        17
    Mrcocoa  
       2023-05-24 15:43:43 +08:00
    之前用的 proxy-providers ,在 mac clash pro ,整合了两三和机场的节点,然后每次点开 clash 选节点就很卡,难道节点太多了?
    xausky
        18
    xausky  
       2023-05-24 16:44:48 +08:00
    自己写 config 挂到 gist 然后 subconverter 连接里面贴上自己的配置地址就像我这个: https://gist.github.com/xausky/44a5472f515713067202faa649ea303f/raw/rules.ini
    traffic
        19
    traffic  
    OP
       2023-05-24 17:00:34 +08:00
    可能有几位误解了,不是说要在 subconverter 中自定义配置地址。

    subconverter 中已经添加了 ACL4SSR 的配置,然后导入到 Clash For Windows ,再进行修改。

    我目前让 AI 写了一个 Cloudflare Workers 脚本,相当于在线实现 Clash For Windows 的 Parsers 。
    但很可惜不能用,我不懂 JS 所以没办法排错,有没有大佬看看
    即:
    - 传入 2 个 YAML ,一个完整的原始 Clash YAML 配置,一个和 Clash For Windows 的 Parsers 一样的 YAML
    - 根据 Parsers 对原始 YAML 进行修改
    - 返回修改过的 YAML

    https://paste.gg/p/anonymous/7af30bc8183949f5ad3a6b3293bc1315
    sheg
        20
    sheg  
       2023-05-24 17:27:00 +08:00   ❤️ 1
    NoInternet
        21
    NoInternet  
       2023-05-24 17:46:06 +08:00
    我是在 openclash 里编辑,然后从配置文件里复制出来
    MYDB
        22
    MYDB  
       2023-05-24 18:00:19 +08:00 via iPhone
    根据 wiki 说明所有内容纯手写的……用到哪个写哪个,至于节点订阅更新,稍微大点的机场半年不会变
    Mythologyli
        23
    Mythologyli  
       2023-05-24 18:44:44 +08:00 via Android
    @traffic 直接在 ACL4SSR 基础上改好,写个新的 config 给 subconvertor 用就好,为啥要在客户端改
    tony1016
        24
    tony1016  
       2023-05-24 19:02:58 +08:00
    我放在自建的 nextcloud ,用 proxy-provider 引入机场,规则自定义
    traffic
        25
    traffic  
    OP
       2023-05-24 19:29:45 +08:00
    @Mythologyli #23 首先是因为手动覆盖规则比较麻烦,其次是自动更新上游也比较麻烦,再者是规则里面似乎是不能添加节点的?
    LAMoon
        26
    LAMoon  
       2023-05-24 20:11:33 +08:00
    直接 github 自己写一个就行了
    Solar666
        27
    Solar666  
       2023-05-24 20:13:36 +08:00
    🐎
    Yuesh1
        28
    Yuesh1  
       2023-05-24 20:26:21 +08:00
    Mythologyli
        29
    Mythologyli  
       2023-05-25 01:06:18 +08:00
    @traffic
    https://imgur.com/a/wrbydFY
    更新上游的话,config 里可以直接用 URL 的方式使用上游的规则 list ,连手动 Merge 都省了。自己的规则 /分组额外加进去就可以
    如果需要覆盖 ACL4SSR 已有的规则,直接自己创一个规则排在最前面,Clash 会优先匹配
    至于添加节点,这就是 subconverter 的基本功能,可以看看 subconverter 的 README
    traffic
        30
    traffic  
    OP
       2023-05-25 01:53:09 +08:00
    @Mythologyli #29 我知道可以 subconverter 可以添加,但我是将某个订阅的所有节点添加到某个组,比如大流量机场订阅单独放一个组,而不合并到原策略组中。
    而覆盖规则我分的节点比较杂,ruleset 这种写法不太适合我,且可能要根据机场调整。
    f0rger
        31
    f0rger  
       2023-05-25 23:09:51 +08:00 via iPhone
    其实上面都说了,subconverter 本身就支持自定义,包括你说的 cfw 以及其他的设备,最多就是 ini 配置不一样,这点你可以直接在 worker 里面判断来源的 ua 头使用不同的 ini 就可以实现了。你所使用的 acl 那个配置你有打开看看吗,你打开看看就明白了,不明白的就看 acl 的在 gh 上的那个文档
    VxJiahua
        32
    VxJiahua  
       2023-05-27 11:40:02 +08:00 via Android
    我只知道软路由 openclash ,自己写策略组
    wayne3602
        33
    wayne3602  
       2023-07-27 15:55:13 +08:00
    @shunia 请问这个 relay 是什么意思呢?我导入自建的节点(节点都有效),在节点选择里选了 iRimo Private Relay ,但是 iRimo Private Relay 的延迟超时,但可以科学上网,他是类似于自动选择吗
    shunia
        34
    shunia  
       2023-07-28 22:12:09 +08:00
    @wayne3602 #33 relay 已经被 tunnel 代替了,可以搜一下帖子,和我发的 gist 是同一个作者。
    作用我个人觉得是两个:
    一个是确保出口 ip 稳定,某些情况下有点用;
    一个是你有一个高速稳定的国内中转的机场,可以拿它的高速中转衔接任何目标服务器,基本上可以无视目标服务器的网络(实际还是受延迟影响的);

    比如你有 oracle 的免费服务器但是直连很渣,那么前面配一个贼便宜的高速中转机场,就可以把 oracle 变成可以高速访问了。不过注意是浪费两次流量。

    不过话说回来,实际情况下可能作用都很有限,我配好了一个 tunnel ,大部分情况下不如我的机场本身稳定和快速,比较鸡肋。
    wayne3602
        35
    wayne3602  
       2023-07-29 00:41:01 +08:00 via Android
    @shunia 有点高级哈哈,研究研究
    HeMinWon
        36
    HeMinWon  
       2023-11-16 11:37:20 +08:00
    @enzyme proxy-providers 如何做正则匹配
    traffic
        37
    traffic  
    OP
       342 天前
    让 GPT4 写了一个 python 版的,command 实现有点不正确,其他的基本没啥问题。
    我 command 用的不多懒得改了,使用方法已经写在里面了。

    https://paste.gg/p/anonymous/907d4221f0234c07b3ef55bbc37e104e
    traffic
        38
    traffic  
    OP
       342 天前
    traffic
        39
    traffic  
    OP
       48 天前
    发现了这个项目,已经用上了
    https://github.com/InoryS/Clash-Parser-Online
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1431 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 17:22 · PVG 01:22 · LAX 09:22 · JFK 12:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.