详图 B-01手册定位与阅读路线
本站的内容分两条线。入门教程是快速上手主线,按"安装客户端 → 导入订阅 → 选择模式 → 验证连通"的顺序走完,即可进入正常使用状态,全程不要求阅读配置文件。本页是另一条线:系统查阅手册,面向需要打开 config.yaml 阅读或修改的场景——例如排查某条规则为什么不生效、在订阅之外追加几条自定义分流、或从零手写一份最小可用配置。两条线互为索引:第一次接触 Clash 的读者应先完成教程页流程,配置能跑起来之后,再回到本页按字段编号查阅。
字段口径需要先说清楚。目前主流图形客户端——Clash Plus、Clash Verge Rev、FlClash 等,完整清单见安装包页与客户端对比页——底层均运行 mihomo 内核或兼容内核,读取的是同一套 YAML 配置格式。本页以各内核公认的通用字段为主体;个别仅新内核支持的扩展能力,会在对应段落单独注明,避免照抄到旧内核后出现"字段无法识别"的加载错误。
阅读路线建议如下:想改分流规则,直接查详图 B-07 与 B-08;订阅一更新手工修改就丢失,查详图 B-09;某个节点连不上,先看节点超时排查文再考虑动配置;完全上不了网,优先回 FAQ 页与教程页排查客户端与系统代理状态,不要在故障状态下盲改配置文件。
example.com、your-password 等),仅示意字段结构,不能直接连接。实际值以订阅或自建服务端下发为准。
详图 B-02YAML 结构总览
三条书写铁律
config.yaml 是一份标准 YAML 文档,由若干顶层键组成,每个顶层键负责一个子系统。YAML 的书写有三条铁律,绝大多数"配置加载失败"都是其中之一被破坏:其一,缩进只能用空格,约定俗成两个空格一级,禁止使用 Tab 制表符;其二,"键: 值"的冒号后面必须有一个空格,port:7890 会被当作一个整体字符串而不是键值对;其三,列表项以"- "开头,同级项的短横线必须对齐在同一列。
字符串引号也常出问题:值里含有 #、冒号、花括号,或以特殊符号开头时,必须用引号包住,否则 # 之后的内容会被当成注释截断。节点名含 emoji、空格或全角字符时,建议一律加双引号,消除解析歧义,策略组引用时也照原样带引号书写。
顶层键索引
| 顶层键 | 类型 | 职责 | 对应详图 |
|---|---|---|---|
port / socks-port / mixed-port | 整数 | 本机代理监听端口 | B-03 |
allow-lan / bind-address | 布尔 / 字符串 | 是否受理局域网请求及监听地址 | B-03 |
mode | 枚举 | 工作模式:rule / global / direct | B-03 |
log-level | 枚举 | 日志详细程度 | B-03 |
external-controller / secret | 字符串 | 控制接口地址与访问口令 | B-03 |
dns | 映射 | 内核 DNS 解析行为 | B-04 |
tun | 映射 | 虚拟网卡接管(建议由客户端界面开关) | B-03 |
proxies | 数组 | 代理节点定义 | B-05 |
proxy-groups | 数组 | 策略组(出口编组) | B-06 |
rules | 数组 | 分流规则,自上而下匹配 | B-07 |
rule-providers | 映射 | 外置规则集来源 | B-08 |
最小可用骨架
下面是一份结构完整的最小配置骨架,五个部分齐备即可被内核加载。后续各详图逐段放大讲解:
mixed-port: 7890
allow-lan: false
mode: rule
log-level: info
dns:
enable: true
enhanced-mode: fake-ip
nameserver:
- https://doh.pub/dns-query
proxies:
- name: "示例节点"
type: ss
server: example.com
port: 8388
cipher: aes-128-gcm
password: "your-password"
proxy-groups:
- name: "节点选择"
type: select
proxies:
- "示例节点"
- DIRECT
rules:
- GEOIP,CN,DIRECT
- MATCH,节点选择
阅读一份陌生配置的推荐顺序:先看 mode 与端口段确认工作方式,再看 proxy-groups 理解出口的组织结构,最后看 rules 确认流量走向;proxies 段通常由订阅自动生成,只在排查单个节点问题时才需要逐字段细看。
详图 B-03通用字段:端口、模式与控制接口
端口三件套
port 是纯 HTTP 代理端口,socks-port 是 SOCKS5 端口,mixed-port 则在同一端口上同时受理两种协议。现行客户端默认使用 mixed-port: 7890,系统代理、浏览器手动代理、终端环境变量都指向这一个端口即可,不必分别配置。三个键填 0 或直接省略表示不监听对应端口。需要注意:修改端口号之后,系统代理设置必须同步更新,否则会出现"客户端在运行、流量却不进来"的假故障——这类问题的完整排查见系统代理不生效排查文。
局域网共享
allow-lan: true 会让局域网内其他设备把本机当作代理服务器使用,常见用途是给不方便装客户端的电视盒子、游戏机指一个代理出口;配合 bind-address 可以限定只在某块网卡上监听。在咖啡馆、机场等公共网络环境下应保持 false,否则同网段任何人都能使用你的出口。
工作模式 mode
| 取值 | 行为 | 适用场景 |
|---|---|---|
rule | 按 rules 段逐条匹配决定出口 | 日常默认,国内直连国外代理 |
global | 全部流量走选定策略组,忽略规则 | 临时验证节点、规则可疑时对照测试 |
direct | 全部流量直连,不经任何代理 | 临时停用代理但保留客户端运行 |
日志与控制接口
log-level 取值从简到繁为 silent / error / warning / info / debug。日常保持 info 即可;排查某条规则是否命中时切到 debug,内核会逐条打印连接的匹配结果,查完切回,长期 debug 会产生大量日志。external-controller 定义 RESTful 控制接口的监听地址(常见 127.0.0.1:9090),图形客户端的连接面板、节点切换、延迟测试全部通过它读写内核状态;secret 是该接口的访问口令。ipv6: false 时内核不解析也不连接 IPv6 地址,所在网络的 IPv6 链路不稳时可先保持关闭。
mixed-port: 7890
allow-lan: false
bind-address: "*"
mode: rule
log-level: info
ipv6: false
external-controller: 127.0.0.1:9090
secret: "xxxx"
另有一个体量较大的顶层键 tun:以虚拟网卡方式接管全部系统流量,可以解决部分程序不读系统代理的问题。它的子字段在不同内核版本间差异较大,且涉及系统权限,建议直接使用客户端界面提供的"TUN 模式"开关,由客户端生成正确字段,不手写;开启前的注意事项见 FAQ 页对应条目。
allow-lan 与 external-controller 都属于"对外开口"的字段:前者暴露代理端口,后者暴露控制接口。除非明确需要跨设备访问,监听地址保持 127.0.0.1,并为控制接口设置 secret。
详图 B-04DNS 配置:解析层的分流地基
为什么代理场景要单独配 DNS
规则匹配大量发生在域名层。如果域名在进入内核之前就被本地网络污染解析成错误 IP,那么 GEOIP 一类按 IP 归属判断的规则会跟着误判,表现为"规则写得没错,流量却走错出口"。dns 段的作用就是让内核接管解析过程,保证匹配所依据的解析结果可信。enable: true 是整段生效的前提。
enhanced-mode 两种工作方式
fake-ip 模式下,内核对每个域名返回一个保留网段(默认 198.18.0.1/16)里的假地址,真正建立连接时再按域名匹配规则并解析。好处是省掉一次前置解析、延迟更低,且从根上避免解析结果被本地网络干扰,是当前的默认推荐。redir-host 模式返回真实 IP,兼容性更好,但每个连接多一次解析。选用 fake-ip 时,fake-ip-filter 必须列出需要拿到真实 IP 的域名——局域网设备的管理域名、NTP 时间同步、部分游戏对战平台等,否则这些服务会拿着假地址无法工作。
三组服务器的职责边界
default-nameserver 只承担一件事:解析 nameserver 里 DoH/DoT 服务器自身的域名,因此必须填纯 IP 地址,不能再填域名,否则出现"先有鸡还是先有蛋"的死锁。nameserver 是主解析组,承担全部日常查询,建议填写加密 DNS 地址。部分内核还支持 fallback 组:当主组结果命中污染特征时,改用该组(通常填国外解析服务)的结果,属可选增强。
dns:
enable: true
listen: 0.0.0.0:1053
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.1/16
fake-ip-filter:
- "*.lan"
- "+.local"
- "time.windows.com"
default-nameserver:
- 223.5.5.5
nameserver:
- https://doh.pub/dns-query
- https://dns.alidns.com/dns-query
ping 任意域名会得到 198.18.x.x 段地址,这是设计行为不是故障;需要真实地址时把该域名加入 fake-ip-filter 即可。
详图 B-05代理节点字段:proxies 数组
proxies 是节点定义数组。使用订阅的用户,这一段由订阅转换服务自动生成,日常不需要手写;需要手写的典型场景是自建服务器或调试单个节点。所有协议共享四个公共字段:name(节点名,全文件唯一,策略组按名引用)、type(协议类型)、server(服务器地址,域名或 IP)、port(服务端口)。其余字段随协议不同,以下按下载页覆盖的常见协议逐一列出。
Shadowsocks(type: ss)
核心字段两个:cipher 加密方法与 password 密码,两者必须与服务端完全一致,任何一个不匹配的表现都是连接建立后立即断开或无响应:
- name: "ss-示例"
type: ss
server: example.com
port: 8388
cipher: aes-128-gcm
password: "your-password"
VMess(type: vmess)
身份凭据是 uuid,须与服务端逐字符一致;alterId 现行部署一律为 0;cipher 通常填 auto。走 WebSocket + TLS 的节点还需要 network: ws 与 ws-opts 子段,其中 path 与 headers.Host 必须和服务端配置对齐,这两处写错是 VMess 节点超时的高发原因:
- name: "vmess-示例"
type: vmess
server: example.com
port: 443
uuid: 00000000-0000-0000-0000-000000000000
alterId: 0
cipher: auto
tls: true
network: ws
ws-opts:
path: /your-path
headers:
Host: example.com
Trojan 与 Hysteria2
Trojan 以 password 为凭据,依赖真实 TLS 证书,sni 需要指向证书对应域名。Hysteria2 基于 QUIC(UDP 传输),除 password 外可用 up / down 声明带宽以启用其拥塞控制;所在网络封锁 UDP 时该协议整体不可用,排查时优先确认这一点:
- name: "trojan-示例"
type: trojan
server: example.com
port: 443
password: "your-password"
sni: example.com
- name: "hy2-示例"
type: hysteria2
server: example.com
port: 443
password: "your-password"
skip-cert-verify: true 会放弃对服务端证书的校验,使连接失去防冒充能力,仅限自建调试时临时使用,不要因为"填 true 就能连上"而长期保留——连不上的根因多半是 sni 或证书配置错误。
字段确认无误仍然连不上时,问题通常不在配置文件本身,按节点超时排查清单的顺序检查订阅有效性、系统时间与防火墙。
详图 B-06策略组字段:proxy-groups 数组
策略组是规则与节点之间的中间层:规则的出口指向组名,组再决定实际使用哪个节点。这一层解耦的价值在于,订阅节点更名、增删时只需要维护组的成员列表(订阅转换通常自动完成),规则一行都不用动。四种常用类型如下:
| type | 行为 | 典型用途 |
|---|---|---|
select | 手动选择成员,保持选择直到再次切换 | 总出口组,用户在客户端面板点选 |
url-test | 定期测速,自动选延迟最低的成员 | 自动选优组,作为 select 组的成员 |
fallback | 按列表顺序使用第一个可用成员 | 主备切换,首选节点故障时顺延 |
load-balance | 把连接分散到多个成员 | 多节点分摊流量 |
自动测速参数
url-test 与 fallback 依赖三个参数:url 填轻量测活地址(惯用 https://www.gstatic.com/generate_204,返回空响应,开销极小);interval 是测速周期,单位秒,常用 300;tolerance 单位毫秒,表示新节点延迟必须比当前节点低出该值才切换,用来防止两个延迟接近的节点来回抖动。可选的 lazy: true 让组只在被实际使用时才发起测速,减少后台请求。
嵌套与内置出口
组可以嵌套:惯例做法是建一个 select 总出口组,把 url-test 自动组和若干手动节点一并列为成员,日常挂自动组,需要时一键切到指定节点。DIRECT(直连)与 REJECT(拒绝)是内核内置的两个出口,可直接作为任何组的成员或规则的出口使用,不需要定义:
proxy-groups:
- name: "节点选择"
type: select
proxies:
- "自动测速"
- "香港-01"
- "日本-01"
- DIRECT
- name: "自动测速"
type: url-test
url: https://www.gstatic.com/generate_204
interval: 300
tolerance: 50
proxies:
- "香港-01"
- "日本-01"
命名纪律:组名不要与节点名重复;规则与组成员里引用的名字必须与定义处逐字一致,包括 emoji、空格与全半角——任何一处不一致,内核会以"proxy not found"类错误拒绝加载整份配置,这也是订阅节点改名后配置突然报错的常见根因。
详图 B-07规则语法与匹配顺序
rules 数组自上而下逐条匹配,命中第一条即停止,不再看后面的规则——书写顺序就是优先级,这是理解一切分流行为的第一原理。每条规则的基本格式为"类型,匹配值,出口",部分类型支持附加参数。出口可以是策略组名、节点名,或内置的 DIRECT / REJECT。
| 类型 | 匹配依据 | 示例 |
|---|---|---|
DOMAIN | 域名完全相等 | DOMAIN,dl.google.com,节点选择 |
DOMAIN-SUFFIX | 域名后缀(含自身) | DOMAIN-SUFFIX,github.com,节点选择 |
DOMAIN-KEYWORD | 域名包含关键词 | DOMAIN-KEYWORD,google,节点选择 |
GEOIP | 目标 IP 的地理归属 | GEOIP,CN,DIRECT |
IP-CIDR / IP-CIDR6 | 目标 IP 落在网段内 | IP-CIDR,192.168.0.0/16,DIRECT,no-resolve |
DST-PORT | 目标端口 | DST-PORT,22,DIRECT |
PROCESS-NAME | 发起连接的进程名(桌面端) | PROCESS-NAME,Steam.exe,DIRECT |
RULE-SET | 命中外置规则集(见 B-08) | RULE-SET,reject-list,REJECT |
MATCH | 无条件命中,兜底 | MATCH,节点选择 |
排序原则与 no-resolve
推荐排序:精确类(DOMAIN)在前,范围类(DOMAIN-SUFFIX / DOMAIN-KEYWORD)居中,IP 类(GEOIP / IP-CIDR)靠后,MATCH 必须且只能是最后一条。IP 类规则匹配前需要先把域名解析成 IP,会引入额外解析开销;对内网段、保留段这类"目标本来就是 IP"的规则,在行尾追加 no-resolve 参数,声明"目标不是 IP 就跳过本条",避免无谓解析:
rules:
- DOMAIN,dl.google.com,节点选择
- DOMAIN-SUFFIX,github.com,节点选择
- DOMAIN-KEYWORD,google,节点选择
- DOMAIN-SUFFIX,cn,DIRECT
- IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
- GEOIP,CN,DIRECT
- MATCH,节点选择
三处高发误写
其一,MATCH 之后还写了规则——由于命中即停,那些规则永远不会被执行,属于无效行;其二,以为 DOMAIN-SUFFIX,cn 能覆盖所有国内站点——它只匹配 .cn 后缀,大量国内服务使用 .com 域名,国内流量的兜底应交给 GEOIP,CN;其三,出口名与策略组定义不一致(差一个空格或 emoji),整份配置拒绝加载。国内外分流的完整写法与匹配演算,另见规则分流配置实战一文;只想快速用起来,可直接套用入门教程给出的成品规则段。
log-level 临时调到 debug,访问目标站点,在日志里搜索该域名即可看到实际命中的是哪一条规则、走了哪个出口,比反复猜测高效得多。
详图 B-08规则集:rule-providers 外置规则
手工维护上千行规则不现实。规则集机制把大批量规则外置成独立文件,配置里只保留来源声明与一行引用,内核按周期自动拉取更新。它由两部分配合:顶层键 rule-providers 定义来源,rules 里的 RULE-SET 条目消费它。
字段逐项说明
type 取 http(远程拉取)或 file(本地文件)。behavior 声明文件的内容形态,共三种:domain 表示文件只含域名列表;ipcidr 表示只含网段列表;classical 表示每行是"类型,匹配值"的完整规则。behavior 必须与文件实际内容一致——不一致时规则集不会报错,而是静默失效,这是规则集"看起来加载了却不生效"的头号原因。format 声明文件格式(yaml 或 text);url 是远程地址;path 是本地缓存路径,不同规则集不要共用同一个 path,否则互相覆盖;interval 是更新周期,单位秒,86400 即一天一次。
rule-providers:
reject-list:
type: http
behavior: domain
format: yaml
url: https://example.com/rules/reject.yaml
path: ./ruleset/reject.yaml
interval: 86400
cn-cidr:
type: http
behavior: ipcidr
format: yaml
url: https://example.com/rules/cn-cidr.yaml
path: ./ruleset/cn-cidr.yaml
interval: 86400
rules:
- RULE-SET,reject-list,REJECT
- RULE-SET,cn-cidr,DIRECT,no-resolve
- GEOIP,CN,DIRECT
- MATCH,节点选择
两点补充:RULE-SET 条目在 rules 里的位置同样遵循"自上而下、命中即停"的总顺序,规则集不是插队通道;引用 ipcidr 类规则集时,与 IP-CIDR 规则同理,建议在引用行尾加 no-resolve。远程规则集首次拉取需要网络可达,若初装时尚未连通,可先用 type: file 指向随客户端分发的本地文件过渡。
详图 B-09覆写与合并:让手工修改在订阅更新后存活
问题与原则
直接编辑订阅生成的配置文件,是新手最常踩的维护陷阱:下一次订阅更新会把整份文件重新生成,所有手工修改随之丢失。正确做法是一条纪律——订阅原文不动,修改一律放在"覆写层":客户端在每次加载配置时,把覆写内容与订阅原文合并后再交给内核,订阅怎么更新都不影响你的定制。
各客户端的覆写入口
主流客户端都提供了这一机制,叫法不同、思路一致:Clash Verge Rev 提供"全局扩展配置",分 Merge(声明式合并)与 Script(脚本改写)两种;Clash Plus 提供配置覆写入口;FlClash 支持配置叠加。入口位置与字段名随客户端演进,以客户端内的说明为准。以 Merge 写法为例,在订阅规则最前面插入两条自定义规则、同时覆盖 DNS 段:
prepend-rules:
- DOMAIN-SUFFIX,intra.example.com,DIRECT
- PROCESS-NAME,Steam.exe,DIRECT
dns:
enable: true
enhanced-mode: fake-ip
prepend- 前缀表示插到订阅同名数组之前(优先级最高),append- 表示追加到末尾;直接写顶层键(如上例 dns)则整段替换订阅里的对应段。自定义规则绝大多数场景用 prepend——规则匹配命中即停,插在最前面才保证优先生效。
修改后的验收流程
每次修改覆写内容,按固定流程验收:保存覆写 → 在客户端重载配置 → 确认日志无加载错误 → 用下面的命令验证代理端口在正常转发 → 在连接面板访问一次目标站点,确认命中的规则与出口符合预期。命令返回 HTTP/2 204 或 204 No Content 即链路正常:
curl -x http://127.0.0.1:7890 https://www.gstatic.com/generate_204 -I
详图 B-10加载报错对照:从提示文字定位到具体行
配置改错之后,内核会拒绝加载并在日志里留下一行提示。这些提示的措辞在不同客户端里略有出入,但类别是固定的,读懂类别就能直接定位到出错的字段,不必逐行通读整份文件。下表把最常见的几类提示与真实原因对应起来,排查时先按提示归类,再回到对应详图核对写法。
| 提示关键词 | 真实原因 | 处理动作 |
|---|---|---|
yaml: line N / did not find expected key | 缩进层级错乱或混用了 Tab | 跳到第 N 行附近,把 Tab 全部替换成两个空格,核对短横线是否对齐 |
could not find expected ':' | 冒号后缺空格,或值里含特殊符号未加引号 | 补上冒号后的空格;含 #、冒号、花括号的值用双引号包住 |
proxy not found / proxy 'X' not found | 策略组或规则引用了不存在的节点名/组名 | 逐字符比对定义处与引用处,注意空格、emoji、全半角差异 |
rules[N] error / unsupported rule type | 规则类型拼写错误,或参数个数不对 | 回到详图 B-07 的类型表核对拼写,确认"类型,匹配值,出口"三段齐全 |
address already in use | 端口被另一个进程(常是上一次未退出的内核)占用 | 结束残留进程,或把 mixed-port 改到其他端口并同步系统代理 |
初始化 DNS 失败 / dns error | default-nameserver 里填了域名而非纯 IP | 改成 223.5.5.5 这类纯 IP,详见详图 B-04 |
一条通用的二分定位法
如果提示只给了模糊的行号,而那一行看起来没有问题,通常是上一段的结构没有正常闭合,把错误"推"到了下一行。此时用二分法最省时间:先把 rules 段整段注释掉重载,能加载说明问题在规则;不能加载再注释 proxy-groups,依次向上收缩范围,直到定位到具体段落,然后在段落内部再对半注释。YAML 注释是行首加 #,批量注释在任何文本编辑器里都能一次完成,几轮之内必定收敛到出错的那几行。
还有一类"不报错但不生效"的情况更容易耗时间:内核加载成功、日志干净,行为却不对。这类问题的根因往往不在语法,而在语义——规则被上面某条更宽的规则提前命中、规则集的 behavior 与文件内容不匹配、或者覆写层解析失败被静默回退。判断方法统一是把 log-level 调到 debug,访问一次目标站点,看日志里这条连接实际命中了哪条规则、走了哪个出口,一次就能把"猜"变成"看"。若连日志都没有该域名的记录,说明流量根本没进内核,应回到系统代理不生效排查文先解决入口问题。
详图 B-11备份、版本与长期维护纪律
备份该备份什么
需要长期保存的其实只有三样:一是订阅链接本身(丢了要重新去服务商面板取),二是你写的覆写层内容(这是唯一无法自动恢复的手工资产),三是自定义规则集的本地文件(如果用了 type: file)。订阅生成的 config.yaml 本体不必备份——它随时可以重新拉取,备份反而容易造成"编辑了备份文件却在纳闷为什么没生效"的混乱。把这三样放进一个纯文本目录,重装系统或换机器时,新装客户端 → 填回订阅 → 粘回覆写层,几分钟即可完全恢复。
用注释代替记忆
覆写层里每加一条自定义规则,顺手在上一行写一句注释,说明"为什么加"和"什么时候可以删"。半年之后回看,没有注释的规则你既不敢删也想不起用途,只能一直带着;有注释的规则则可以定期清理。注释的成本是一行字,收益是配置文件不会随时间膨胀成不可维护的历史包袱:
prepend-rules:
# 公司内网 OA,必须直连,离职后可删
- DOMAIN-SUFFIX,intra.example.com,DIRECT
# Steam 下载走直连以跑满带宽,2026-07 添加
- PROCESS-NAME,Steam.exe,DIRECT
三个需要定期回看的点
其一,规则集的 interval 与 path:多个规则集共用同一个 path 会互相覆盖,新增规则集时容易复制粘贴出错,值得每次新增后确认一遍。其二,策略组成员:订阅节点更名后,手动写在覆写层里的节点名可能已经失效,表现为组里少了成员或加载报 proxy not found。其三,内核与客户端版本:新字段在旧内核上会被判为无法识别,升级客户端后再启用新字段更稳妥,各客户端的更新节奏与差异见客户端对比页,安装包统一从安装包页获取。
什么时候该重建而不是继续修
当一份配置被反复手工修改到自己都说不清哪些字段还在起作用时,重建比继续修更快:删掉旧配置,重新拉取订阅得到干净原文,把覆写层里确认还需要的规则挑出来重贴一遍,其余全部丢弃。以详图 B-02 的最小骨架为参照,五个部分齐备就能跑;在此之上按需逐段添加,每加一段重载一次,任何一处出错都能立刻定位。这条路看似绕远,实际比在一份混乱文件里排查省时间得多。
详图 B-12常见场景的字段组合
本节把前面各段的字段组合成几套完整可用的写法,覆盖日常最高频的四类需求。每套都写在覆写层里,订阅更新不受影响;直接复制后按注释替换自己的域名与进程名即可。
场景一:某个网站必须直连
公司内网系统、银行、政务网站这类只认国内出口的服务,走代理会被拒绝或反复验证。用 DOMAIN-SUFFIX 指向 DIRECT,并放在 prepend 段确保优先于订阅自带的任何规则:
prepend-rules:
- DOMAIN-SUFFIX,intra.example.com,DIRECT
- DOMAIN-SUFFIX,example-bank.com,DIRECT
场景二:某个程序整体走直连或走代理
桌面端可以按进程名分流,适合游戏下载器、大文件同步工具这类不需要代理却会跑满带宽的程序。进程名要写系统里的实际可执行文件名,Windows 含 .exe 后缀,macOS 与 Linux 一般不含;名字可以在客户端的连接面板里直接看到:
prepend-rules:
- PROCESS-NAME,Steam.exe,DIRECT
- PROCESS-NAME,Docker Desktop.exe,节点选择
场景三:屏蔽广告与追踪域名
把不想连接的域名指向 REJECT,内核会直接拒绝该连接。少量域名可以手写;成规模的名单应交给规则集,由 rule-providers 自动更新,避免手工维护上千行:
prepend-rules:
- DOMAIN-KEYWORD,doubleclick,REJECT
- DOMAIN-SUFFIX,ads.example.com,REJECT
场景四:分地区出口
流媒体、AI 服务等按地区提供内容的站点,需要固定走某个地区的节点。做法是先建一个只含该地区节点的 select 或 url-test 组,再把对应域名指向这个组;这样节点增减时只维护组成员,规则不动:
prepend-proxy-groups:
- name: "日本出口"
type: url-test
url: https://www.gstatic.com/generate_204
interval: 300
proxies:
- "日本-01"
- "日本-02"
prepend-rules:
- DOMAIN-SUFFIX,example-stream.jp,日本出口
四套组合都遵循同一个套路:确定"哪些流量"(域名、进程、IP 段)、确定"去哪个出口"(内置出口或策略组)、放在 prepend 段保证优先级。理解了这三步,任何新需求都能自己拼出来,不必等现成配置。规则之间的匹配演算与更复杂的国内外分流方案,见规则分流配置实战。
至此,config.yaml 的主要字段均已收录。本页未覆盖的具体故障现象,查 FAQ 页按分类检索;拿不准该用哪个客户端承载这份配置,见客户端对比页的选型结论;尚未安装客户端的读者,前往安装包页按平台获取,各平台首推 Clash Plus。