V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zeyezhan
V2EX  ›  程序员

自定义 Clash 代理规则的方案(使用 github actions 缓存到 CDN,提升访问速度)

  •  
  •   zeyezhan ·
    zhanyeye · 2022-08-13 19:59:45 +08:00 · 3562 次点击
    这是一个创建于 827 天前的主题,其中的信息可能已经有所发展或是发生改变。

    链接: https://github.com/zhanyeye/clash-rules-lite

    Clash Rules Lite

    🍒 自定义代理规则,精简匹配规则 (代理匹配速度明显提升)。

    工具介绍

    • Clash 默认的 GFW 代理规则内容太多,使用过程中明显感觉到有延迟
    • 该工具的目的是删除不必要的代理规则,方便用户自定义代理的内容
    • 代理规则放在 github 仓库中方便多设备同步,只需编辑rules.txt即可
    • 当用户更新规则后,使用 Github Actions 自动将规则缓存到免费 CDN 上
    • 用户在 github 上更新规则后,在 clash 的 providers 上点击刷新就可以了

    使用方法

    1. fork 本仓库:Fork zhanyeye/clash-rules-lite

    2. 鼠标右击订阅的配置文件选中“复制”,将复制的文件命名为local(因为更新订阅链接时会覆盖你的修改)

    1. 在你复制的 local 配置中,修改配置如下,注意 proxies, proxy-groups{YOUR-GITHUB-USERNAME} 修改为你的配置(加粗的部分)
     
    mixed-port: 7890
    allow-lan: true
    bind-address: '*'
    mode: rule
    log-level: silent
    external-controller: '127.0.0.1:9090'
    proxies:
        - { name: '1-香港', type: *, server: **, port: *, cipher: **, password: **, udp: true }
        - { name: '2-香港', type: *, server: **, port: *, cipher: **, password: **, udp: true }
    proxy-groups:
        - { name: 'PROXY', type: select, proxies: ['1-香港', '2-香港'] }
    rules:
      - DOMAIN-KEYWORD,github,PROXY
      - DOMAIN-KEYWORD,google,PROXY
      - RULE-SET,pac,PROXY
    rule-providers:
      pac:
        type: http
        behavior: domain
        url: "https://cdn.jsdelivr.net/gh/{YOUR-GITHUB-USERNAME}/clash-rules-lite@release/rules.txt"
        path: ./rules/pac.yaml
        interval: 86400
    script:
      code: |
        def main(ctx, metadata):
            keywords = ["google", "github"]
            for key in keywords:
                if key in metadata["host"]:
                    return "PROXY"
            if ctx.rule_providers["pac"].match(metadata):
                return "PROXY"
            else:
                return "DIRECT"
    
    
    1. 运行修改后的 local 配置,再切换成 RuleScript 模式

    自定义代理规则

    修改仓库中rules.txt,修改完后会自动更新并邮件提醒,然后在 Clash 上刷新 providers

    高阶玩法

    • 使用 python 脚本解析订阅链接,自动生成改配置文件,需要你在 Python 代码中设置好你的订阅链接,代码见:generate_config_quickly.py
    • 注意该解析脚本是基于本人的订阅链接编写的,不一定适合所有机场,你可以自己修改代码,比较容易
    25 条回复    2022-08-21 17:45:47 +08:00
    zeyezhan
        1
    zeyezhan  
    OP
       2022-08-13 20:13:35 +08:00
    zeyezhan
        2
    zeyezhan  
    OP
       2022-08-13 20:24:08 +08:00
    这个配置手机上也可以用~
    zeyezhan
        3
    zeyezhan  
    OP
       2022-08-13 21:28:42 +08:00
    顶一顶~
    SimonOne
        4
    SimonOne  
       2022-08-13 23:33:02 +08:00   ❤️ 1
    ```
    proxy-providers:
    示例:
    type: http
    url: clash 订阅链接
    interval: 86400
    path: ./示例.yaml
    health-check:
    enable: true
    interval: 600
    # lazy: true
    url: http://clients1.google.com/generate_204
    ```

    直接将订阅地址写在主文件里得了,不要用客户端的订阅功能,不要 copy ,不然机场的更新不是废了。
    SimonOne
        5
    SimonOne  
       2022-08-13 23:40:42 +08:00   ❤️ 1
    SimonOne
        6
    SimonOne  
       2022-08-13 23:52:21 +08:00   ❤️ 2

    你的高阶玩法里的 python 感觉就是重复造了 clash 已有的轮子啊
    直接用 proxy-groups 和 proxy-providers 就行了
    规则用 rule-providers
    lostberryzz
        7
    lostberryzz  
       2022-08-13 23:57:34 +08:00   ❤️ 4
    你这个规则甚至连能用都谈不上,区区 73 个域名远远不能覆盖 gfw 名单,还有 DOMAIN-KEYWORD 的方式过于蠢了,就一个很简单的场景,类似于 githubproxy 这样的国内加速域名按你的配置走的是代理,但实际上它解析的是国内 IP 。

    推荐一个自用的规则: https://github.com/Loyalsoldier/clash-rules
    zeyezhan
        8
    zeyezhan  
    OP
       2022-08-14 01:42:12 +08:00
    @lostberryzz 谢谢您的意见。
    1. 确实是在这样,我是用多少加多少,我的需求还是很少的
    2. DOMAIN-KEYWORD 等有时间就研究一下是怎么回事嘿
    3. githubproxy 原来是国内域名呀,学到啦

    您的推荐我也用过,就是参考他来改的,因为我真正用到的网站估计 100 个以内,使用那个规则集太丰富了,感觉有些延迟了,所以才有了这个想法。

    我的需求是:不需要那么全面的规则集,因为用不上太多,而且好像影响访问速度,够用就行,慢慢积累合适自己的规则。
    zeyezhan
        9
    zeyezhan  
    OP
       2022-08-14 01:46:02 +08:00
    @SimonOne
    谢谢您的回复,
    啊,这里我确实是在造轮子,可能用高阶这个次不合适,我把它改掉。
    主要是我的需求比较奇怪,觉得订阅更新后再更新配置好麻烦,所以想在生成自己的配置去替换订阅链接给我的配置
    zeyezhan
        10
    zeyezhan  
    OP
       2022-08-14 01:47:29 +08:00
    @SimonOne
    哇塞,原来是样解决的呀!!!!
    谢谢指导~
    zeyezhan
        11
    zeyezhan  
    OP
       2022-08-14 01:53:48 +08:00
    @lostberryzz
    关于 githubproxy ,想了想在我的需求中,github 都走代理啦,好像不会用上 githubproxy 呀😂
    ByteCat
        12
    ByteCat  
       2022-08-14 01:59:50 +08:00   ❤️ 1
    每个人都会造自己的轮子 😂
    不过我用的是 subconverter 转换配置,因为以前 iOS 没有 Clash ,而且生成的规则兼容性比较好,早期的 Clash 不支持 rule-provider 。
    在这里:
    https://github.com/imbytecat/subconverter-config/blob/main/rule-set.sample.ini
    magicdawn
        13
    magicdawn  
       2022-08-14 04:40:19 +08:00 via Android   ❤️ 1
    还真是每个人都有自己的轮子,
    我造了一个 GUI 的 https://github.com/magicdawn/clash-config-manager

    规则集永远无法适配所有人,这个 GUI 就是碰到一个链接,可以方便的从 chrome or 剪贴板读取并解析,然后快速选择 domain-suffix 或者 domain-keyword ,keyword, target 新建一条 rule
    jinqzzz
        14
    jinqzzz  
       2022-08-14 08:42:58 +08:00 via iPhone
    我之前也造过一个轮子,大概就是过滤 v2ray base64 编码的节点订阅,然后转成 surge 。不过是很久之前了,16 年左右,那时候还没有 subconvert 和 clash
    A01514035
        15
    A01514035  
       2022-08-14 10:41:14 +08:00
    好像有现成的规则吧,我是用这个的。
    FrankAdler
        16
    FrankAdler  
       2022-08-14 10:57:30 +08:00 via iPhone
    重复造轮子的结果就是三分热度,最后用 topN 的已有轮子,我劝你放弃
    yfugibr
        17
    yfugibr  
       2022-08-14 11:35:09 +08:00 via Android
    cfw 可以用 parser.yaml, 我直接用自己的规则覆盖了机场的,订阅更新时也会自动处理
    fanguangwei
        18
    fanguangwei  
       2022-08-14 11:45:35 +08:00
    surgio 试一下
    Xopher
        19
    Xopher  
       2022-08-14 11:51:28 +08:00 via iPhone
    @zeyezhan subconvert 取节点 list ,自己写配置和规则就行了,规则定期更新
    zeyezhan
        20
    zeyezhan  
    OP
       2022-08-14 14:00:18 +08:00
    @Xopher 收到,我去研究一下~
    SenLief
        21
    SenLief  
       2022-08-14 14:42:15 +08:00
    clash 对于规则匹配有优化的,所以速度并不慢。
    1002xin
        22
    1002xin  
       2022-08-14 18:00:26 +08:00
    怎么说呢,现在规则遍地都是,而且加速不都是用 jsdelivr 吗
    zeyezhan
        23
    zeyezhan  
    OP
       2022-08-14 19:50:21 +08:00
    @1002xin 是呀是呀~,原来大家早就知道这么多知识了😂
    saka1zd
        24
    saka1zd  
       2022-08-14 22:19:46 +08:00   ❤️ 1
    规则匹配速度应该不慢吧
    https://github.com/Dreamacro/clash/issues/1165#issuecomment-753739205


    另外我现在是用 meta core 替换 cfw 的 clash 内核,可以直接用 V 系软件比较全的 geosite 规则。
    https://github.com/MetaCubeX/Clash.Meta/tree/Meta

    ```
    rules:
    - GEOSITE,category-ads-all,REJECT
    - GEOSITE,icloud@cn,DIRECT
    - GEOSITE,apple@cn,DIRECT
    - GEOSITE,apple-cn,DIRECT
    - GEOSITE,microsoft@cn,DIRECT
    - GEOSITE,facebook,PROXY
    - GEOSITE,youtube,PROXY
    - GEOSITE,geolocation-cn,DIRECT
    - GEOSITE,geolocation-!cn,PROXY

    #GEOIP 规则
    - GEOIP,telegram,PROXY,no-resolve
    - GEOIP,private,DIRECT,no-resolve
    - GEOIP,cn,DIRECT
    ```
    jaoyina
        25
    jaoyina  
       2022-08-21 17:45:47 +08:00
    用机场自己的规则有啥问题吗?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5623 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 01:35 · PVG 09:35 · LAX 17:35 · JFK 20:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.