为什么必须读懂 Clash YAML?
导入机场订阅后,大多数人只在客户端里点选节点、切换模式,从未打开过背后的配置文件。但一旦遇到「某网站打不开」「想给 NAS 强制直连」「广告太多想拦截」等需求,就必须理解 Clash 的 YAML 配置逻辑。
基于 Mihomo 内核的 Clash 客户端(如 Clash Verge Rev)使用一份 YAML 文件描述全部代理行为。其中代理节点(proxies)、策略组(proxy-groups)、规则集(rule-providers)是三大核心模块:节点提供出口,策略组组织节点选择逻辑,规则集批量定义「什么流量走哪里」。搞清三者关系,你就从「被动用订阅」升级为「能安全自定义」。
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
节点命名与维护技巧
优质订阅会在 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 兼容良好。机场订阅通常已内置类似声明,用户一般无需重复配置。
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
排错与验证清单
- 配置无法加载:检查 YAML 缩进(禁 Tab)、引号配对、策略组引用的节点名是否存在。
- 节点列表为空:订阅链接是否过期;
proxies是否被覆写意外清空。 - 规则集加载失败:检查
rule-providers的 URL 是否可访问;尝试换镜像或改type: file。 - 分流不符合预期:在「连接」页查看命中规则;用
prepend-rules将特定域名提到列表最前。 - 策略组无节点可选:确认
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 等主流协议,配合规则集可实现精准的国内直连与国外代理,覆写机制又让你在不动订阅的前提下安全自定义——这正是它超越简单全局代理工具的核心所在。