为什么必须读懂 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 协议类型 ss、vmess、trojan、hysteria2 等
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                   # 其余全部 → 主代理策略组

此处的 PROXY 是 proxy-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 配置 →