Clash自定义规则设置教程 – wiki基地


Clash 自定义规则设置完全指南:掌控网络流量,优化代理体验

Clash 作为一款功能强大且广受欢迎的网络代理客户端,以其灵活的配置和高效的性能赢得了众多用户的青睐。其核心魅力之一就在于强大的规则系统,允许用户精细化地控制网络流量的走向。默认配置往往只能满足基本需求,而通过自定义规则,您可以实现诸如广告屏蔽、国内外流量分流、特定应用/网站指定代理、绕过局域网地址等高级功能,从而极大地优化您的网络体验。

本文将是一篇详尽的教程,旨在引导您从零开始,深入理解 Clash 的规则机制,并掌握自定义规则的编写与应用,助您成为 Clash 配置的“高手”。

一、 理解 Clash 规则的基础

在深入编写自定义规则之前,我们必须先理解 Clash 规则的工作原理和基本构成。

  1. 规则的本质: Clash 规则本质上是一系列条件判断语句。当一个网络连接发起时,Clash 会按照配置文件中 rules: 列表从上到下的顺序,逐一检查该连接是否满足某条规则的匹配条件。
  2. 匹配即停止: 一旦连接匹配到某条规则,Clash 就会根据该规则指定的策略(Policy)来处理这个连接,并且不再继续检查后续的规则。这个“匹配即停止”的原则至关重要,意味着规则的顺序直接影响其优先级。
  3. 规则的组成: 一条典型的 Clash 规则由三个部分组成,格式通常为:
    TYPE, VALUE, POLICY

    • TYPE(类型): 定义了匹配流量的方式。常见的类型包括基于域名、IP 地址、地理位置、进程名等。
    • VALUE(值): 具体的匹配内容。例如,域名后缀、具体的 IP 地址段、国家代码等。
    • POLICY(策略): 指定了匹配成功后流量应如何处理。这通常指向您在配置文件 proxy-groups: 部分定义的代理策略组或内置策略(如 DIRECTREJECT)。
  4. 内置策略:

    • DIRECT:直连,流量不通过任何代理服务器。
    • REJECT:拒绝连接,常用于屏蔽广告或追踪器。还可以附加参数实现更精细的控制,如 REJECT(tcp-rst)
    • Proxy / 策略组名:将流量导向指定的单个代理服务器或一个代理策略组(如 Proxy, 国外流量, 节点选择 等,这些名称需与 proxy-groups 中定义的名称一致)。
  5. Fallback / Final 规则: 在所有自定义规则检查完毕后,如果没有任何一条规则匹配成功,Clash 会使用配置文件末尾通常存在的 MATCHFINAL 规则。这条规则是“兜底”规则,确保所有未被明确指定的流量都有一个最终去向。

    • MATCH, POLICY: 匹配所有剩余流量。
    • FINAL, POLICY: 功能类似 MATCH,但在某些 Clash 衍生版本(如 Clash.Meta)中,FINAL 规则的处理时机和行为可能略有不同(例如,它可能在 DNS 解析之后才最终决定),通常用于需要根据最终解析 IP 判断的场景。对于标准 Clash 核心,MATCH 更为常用。

二、 常见的规则类型详解与示例

掌握了基本概念后,我们来详细了解几种最常用的规则类型及其用法:

  1. DOMAIN-SUFFIX (域名后缀)

    • 作用: 匹配指定域名后缀的所有子域名。这是最常用也最高效的规则之一。
    • 示例:
      “`yaml
      # 规则:所有 google.com 及其子域名(如 www.google.com, mail.google.com)都走 “国外代理” 策略组

      • DOMAIN-SUFFIX,google.com,国外代理

      规则:所有 apple.com 及其子域名走 “苹果服务” 策略组

      • DOMAIN-SUFFIX,apple.com,苹果服务

      规则:屏蔽常见的广告域名后缀

      • DOMAIN-SUFFIX,adservice.google.com,REJECT
      • DOMAIN-SUFFIX,doubleclick.net,REJECT
        “`
    • 注意: DOMAIN-SUFFIX 匹配的是域名本身及其所有子域名。DOMAIN-SUFFIX,google.com 会匹配 google.comwww.google.com,但不匹配 google.com.cn
  2. DOMAIN (域名)

    • 作用: 精确匹配某个域名,不包括其子域名。
    • 示例:
      “`yaml
      # 规则:仅精确匹配 www.example.com 这个域名,走 “特定代理”

      • DOMAIN,www.example.com,特定代理
        “`
    • 使用场景: 当你需要对某个特定域名(而非其所有子域名)进行精确控制时使用。相对 DOMAIN-SUFFIX 使用频率较低。
  3. DOMAIN-KEYWORD (域名关键字)

    • 作用: 匹配域名中包含指定关键字的连接。
    • 示例:
      “`yaml
      # 规则:域名中包含 “google” 关键字的走 “国外代理”

      • DOMAIN-KEYWORD,google,国外代理

      规则:域名中包含 “ad” 或 “tracker” 关键字的予以拒绝

      • DOMAIN-KEYWORD,ad,REJECT
      • DOMAIN-KEYWORD,tracker,REJECT
        “`
    • 注意: DOMAIN-KEYWORD 匹配范围较广,可能导致误判(例如 download.com 包含 ad)。性能开销相对 DOMAIN-SUFFIX 也更大,需谨慎使用。
  4. IP-CIDR (IP 地址段)

    • 作用: 匹配目标 IP 地址是否在指定的 CIDR (无类别域间路由) 地址块内。
    • 示例:
      “`yaml
      # 规则:目标 IP 地址为局域网地址的,全部直连

      • IP-CIDR,192.168.0.0/16,DIRECT
      • IP-CIDR,10.0.0.0/8,DIRECT
      • IP-CIDR,172.16.0.0/12,DIRECT
      • IP-CIDR,127.0.0.0/8,DIRECT

      规则:目标 IP 为某特定服务商的 IP 段,走 “专线代理”

      • IP-CIDR,1.2.3.0/24,专线代理
        “`
    • 重要性: 局域网直连规则通常是必须的,且优先级应较高,避免访问本地设备(如路由器、NAS)时流量误走代理。
  5. GEOIP (地理位置 IP)

    • 作用: 匹配目标 IP 地址的归属国家/地区。这需要 Clash 加载 GeoIP 数据库(通常是 Country.mmdb 文件)。
    • 示例:
      “`yaml
      # 规则:目标 IP 归属地为中国的,直连

      • GEOIP,CN,DIRECT

      规则:目标 IP 归属地为美国的,走 “美国节点” 策略组

      • GEOIP,US,美国节点
        “`
    • 注意:
      • 需要确保 Clash 配置文件或运行目录下存在有效的 Country.mmdb 文件。
      • GeoIP 数据库需要定期更新以保证准确性。
      • GEOIP,CN 通常放在规则列表的靠前位置(但在局域网规则之后),用于实现国内外分流的基础。
  6. PROCESS-NAME (进程名) – (部分客户端/平台支持)

    • 作用: 根据发起连接的应用程序进程名来匹配。
    • 示例:
      “`yaml
      # 规则:所有 Chrome 浏览器发起的连接走 “浏览器代理”

      • PROCESS-NAME,chrome.exe,浏览器代理 # Windows 示例
      • PROCESS-NAME,Google Chrome,浏览器代理 # macOS 示例

      规则:特定游戏进程直连

      • PROCESS-NAME,gamelauncher.exe,DIRECT
        “`
    • 注意:
      • 此规则并非所有 Clash 客户端和操作系统平台都支持,兼容性需查阅具体客户端文档。
      • 进程名可能因软件版本或操作系统而异。
      • 性能开销相对较大。
  7. SRC-IP-CIDR (源 IP 地址段) – (高级用法)

    • 作用: 匹配发起连接的源 IP 地址。主要用于 Clash 作为网关为局域网内其他设备提供代理服务的场景,可以基于局域网内不同设备的 IP 进行策略分流。
    • 示例:
      “`yaml
      # 规则:来自 192.168.1.100 这台设备的流量,走 “特殊设备代理”

      • SRC-IP-CIDR,192.168.1.100/32,特殊设备代理
        “`

三、 Rule Providers:更优雅地管理规则集

当自定义规则数量庞大,或者需要频繁更新(如广告屏蔽列表、特定服务域名列表)时,直接在主配置文件 config.yaml 中维护会变得非常 cumbersome。这时,Rule Providers (规则提供者) 就派上了用场。

Rule Providers 允许您将规则列表定义在外部文件中(本地或远程 URL),然后在主配置文件的 rules: 部分引用这些外部规则集。

  1. 定义 Rule Provider:
    在配置文件的 rule-providers: 部分定义一个或多个规则提供者。
    “`yaml
    rule-providers:
    # 广告屏蔽规则提供者 (从远程 URL 加载)
    adblock:
    type: http
    behavior: domain # 或 classical,根据规则文件内容格式决定
    url: “https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/Providers/BanAD.yaml”
    path: ./ruleset/adblock.yaml # 下载后保存在本地的路径
    interval: 86400 # 更新间隔(秒),例如一天更新一次

    # 国内网站直连规则提供者 (使用本地文件)
    cn_direct:
    type: file
    behavior: domain
    path: ./ruleset/cn_direct.txt # 本地规则文件路径

    # 特定应用规则提供者
    streaming_media:
    type: http
    behavior: classical # 假设这个列表是 TYPE,VALUE 格式
    url: “URL_TO_STREAMING_RULES”
    path: ./ruleset/streaming.yaml
    interval: 3600
    ``
    *
    type:http表示从 URL 下载,file表示使用本地文件。
    *
    behavior: 决定了规则集文件内容的格式。
    *
    domain: 文件内容每行只有一个域名,Clash 会自动为其添加DOMAIN-SUFFIX类型。
    *
    ipcidr: 文件内容每行只有一个 IP CIDR,Clash 会自动为其添加IP-CIDR类型。
    *
    classical: 文件内容本身就是完整的TYPE,VALUE格式(没有 POLICY),Clash 会在引用时为其添加 POLICY。
    *
    url: 远程规则文件的 URL (仅当type: http)。
    *
    path: 规则文件在本地的存储路径。对于http类型,这是下载后保存的位置;对于file类型,这是直接读取的位置。
    *
    interval: 自动更新检查的间隔时间(秒),仅对http` 类型有效。

  2. rules: 中引用 Rule Provider:
    使用 RULE-SET 类型来引用定义好的规则提供者。
    “`yaml
    rules:
    # 引用广告屏蔽规则集,匹配到的流量拒绝

    • RULE-SET,adblock,REJECT
      # 引用国内网站规则集,匹配到的流量直连
    • RULE-SET,cn_direct,DIRECT
      # 引用流媒体规则集,匹配到的流量走 “流媒体策略”
    • RULE-SET,streaming_media,流媒体策略
      # … 其他自定义规则 …
    • GEOIP,CN,DIRECT
    • MATCH,国外代理 # 最后的兜底规则
      “`
  3. 优势:

    • 模块化: 主配置文件更简洁,逻辑更清晰。
    • 易于维护: 更新规则只需修改对应的外部文件或等待自动更新,无需改动主配置。
    • 共享与复用: 可以方便地使用社区维护的优秀规则集。

四、 编写自定义规则的实践步骤与技巧

  1. 确定需求: 首先明确你想要通过自定义规则实现什么目标?是屏蔽广告?让国内网站直连?让特定应用走特定代理?还是其他更复杂的需求?

  2. 选择合适的规则类型: 根据需求选择最精确且高效的规则类型。

    • 域名控制优先使用 DOMAIN-SUFFIX
    • IP 控制使用 IP-CIDR
    • 大范围屏蔽使用 DOMAIN-KEYWORD 时要小心副作用。
    • 国内外分流基础用 GEOIP,CN,DIRECT
    • 局域网访问务必添加 IP-CIDR 直连规则。
  3. 组织规则顺序: 这是自定义规则成功的关键。

    • 高优先级在前: 最重要、最需要精确匹配的规则放在最前面。例如,局域网直连规则通常应该非常靠前。
    • 精细规则在前,宽泛规则在后: DOMAIN 规则应在 DOMAIN-SUFFIX 之前(如果需要精确匹配),DOMAIN-SUFFIX 应在 DOMAIN-KEYWORD 之前。特定的 IP-CIDR 规则应在 GEOIP 规则之前。
    • 屏蔽规则靠前: 广告屏蔽、追踪器屏蔽等 REJECT 规则通常也建议放在前面,尽早拦截不需要的连接。
    • 常用分流规则居中:GEOIP,CN,DIRECT 和一些常用的 DOMAIN-SUFFIX 规则。
    • 兜底规则在最后: MATCHFINAL 规则必须放在所有规则的末尾。
  4. 编辑配置文件:

    • 找到你的 Clash 配置文件 config.yaml(具体位置取决于你的客户端和操作系统)。
    • 强烈建议先备份原始配置文件!
    • 找到 rules: 字段,它是一个 YAML 列表(以 - 开头)。
    • rules: 列表下,按照你规划好的顺序添加或修改规则。确保 YAML 格式正确(主要是缩进)。
    • 如果你使用了 Rule Providers,确保 rule-providers: 部分也正确配置,并在 rules: 中正确引用。
  5. 重载配置与测试:

    • 保存修改后的 config.yaml 文件。
    • 在 Clash 客户端中执行“重载配置”或重启 Clash 服务。
    • 测试!测试!测试! 这是必不可少的一步。
      • 访问你添加或修改规则针对的网站/服务,检查流量是否按预期走向(直连、拒绝、走指定代理)。
      • 使用 Clash 客户端通常提供的“连接”或“Connections”面板,实时查看每个连接命中了哪条规则以及走了哪个策略。这是调试规则最直接有效的方法。
      • 检查 Clash 的日志(通常需要开启日志记录),日志中会记录规则匹配的详细信息和潜在错误。
  6. 迭代优化:

    • 自定义规则往往不是一蹴而就的。根据测试结果,不断调整规则内容、顺序,处理误伤或遗漏的情况。
    • 关注社区分享的规则集和经验,持续学习和改进。

五、 实用场景示例

以下是一些整合了上述知识点的实用规则片段(仅为示例,需根据你的实际策略组名称调整):

“`yaml

config.yaml

… (省略其他配置如 proxies, proxy-groups) …

规则提供者定义 (可选)

rule-providers:
adblock:
type: http
behavior: domain
url: “https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/Providers/BanAD.yaml”
path: ./ruleset/adblock.yaml
interval: 86400
cn_sites:
type: http
behavior: domain
url: “https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/Providers/Direct.yaml” # 示例国内域名列表
path: ./ruleset/cn_sites.yaml
interval: 86400
telegram_cidr:
type: http
behavior: ipcidr
url: “https://raw.githubusercontent.com/telegramdesktop/tdesktop/dev/infra/tdata/ip_list.txt” # 假设这是Telegram的IP列表
path: ./ruleset/telegram_cidr.yaml
interval: 86400

规则列表

rules:
# — 高优先级规则 —
# 1. 广告屏蔽 (使用 Rule Provider)
– RULE-SET,adblock,REJECT

# 2. 局域网地址直连
– IP-CIDR,192.168.0.0/16,DIRECT
– IP-CIDR,10.0.0.0/8,DIRECT
– IP-CIDR,172.16.0.0/12,DIRECT
– IP-CIDR,127.0.0.0/8,DIRECT
– DOMAIN-SUFFIX,localhost,DIRECT # 本地主机名

# — 特定服务规则 —
# 3. Telegram 使用 IP 规则走特定代理 (如果 DNS 污染严重,IP 规则更可靠)
– RULE-SET,telegram_cidr,Telegram专线

# 4. Netflix, Disney+ 等流媒体走 “流媒体策略”
– DOMAIN-SUFFIX,netflix.com,流媒体策略
– DOMAIN-SUFFIX,nflxvideo.net,流媒体策略
– DOMAIN-SUFFIX,disneyplus.com,流媒体策略

# 5. 国内常用网站直连 (使用 Rule Provider)
– RULE-SET,cn_sites,DIRECT

# 6. Apple 服务走直连或特定代理 (根据网络情况决定)
– DOMAIN-SUFFIX,apple.com,DIRECT # 或 苹果服务代理
– DOMAIN-SUFFIX,icloud.com,DIRECT # 或 苹果服务代理

# 7. 微软服务直连 (避免影响 Office 激活、Windows 更新等)
– DOMAIN-SUFFIX,microsoft.com,DIRECT
– DOMAIN-SUFFIX,live.com,DIRECT
– DOMAIN-SUFFIX,office.com,DIRECT

# — 基础分流规则 —
# 8. 中国大陆 IP 直连 (作为国内流量的基础保障)
– GEOIP,CN,DIRECT

# — 兜底规则 —
# 9. 所有其他未匹配流量,走 “全球代理” 策略组
– MATCH,全球代理

注意: 上述策略名如 “Telegram专线”, “流媒体策略”, “全球代理”, “苹果服务代理”

需要在 config.yaml 的 proxy-groups 部分有对应的定义。

“`

六、 结语

Clash 的自定义规则是其强大功能的集中体现。通过深入理解规则类型、匹配逻辑、顺序重要性以及 Rule Providers 的运用,您可以将 Clash 打造成完全符合个人需求的智能网络流量调度中心。虽然初看可能有些复杂,但只要遵循“先理解、后实践、多测试、勤优化”的原则,逐步积累经验,您一定能够熟练掌握自定义规则的配置,享受更加顺畅、高效、个性化的网络代理体验。

记住,网络环境和需求是不断变化的,保持对新规则类型、优秀规则集和社区实践的关注,将有助于您持续优化您的 Clash 配置。祝您配置顺利!

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部