为什么必须读懂 Clash YAML?

导入机场订阅后,大多数人只在客户端里点选节点、切换模式,从未打开过背后的配置文件。但一旦遇到「某网站打不开」「想给 NAS 强制直连」「广告太多想拦截」等需求,就必须理解 Clash 的 YAML 配置逻辑。

基于 Mihomo 内核的 Clash 客户端(如 Clash Verge Rev)使用一份 YAML 文件描述全部代理行为。其中代理节点(proxies)策略组(proxy-groups)规则集(rule-providers)是三大核心模块:节点提供出口,策略组组织节点选择逻辑,规则集批量定义「什么流量走哪里」。搞清三者关系,你就从「被动用订阅」升级为「能安全自定义」。

前提:若尚未完成客户端安装与订阅导入,建议先阅读本站 Clash Verge Rev 安装配置教程。本文聚焦 YAML 结构本身,不涉及各平台安装步骤。

YAML 基础与配置文件结构

Clash 配置采用 YAML 格式:用缩进表示层级,列表项以 - 开头,键值对以 key: value 书写。必须使用空格缩进,禁止使用 Tab,否则解析器会报错。常见扩展名为 .yaml.yml

一份典型的 Mihomo 配置文件由以下区块组成(顺序可灵活调整,但逻辑上建议按此理解):

  • mixed-port / port / socks-port:本地监听端口
  • dns:DNS 解析策略(与分流强相关)
  • proxies代理节点列表
  • proxy-groups策略组列表
  • rule-providers外部规则集声明
  • rules:分流规则(引用策略组与规则集)
# 极简结构示意
mixed-port: 7890
mode: rule

proxies:
  - { name: "节点A", type: ss, server: 1.2.3.4, port: 8388, cipher: aes-256-gcm, password: "xxx" }

proxy-groups:
  - { name: PROXY, type: select, proxies: [节点A, DIRECT] }

rule-providers:
  gfw:
    type: http
    behavior: domain
    url: "https://example.com/gfw.txt"
    path: ./ruleset/gfw.yaml
    interval: 86400

rules:
  - RULE-SET,gfw,PROXY
  - GEOIP,CN,DIRECT
  - MATCH,PROXY

机场订阅通常已包含完整上述结构。用户通过客户端的覆写(Merge)在订阅之上叠加本地片段,而无需直接编辑远程文件——但覆写语法与主配置完全一致,读懂 YAML 仍是前提。

代理节点(proxies)详解

proxies 区块定义所有可用的代理节点,每个节点是一条独立的服务器连接描述。规则匹配后,流量最终由某个节点(或 DIRECT 直连)承载。

通用字段

字段 说明 示例
name 节点显示名称,须唯一 香港 01
type 协议类型 ssvmesstrojanhysteria2
server 服务器地址(域名或 IP) hk.example.com
port 端口号 443
udp 是否转发 UDP(游戏、语音需要) true

常见协议示例

Shadowsocks(ss)——机场最普遍的协议之一:

proxies:
  - name: "SS 节点"
    type: ss
    server: 1.2.3.4
    port: 8388
    cipher: aes-256-gcm
    password: "your-password"
    udp: true

VMess——常见于 V2Ray 系机场,支持更多传输层选项:

proxies:
  - name: "VMess 节点"
    type: vmess
    server: example.com
    port: 443
    uuid: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
    alterId: 0
    cipher: auto
    tls: true
    network: ws
    ws-opts:
      path: /path
      headers:
        Host: example.com

Trojan——伪装 HTTPS 流量,抗检测能力强:

proxies:
  - name: "Trojan 节点"
    type: trojan
    server: example.com
    port: 443
    password: "your-password"
    sni: example.com
    udp: true

Hysteria2——基于 QUIC,适合高丢包网络,Mihomo 已原生支持:

proxies:
  - name: "Hysteria2 节点"
    type: hysteria2
    server: example.com
    port: 443
    password: "your-password"
    sni: example.com
    skip-cert-verify: false
安全提醒:节点配置含服务器地址与密钥,切勿将完整 YAML 公开发布到论坛或截图分享。覆写自定义节点时,建议仅保留必要字段,敏感信息用本地文件管理。

节点命名与维护技巧

优质订阅会在 name 中标注地区、倍率、流媒体解锁等信息(如「香港|1x|NF」)。手动添加节点时建议沿用类似命名规范,便于在策略组中识别。订阅更新可能覆盖远程节点列表,自定义节点应写在覆写配置的 prepend-proxies 中,避免被刷新抹掉。

策略组(proxy-groups)详解

单个节点无法直接满足「自动选最快」「主备切换」「按业务分组」等需求。proxy-groups 将节点与子组组织成策略组,供 rules 引用。规则里写的 PROXY自动选择流媒体 通常都是策略组名称,而非内置关键字。

select:手动选择

最常用的类型,在客户端「代理」页呈现下拉列表,用户手动切换节点:

proxy-groups:
  - name: PROXY
    type: select
    proxies:
      - 自动选择
      - 香港 01
      - 日本 01
      - 美国 01
      - DIRECT

proxies 子列表可包含节点名称其他策略组名称,以及内置动作 DIRECT(直连)、REJECT(拒绝)。嵌套引用可实现「主组 → 地区子组 → 具体节点」的层级结构。

url-test:自动测速

按间隔对组内节点发起测速请求,自动选用延迟最低的节点:

proxy-groups:
  - name: 自动选择
    type: url-test
    proxies:
      - 香港 01
      - 日本 01
      - 美国 01
    url: http://www.gstatic.com/generate_204
    interval: 300
    tolerance: 50

url 为测速目标(常用 Google 204 接口);interval 为测速周期(秒);tolerance 防止频繁切换——仅当新节点比当前快超过该阈值(毫秒)时才切换。

fallback:故障转移

按列表顺序尝试节点,当前节点不可用时自动切换到下一个:

proxy-groups:
  - name: 故障转移
    type: fallback
    proxies:
      - 香港 01
      - 日本 01
      - 美国 01
    url: http://www.gstatic.com/generate_204
    interval: 300

load-balance:负载均衡

将连接分散到组内多个节点,减轻单节点压力。可选 consistent-hashing(同一目标走同一节点)或 round-robin(轮询)策略:

proxy-groups:
  - name: 负载均衡
    type: load-balance
    proxies:
      - 香港 01
      - 香港 02
    url: http://www.gstatic.com/generate_204
    interval: 300
    strategy: consistent-hashing

策略组设计建议

  • 主出口组(如 PROXY)用 select,下设「自动选择」子组,兼顾灵活与省心。
  • 流媒体、游戏等场景可单独建组,在 rules 里将对应域名指向专用组,避免影响日常浏览节点。
  • 组名避免与节点名重复,防止 YAML 解析歧义。
  • 列表中保留 DIRECT 选项,便于临时绕过代理排查问题。

规则集(rule-providers)详解

手写成千上万条 DOMAIN-SUFFIX 不现实。rule-providers 声明外部规则集的来源,将批量域名或 IP 列表以文件形式加载,再在 rules 中通过 RULE-SET 引用。

rule-providers 字段说明

字段 说明
type http 从 URL 拉取;file 使用本地文件
behavior domain 域名列表;ipcidr IP 段;classical 完整规则语法
url 远程规则集地址(type: http 时必填)
path 本地缓存路径,首次下载后复用
interval 自动更新间隔(秒),如 86400 为每天

实战:引用社区规则集

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

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

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

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

社区项目 Loyalsoldier/clash-rules 将域名分为 cn(国内)、gfw(被墙)、reject(广告)、private(局域网)等类别,与 Mihomo 兼容良好。机场订阅通常已内置类似声明,用户一般无需重复配置。

规则集首次加载需联网下载。若 CDN 在本地网络不稳定,可将 type 改为 file,把规则文件放到客户端配置目录,或更换镜像 URL。离线环境务必使用本地副本。

behavior 类型如何选择

  • domain:纯域名列表,文件每行一个域名,性能最优,适合 cn/gfw 等大批量域名集。
  • ipcidr:纯 IP 段列表,适合按 IP 批量分流。
  • classical:完整 Clash 规则语法(如 DOMAIN-SUFFIX,xxx.com,PROXY),灵活但体积较大。

rules 与三大核心的协作关系

rules 是流量分发的「决策表」,将三大核心串联起来。匹配顺序自上而下,首条命中即停止。典型结构如下:

rules:
  - RULE-SET,private,DIRECT       # 局域网域名 → 直连
  - RULE-SET,reject,REJECT        # 广告域名 → 拒绝
  - RULE-SET,gfw,PROXY            # 被墙站点 → 主代理策略组
  - RULE-SET,cn,DIRECT            # 国内域名 → 直连
  - GEOIP,CN,DIRECT               # 中国 IP 兜底直连
  - MATCH,PROXY                   # 其余全部 → 主代理策略组

此处的 PROXYproxy-groups 里定义的策略组名,该组再决定具体走哪个节点。关于规则类型、GEOIP、MATCH 兜底等细节,可参阅本站专题文章 Clash 规则分流深度解析

数据流一图看懂

一次网络请求在 Clash 中的处理路径可概括为:DNS 解析 → rules 逐条匹配 → 命中策略组或 DIRECT/REJECT → 策略组选出具体节点 → 节点建立连接。规则集负责「批量判断域名归属」,策略组负责「代理时选哪条路」,节点负责「实际转发」。

完整配置示例(三大核心串联)

以下是一份可运行的精简示例,展示三大核心如何协同工作(节点信息为虚构,仅供学习语法):

mixed-port: 7890
mode: rule

proxies:
  - name: "香港节点"
    type: ss
    server: hk.example.com
    port: 8388
    cipher: aes-256-gcm
    password: "demo-password"
    udp: true
  - name: "日本节点"
    type: trojan
    server: jp.example.com
    port: 443
    password: "demo-password"
    sni: jp.example.com

proxy-groups:
  - name: PROXY
    type: select
    proxies: [自动选择, 香港节点, 日本节点, DIRECT]
  - name: 自动选择
    type: url-test
    proxies: [香港节点, 日本节点]
    url: http://www.gstatic.com/generate_204
    interval: 300

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

rules:
  - IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
  - IP-CIDR,10.0.0.0/8,DIRECT,no-resolve
  - RULE-SET,gfw,PROXY
  - RULE-SET,cn,DIRECT
  - GEOIP,CN,DIRECT
  - MATCH,PROXY

覆写配置:安全地自定义三大核心

直接编辑机场远程订阅会在下次刷新时被覆盖。Clash Verge Rev 等客户端支持覆写(Merge),在订阅之上叠加本地 YAML 片段,常用字段包括:

  • prepend-proxies:在节点列表头部插入自定义节点
  • append-proxy-groups:在策略组列表尾部追加新组
  • prepend-rules:在规则列表最前面插入高优先级规则
# 覆写示例:追加私有节点 + 强制某域名走代理
prepend-proxies:
  - name: "自建节点"
    type: ss
    server: my.server.com
    port: 8388
    cipher: aes-256-gcm
    password: "secret"

prepend-rules:
  - DOMAIN-SUFFIX,my-service.com,PROXY
  - DOMAIN-SUFFIX,nas.home,DIRECT
覆写语法错误会导致整份配置无法加载、代理突然失效。修改后若出现问题,先禁用覆写排查;在客户端「日志」页观察报错信息与规则命中情况。

排错与验证清单

  1. 配置无法加载:检查 YAML 缩进(禁 Tab)、引号配对、策略组引用的节点名是否存在。
  2. 节点列表为空:订阅链接是否过期;proxies 是否被覆写意外清空。
  3. 规则集加载失败:检查 rule-providers 的 URL 是否可访问;尝试换镜像或改 type: file
  4. 分流不符合预期:在「连接」页查看命中规则;用 prepend-rules 将特定域名提到列表最前。
  5. 策略组无节点可选:确认 proxies 子列表中的名称与 proxies 区块的 name 完全一致(区分大小写)。

常见问题

Clash 配置文件必须是 YAML 格式吗?

是的。Clash 及 Mihomo 统一使用 YAML,缩进必须用空格。JSON 或其他格式不被支持。可用在线 YAML 校验工具或 VS Code 插件在保存前检查语法。

proxies 和 proxy-groups 有什么区别?

proxies 是具体节点(服务器 + 协议参数),proxy-groups 是节点的「组织方式」(手动选、自动测速、故障转移等)。规则引用的是策略组名,策略组再指向具体节点。

rule-providers 和 rules 里的 RULE-SET 是什么关系?

rule-providers 声明规则集文件来源;rules 中的 RULE-SET,名称,策略组 引用该名称,将规则集内批量条目映射到对应策略组或 DIRECT/REJECT。

能否删除订阅里不需要的节点?

订阅刷新会还原远程内容,直接删除无效。可通过覆写的 proxy-groups 只引用需要的节点名,或在订阅转换阶段过滤。部分客户端支持「节点过滤」图形界面,底层仍依赖配置逻辑。

三大核心修改后需要重启客户端吗?

Clash Verge Rev 等客户端在保存或刷新配置后会自动热重载,一般无需重启。若热重载失败,手动点击「重新加载配置」或重启客户端即可。

相比只能填服务器地址的传统 VPN,Clash 的 YAML 体系把「节点、选人逻辑、分流规则」拆成清晰模块,灵活度高出一大截。但许多入门工具把配置藏在黑盒里,用户遇到订阅格式不兼容或想微调规则时束手无策。Clash 基于 Mihomo 内核,完整支持 SS、VMess、Trojan、Hysteria2 等主流协议,配合规则集可实现精准的国内直连与国外代理,覆写机制又让你在不动订阅的前提下安全自定义——这正是它超越简单全局代理工具的核心所在。

立即免费下载 Clash,轻松掌握 YAML 配置 →