先分清两页分工。教程页是快速上手主线:装客户端、导订阅、选模式、连通验证,跟着做就能跑通。本页是查阅手册,不讲操作顺序,只讲 config.yaml 每个字段的含义、取值与写法。订阅下发的配置大多已经写好,手册的用途是读懂它、改对它。文中客户端与下载页清单一致:各平台首推 Clash Plus,与 Clash Verge Rev、FlClash 同属 mihomo 内核生态,本手册对这些客户端同样适用。
01YAML 结构总览
config.yaml 是内核的唯一输入。Clash Verge Rev、Clash Plus、FlClash 这些图形客户端,本质上都做同一件事:管理这份文件,交给 mihomo 内核执行。界面上的每次点击——换节点、切模式、改端口——最终都落回 YAML 文本。读懂这份文件,等于读懂客户端的全部行为;改对这份文件,等于改对全部客户端。
文件定位不用记路径。Clash Verge Rev 配置页任意订阅卡片右键,「打开文件」直达当前配置原文,同一菜单里还有更新、编辑等入口。内核直跑的场景(服务器、软路由)没有 GUI,文件位置由启动参数 -f(指定文件)或 -d(指定目录)给出,与客户端无关。
顶层结构按职责分五区,书写顺序不强制,社区惯例固定如下:
# ① 通用字段:端口、模式、日志、外部控制
mixed-port: 7897
mode: rule
log-level: info
# ② DNS:内核接管域名解析
dns:
enable: true
# ③ 代理节点:出站清单
proxies: []
# ④ 策略组:节点的组织方式
proxy-groups: []
# ⑤ 规则:分流判定,自上而下
rules:
- MATCH,DIRECT
五区之外是扩展区:proxy-providers 聚合订阅节点、rule-providers 引入外部规则集、tun 接管系统流量、hosts 静态域名表、listeners 额外监听。用到哪个查哪个,在对应章节展开。
YAML 语法六条硬规则,违反任意一条都会激活失败:
- 缩进只用空格,禁用 Tab;同层缩进必须等宽,惯例两个空格。
key: value冒号后必须有一个空格,key:value是非法写法。- 列表项以
-开头,短横后同样带空格;-与父键同列或再缩进均可,全文件统一即可。 - 字符串含
#、:,或以@、&、*开头,或长得像数字、布尔值时,必须加引号。密码字段几乎总是需要。 #起注释,行尾注释与内容之间留空格,否则#会被吞进前面的字符串。- 锚点
&name与引用*name可复用重复片段,内核按标准 YAML 解析,支持该特性。
最小可用配置。二十行,已能完成「本地混合端口 + 单节点 + 国内直连、其余走代理」的完整分流:
mixed-port: 7897
allow-lan: false
mode: rule
log-level: info
dns:
enable: true
nameserver:
- 223.5.5.5
- 119.29.29.29
proxies:
- name: 节点A
type: ss
server: ss.example.com
port: 8388
cipher: aes-128-gcm
password: "your-password"
proxy-groups:
- name: 默认代理
type: select
proxies:
- 节点A
- DIRECT
rules:
- GEOSITE,cn,DIRECT
- GEOIP,CN,DIRECT,no-resolve
- MATCH,默认代理
修改与生效分两步:改文件,再让内核重新加载。Clash Verge Rev 里重新激活配置即触发热重载;GUI 上的系统代理、TUN、开机自启属于客户端设置,不写进订阅文件,两类设置不要混为一谈。
内核差异要留心。原版 Clash 已停止更新,Clash Meta 更名 mihomo 继续维护,三代内核字段并不通用:mihomo 新增的 vless、hysteria2、tuic、wireguard 节点类型与逻辑规则,旧内核无法识别。各客户端内置内核的对应关系见博客《Clash 内核版本区别梳理》。本页字段一律以 mihomo 为准。
02通用字段:端口、模式与行为基线
通用字段位于顶层,管内核的监听、模式与行为基线。它们与具体节点无关,改任何一项都影响全局。订阅配置通常已带合理默认值,需要动的主要是端口、模式与日志三处。
端口族。port 是 HTTP 代理端口,socks-port 是 SOCKS5 端口,mixed-port 把两种协议合并到同一端口——系统代理与多数应用只认其中一种,混合端口免去二选一,Clash Verge Rev 默认使用 7897 混合端口。redir-port 与 tproxy-port 只服务 Linux 透明代理,桌面用户留空。
局域网。allow-lan: true 开放局域网接入,bind-address 决定监听网卡,* 表示全部网卡。手机、电视共用电脑代理的完整配法见博客《混合端口与局域网共享代理设置》。开放即暴露:只在可信网络开启,公共 Wi-Fi 下保持 false。
模式。mode 三选一:rule 按规则分流,日常常驻;global 全部流量走选定代理组;direct 全部直连。GUI 的模式切换就是改写这个字段。规则排错的标准二分法:先切 global 验证代理链路本身可用,再切回 rule 逐段查规则。
日志与外部控制。log-level 五档,从 silent 到 debug;日常 info,排错临时调 debug,用完调回——debug 日志量大,且包含访问过的域名。external-controller 是内核 RESTful API 的监听地址,GUI 与第三方面板都经它控制内核;监听地址改成非回环时必须同时设置 secret,否则等于把代理控制权交给同网段的任何人。
行为微调。unified-delay: true 统一测速口径,剔除协议握手差异,节点间延迟才可比。tcp-concurrent: true 对候选地址并发建连、取最快者。find-process-mode 控制进程匹配,PROCESS-NAME 规则依赖它。profile.store-selected: true 让内核记住手动选过的节点,重启不丢。ipv6: false 是 IPv6 异常网络里「能连但打不开」的常见解法。
| 字段 | 典型取值 | 说明 |
|---|---|---|
| port | 7890 | HTTP 代理端口 |
| socks-port | 7891 | SOCKS5 代理端口 |
| mixed-port | 7897 | 混合端口,HTTP 与 SOCKS 同口,推荐 |
| redir-port / tproxy-port | 7892 / 7893 | Linux 透明代理专用,桌面留空 |
| allow-lan | false | 是否允许局域网设备接入 |
| bind-address | * | allow-lan 开启时的监听地址 |
| mode | rule | rule / global / direct 三选一 |
| log-level | info | silent / error / warning / info / debug |
| ipv6 | false | 是否允许 AAAA 解析与 IPv6 出站 |
| external-controller | 127.0.0.1:9090 | 内核 API 监听地址 |
| secret | 空 | API 访问密钥,非回环监听必填 |
| profile.store-selected | true | 记住手动选择的节点 |
port: 7890
socks-port: 7891
mixed-port: 7897
allow-lan: false
bind-address: "*"
mode: rule
log-level: info
ipv6: false
unified-delay: true
tcp-concurrent: true
find-process-mode: strict
external-controller: 127.0.0.1:9090
secret: "your-secret"
profile:
store-selected: true
store-fake-ip: false
bind: address already in use,即端口被占:换 mixed-port,或找出占用进程。Windows 下用 netstat -ano | findstr :7897 定位,macOS 与 Linux 用 lsof -i :7897。
03DNS 字段:解析路径与 fake-ip
DNS 单列一章,因为分流正确性一半系于它。规则里的 GEOIP、IP-CIDR 都要先拿到解析结果;解析被污染,分流跟着错。dns.enable: true 是前提——false 时整段失效,内核退回系统解析,假地址、策略解析全部不工作。
监听与模式。listen 决定内核 DNS 服务的监听地址;TUN 模式下查询由内核内部接管,系统侧无需改动。enhanced-mode: fake-ip 是主流选择:域名查询立即返回 198.18.0.1/16 池中的假地址,连接真正建立时内核按域名匹配规则,省掉一次真实解析的等待,网页打开明显更快。旧的 redir-host 模式已从 mihomo 移除,老配置里见到应删除。
fake-ip 边界。fake-ip-range 默认 198.18.0.1/16,仅当与内网网段冲突时才需要改。fake-ip-filter 是不发假地址的白名单:局域网域、NTP 授时、系统连通性探测必须列入,否则打印机、路由器后台、时间同步会莫名失败。下方示例给出常用条目,照抄后再补自己的内网域。
解析器分组。nameserver 是默认组,支持多种写法(见下表),多个服务器并发查询、取最快应答。proxy-server-nameserver 专解节点域名:节点地址本身也是域名,用它指定可信解析器,避免「要先连上代理才能解析代理」的死循环。direct-nameserver 服务直连域名,通常填运营商或国内公共 DNS。
| 写法 | 协议 | 说明 |
|---|---|---|
| 223.5.5.5 | UDP 53 | 明文查询,最快,可被窃听 |
| tls://dns.alidns.com | DoT | TLS 加密通道 |
| https://doh.pub/dns-query | DoH | HTTPS 加密,可走 443 |
| quic://dns.alidns.com | DoQ | QUIC 传输,低延迟 |
| dhcp://en0 | DHCP | 取网卡 DHCP 下发的 DNS |
策略解析。nameserver-policy 按域名分派解析器,键可以是具体域名、geosite: 分类或 rule-set: 规则集——国内域名走运营商 DoH、其余走可信境外 DoH,都靠这一段表达。旧字段 fallback 已弃用,mihomo 中由 nameserver-policy 取代,迁移时按「哪类域名用哪组服务器」重写。
其余开关。respect-rules: true 让境外解析器本身也按规则出站,需配合 proxy-server-nameserver 使用。use-hosts 与 use-system-hosts 控制 hosts 表来源。prefer-h3 让 DoH 查询优先走 HTTP/3。
dns:
enable: true
listen: 0.0.0.0:53
ipv6: false
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.1/16
fake-ip-filter:
- "*.lan"
- "*.local"
- "time.*.com"
- "ntp.*.com"
- "+.msftconnecttest.com"
- "+.msftncsi.com"
use-hosts: true
use-system-hosts: true
prefer-h3: true
nameserver:
- https://doh.pub/dns-query
- https://dns.alidns.com/dns-query
proxy-server-nameserver:
- https://doh.pub/dns-query
direct-nameserver:
- 223.5.5.5
- 119.29.29.29
nameserver-policy:
"geosite:cn":
- 223.5.5.5
- https://doh.pub/dns-query
"geosite:geolocation-!cn":
- https://dns.cloudflare.com/dns-query
- https://dns.google/dns-query
排错线索。网页「能连但打不开」、打开极慢、解析到错误地区,先看 DNS:在日志里按域名查解析路径,确认它走进了哪一组解析器、拿到了什么结果,再回头改对应的字段。
04代理节点字段:proxies 数组
proxies 是数组,一个元素一个节点。所有节点共享四个基础字段:name、type、server、port;其余字段由 type 决定。写错 type 特有的字段名,内核不报错、直接忽略,节点表现为连不上。
name 是节点的身份证:策略组按名字引用它,重名时后者覆盖前者,改名会让所有引用失效。名字含空格、冒号、# 时加引号。server 可以是域名或 IP;填域名时由 proxy-server-nameserver 负责解析,见上一章。
通用可选字段。udp: true 允许 UDP 转发,QUIC、游戏、语音通话需要它。skip-cert-verify: true 跳过证书校验,只作临时排查手段。tfo 开启 TCP Fast Open。interface-name 指定出网卡,多网卡机器用得上。
Shadowsocks
- name: ss-node
type: ss
server: ss.example.com
port: 8388
cipher: aes-128-gcm
password: "your-password"
udp: true
cipher 常见取值:aes-128-gcm、aes-256-gcm、chacha20-ietf-poly1305、2022-blake3-aes-128-gcm。plugin 可挂 obfs 或 v2ray-plugin 做流量伪装,参数进 plugin-opts。
VMess
- name: vmess-ws
type: vmess
server: vmess.example.com
port: 443
uuid: 00000000-0000-0000-0000-000000000000
alterId: 0
cipher: auto
tls: true
servername: vmess.example.com
network: ws
ws-opts:
path: /ray
headers:
Host: vmess.example.com
udp: true
alterId 现代服务端一律为 0。network 支持 tcp、ws、grpc、h2、http;ws 传输时 ws-opts 里的 path 与 headers.Host 必须与服务端严格一致,错一个字符就是 400。
VLESS + Reality
- name: vless-reality
type: vless
server: 192.0.2.10
port: 443
uuid: 00000000-0000-0000-0000-000000000000
network: tcp
tls: true
udp: true
flow: xtls-rprx-vision
servername: www.microsoft.com
client-fingerprint: chrome
reality-opts:
public-key: "your-public-key"
short-id: "0123456789abcdef"
flow 只认 xtls-rprx-vision。Reality 的 public-key 与 short-id 来自服务端配置,client-fingerprint 建议 chrome,servername 填服务端伪装的域名。
Trojan
- name: trojan-node
type: trojan
server: trojan.example.com
port: 443
password: "your-password"
sni: trojan.example.com
alpn:
- h2
- http/1.1
skip-cert-verify: false
udp: true
sni 必须等于服务端证书域名,alpn 常见 h2 与 http/1.1。密码即认证凭据,泄露等于节点泄露。
Hysteria2
- name: hy2-node
type: hysteria2
server: hy2.example.com
port: 443
password: "your-password"
obfs: salamander
obfs-password: "obfs-password"
sni: hy2.example.com
skip-cert-verify: false
up: 50
down: 200
基于 QUIC,强制 UDP,udp 字段不必写。obfs 目前仅 salamander,口令进 obfs-password。up、down 单位 Mbps,虚标带宽会让拥塞控制起反效果,按实际填。运营商 QoS 严重时可用 ports 配置端口跳跃。
TUIC
- name: tuic-node
type: tuic
server: tuic.example.com
port: 443
uuid: 00000000-0000-0000-0000-000000000000
password: "your-password"
alpn:
- h3
congestion-controller: bbr
udp-relay-mode: native
reduce-rtt: true
sni: tuic.example.com
第五版协议。congestion-controller 可选 bbr、cubic、new_reno,高丢包链路 bbr 更稳。udp-relay-mode 默认 native;reduce-rtt: true 降低握手延迟。
WireGuard
- name: wg-node
type: wireguard
server: 198.51.100.20
port: 51820
ip: 172.16.0.2
private-key: "your-private-key"
public-key: "peer-public-key"
mtu: 1420
udp: true
ip 是分配到的隧道地址;private-key 是本机私钥、public-key 是对端公钥,别填反。mtu 常见 1420;部分服务商要求 reserved 三段字节,照抄官方客户端导出的值。
订阅聚合:proxy-providers
订阅下发的节点由 proxy-providers 管理:内核定时拉取、按 health-check 健康检查,策略组用 use 引用整组节点。手写节点与 provider 节点可以混在同一配置里。
proxy-providers:
provider-01:
type: http
url: "https://example.com/subscribe?token=xxxx"
path: ./providers/provider-01.yaml
interval: 86400
health-check:
enable: true
url: http://www.gstatic.com/generate_204
interval: 300
字段核对方法:节点连不上时,按 type 找到对应小节的示例,逐字段比对——多写的字段被忽略,少写的字段用默认值,拼错的字段不报警。订阅节点的字段以服务商下发为准,内核字段名全网统一。
05策略组字段:proxy-groups
策略组决定「流量交给谁」。规则里只写策略名,策略名背后是组,组里是节点——三层解耦,换节点不动规则,改规则不动节点。
五种类型,行为各不相同:
| type | 行为 | 适用场景 |
|---|---|---|
| select | 手动选择 | 最外层入口组,GUI 点哪个用哪个 |
| url-test | 周期测速选最低延迟 | 同地区多节点自动择优 |
| fallback | 按顺序取第一个可用 | 主备切换,主恢复自动切回 |
| load-balance | 连接分摊到多节点 | 大流量下载、多线叠加 |
| relay | 串联链路 | 中转加速、特殊落地 |
- select:手动选择,适合作为最外层入口组,其他组挂在它下面。
- url-test:周期对组内节点测延迟、选最低;
tolerance设 50(毫秒)防止延迟抖动导致来回跳节点。 - fallback:按 proxies 顺序取第一个通过健康检查的节点,主节点恢复后自动切回。
- load-balance:
strategy三选一——consistent-hashing 同域名固定同节点、站点会话最稳;round-robin 轮询;sticky-sessions 同会话同节点。 - relay:流量先进第一个节点、再从最后一个节点出,链路上每一跳都必须可用,任何一跳断了整链断。
通用字段。proxies 列节点名,use 列 proxy-providers 名,两者可混用。filter 用正则筛节点名(如 香港|HK),exclude-filter 反向排除,exclude-type 按协议类型排除。icon 供 GUI 显示图标,hidden: true 在 GUI 里隐藏该组,disable-udp: true 禁止该组转发 UDP。
测速字段。url 默认 http://www.gstatic.com/generate_204,返回 204 即判定可用;interval 单位秒,太短费电、太长迟钝,300 是常见折中;timeout 是单次测速超时;lazy: true(默认)表示组没人用就不测;max-failed-times 控制连续失败多少次判定节点不可用;expected-status 指定期望的 HTTP 状态码。
嵌套。组的 proxies 里可以再写组名,「默认代理 → 自动选择 → 各节点」的三层结构就是这么搭的;rules 里引用最外层组名即可。订阅下发的配置通常已带好几层组,手动加节点时往最外层组加,全链路生效。
proxy-groups:
- name: 默认代理
type: select
proxies:
- 自动选择
- 故障转移
- DIRECT
use:
- provider-01
- name: 自动选择
type: url-test
use:
- provider-01
url: http://www.gstatic.com/generate_204
interval: 300
tolerance: 50
lazy: true
- name: 故障转移
type: fallback
proxies:
- 香港节点
- 日本节点
url: http://www.gstatic.com/generate_204
interval: 120
- name: 负载均衡
type: load-balance
use:
- provider-01
strategy: consistent-hashing
url: http://www.gstatic.com/generate_204
interval: 300
- name: 中继链
type: relay
proxies:
- 入口节点
- 落地节点
三种自动组的取舍细节——测速选优、故障转移、负载均衡各自适合什么场景——见博客《Clash 策略组类型怎么选》。组的设计原则就一条:少而精,每多一个组都是一份维护成本;组名会被规则引用,改名要连带改规则。
06规则语法:自上而下,首条命中
规则是分流的大脑,匹配模型只有一句话:自上而下,首条命中即停。顺序就是优先级;MATCH 无条件命中,必须放在最后一条,它之后的规则永远不会被执行。
单条规则是三段式:类型,参数,策略,部分类型可追加第四段 no-resolve。策略可以是策略组名,也可以是内置策略:DIRECT 直连、REJECT 拒绝并返回错误、REJECT-DROP 静默丢弃、PASS 跳过当前分支继续匹配(主要配合 SUB-RULES)。
| 类型 | 参数 | 说明 |
|---|---|---|
| DOMAIN | 完整域名 | 精确匹配单个域名 |
| DOMAIN-SUFFIX | 域名后缀 | 匹配该域及其全部子域 |
| DOMAIN-KEYWORD | 关键词 | 域名包含即命中,慎用,误伤面大 |
| GEOSITE | 分类名 | 域名分类库,如 cn、category-games@cn |
| IP-CIDR / IP-CIDR6 | 网段 | 按目标 IP 匹配 |
| IP-ASN | ASN 号 | 按目标自治域匹配 |
| GEOIP | 国家码 | 按目标 IP 归属地匹配 |
| SRC-IP-CIDR | 网段 | 按来源 IP 匹配 |
| SRC-PORT / DST-PORT | 端口 | 按来源 / 目标端口匹配 |
| PROCESS-NAME | 进程名 | 按发起进程匹配 |
| PROCESS-PATH | 完整路径 | 按进程路径匹配 |
| RULE-SET | 规则集名 | 引用 rule-providers |
| AND / OR / NOT | 子规则 | 逻辑组合,mihomo 特有 |
| SUB-RULES | 子规则组名 | 进入子规则分支 |
| MATCH | 无 | 兜底,必须最后一条 |
域名类与 IP 类是分水岭。域名规则(DOMAIN、DOMAIN-SUFFIX、DOMAIN-KEYWORD、GEOSITE)直接拿连接里的域名比对,不需要解析。IP 类规则(IP-CIDR、GEOIP、IP-ASN)需要目标 IP——域名连接走到 IP 规则时,内核被迫先做一次 DNS 解析才能判断。第四段 no-resolve 禁止这次解析:域名连接直接跳过该规则,只有纯 IP 连接才参与匹配。所有 IP 类规则都应带 no-resolve,除非明确要按解析结果分流。
GEO 数据。GEOSITE 与 GEOIP 依赖 geosite.dat 与 geoip.dat(或 mmdb)数据文件,geodata-mode: true 切换为 dat 格式;文件随内核更新,缺失时对应规则静默匹配不到,表现为分流失效。
逻辑规则
mihomo 支持 AND、OR、NOT 组合子规则,子规则用双层括号包裹:
rules:
- AND,((DOMAIN-SUFFIX,example.com),(PROCESS-NAME,chrome.exe)),默认代理
- OR,((DOMAIN-KEYWORD,blog),(DOMAIN-SUFFIX,notes.io)),默认代理
- NOT,((GEOSITE,cn)),默认代理
规则集:rule-providers
量大、更新频繁的规则交给 rule-providers 外部规则集,rules 里用 RULE-SET,名称,策略 引用;behavior 三选一:domain(域名后缀)、ipcidr(IP 段)、classical(经典三段式)。
rule-providers:
ad-list:
type: http
behavior: domain
format: yaml
url: "https://example.com/rules/ad-list.yaml"
path: ./ruleset/ad-list.yaml
interval: 86400
rules:
- RULE-SET,ad-list,REJECT
- MATCH,默认代理
进程匹配。PROCESS-NAME 与 PROCESS-PATH 依赖 find-process-mode;Windows 下进程名带 .exe 后缀,macOS 与 Linux 用可执行文件名。
排序原则:
- 精确在前,宽泛在后:DOMAIN 先于 DOMAIN-SUFFIX,后缀先于 GEOSITE。
- 局域网与内网网段置顶直连,不进代理。
- 国内直连收尾用 GEOSITE,cn 加 GEOIP,CN,别逐条列域名。
- MATCH 永远最后,指向主代理组或 DIRECT。
rules:
# 局域网与内网直连
- DOMAIN-SUFFIX,local,DIRECT
- IP-CIDR,10.0.0.0/8,DIRECT,no-resolve
- IP-CIDR,172.16.0.0/12,DIRECT,no-resolve
- IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
# 进程与应用
- PROCESS-NAME,steam.exe,游戏加速
# 域名规则,精确在前
- DOMAIN,api.example.com,默认代理
- DOMAIN-KEYWORD,telegram,默认代理
# 分类库收尾
- GEOSITE,category-games@cn,DIRECT
- GEOSITE,cn,DIRECT
- GEOIP,CN,DIRECT,no-resolve
# 兜底
- MATCH,默认代理
07覆写与合并:订阅更新不丢改动
手改订阅文件有个死结:订阅一更新,改动全部丢失。Clash Verge Rev 为此提供三层修改机制,按「改什么、留不留」分工。
第一层,编辑文件。配置页订阅卡片右键「编辑文件」,直接改 YAML 原文,保存即生效,但下次订阅更新就被覆盖。只用于临时调试与想法验证,验证完的改动要搬到下面两层。
第二层,订阅级编辑。右键「编辑规则」「编辑代理」「编辑代理组」,分别对订阅的规则、节点、策略组做前插或后插。它绑定当前订阅、不被更新覆盖,是最常用的一层——加一条内网直连规则、加一个自建节点,都在这里完成。
第三层,全局扩展配置。配置页右上角入口,两种形态:Merge 用 YAML 声明合并意图,Script 用 JavaScript 拿到整个配置对象自由改写。它作用于所有配置,切换订阅不丢,适合放与订阅无关的个人基线。
Merge:声明式合并
六个专用键控制数组合并方向,prepend 在前、append 在后;规则前插意味着比订阅自带规则更早命中。其余顶层键直接覆盖原值:mixed-port、mode 这类标量写啥是啥;dns 这类嵌套段按整段替换,覆写时把整段写全,不要只写半段。
prepend-rules:
- DOMAIN-SUFFIX,internal.example.com,DIRECT
append-rules:
- DOMAIN-KEYWORD,download,下载分组
prepend-proxies:
- name: 自建备用
type: ss
server: 203.0.113.10
port: 8388
cipher: aes-256-gcm
password: "your-password"
append-proxy-groups:
- name: 下载分组
type: select
proxies:
- 自建备用
- DIRECT
mixed-port: 7897
Script:编程式改写
需要条件逻辑时用脚本。入口固定为 main(config),参数是合并后的完整配置,返回值是交给内核的最终配置:
function main(config) {
config["mixed-port"] = 7897;
const extra = {
name: "自建备用",
type: "ss",
server: "203.0.113.10",
port: 8388,
cipher: "aes-256-gcm",
password: "your-password"
};
config.proxies = config.proxies || [];
config.proxies.push(extra);
(config["proxy-groups"] || []).forEach(function (group) {
if (Array.isArray(group.proxies)) {
group.proxies.push("自建备用");
}
});
return config;
}
生效顺序固定:订阅原文 → 订阅级编辑(规则/代理/代理组)→ 全局 Merge → 全局 Script → 内核。排错沿链反向查:先看运行时最终生效的配置长什么样,再逐层定位问题出在哪一层。
高频覆写场景:
- 内网域名直连:prepend-rules 加 DOMAIN-SUFFIX 规则,前插保证最先命中。
- 自建节点注入所有组:Script 遍历 proxy-groups 统一追加。
- 统一端口:Merge 里写一行 mixed-port。
- fake-ip-filter 补内网域:覆写 dns 整段,把订阅的 filter 列表抄全再追加。
其他客户端与直跑。Clash Plus、FlClash 同样提供「订阅 + 本地修改」的机制,思路相同、入口不同;内核直跑没有覆写层,直接维护原文件,建议用 Git 管历史。多设备维护同一套配置的方案对比,见博客《Clash 配置多设备同步的三种方案》。
08校验与排错:从报错到日志
激活失败先读报错。Clash Verge Rev 激活配置时内核做完整解析,报错信息带行号与原因;按行号回到文件,九成问题在这一步定位。报错被截断时,去日志页看完整输出。
YAML 高频错误,按出现率排序:
- Tab 缩进:编辑器设置里把 Tab 转为空格,全文件统一两个空格。
- 冒号后缺空格:
port:7890是非法写法。 - 密码含
#未加引号:#之后的内容被当成注释,密码被截短。 - 列表缩进错位:
-与父键从属关系错乱,节点跑到别的键下。 - 节点重名:后者覆盖前者,策略组里引用的只剩一个。
- 规则指向不存在的策略名:激活即报 proxy not found,检查组名拼写。
日志是第二现场。log-level 临时调到 debug,内核日志页能看到每条连接命中了哪条规则、走了哪个出站;界面各区块功能见博客《Clash Verge Rev 界面功能速览》。排查完调回 info。
「改了不生效」按序排查:
- 改了文件,但配置页没有重新激活,内核还在跑旧配置。
- 改的是订阅原文,覆写层又把它改了回去——看运行时最终配置确认。
- 配置对了,但 GUI 连着旧内核进程,重启内核或重连。
- 系统代理或 TUN 没开,流量根本没进内核,改什么都没用。
端口与局域网。报 bind: address already in use 是端口被占:换 mixed-port,或结束占用进程。allow-lan 已开但手机连不上:先查电脑防火墙是否放行端口,再确认两端在同一网段、填的是电脑内网 IP。
fake-ip 异常。个别应用(银行、政企、部分带反作弊的游戏)对假地址敏感:把域名加进 fake-ip-filter,配 direct-nameserver,必要时整条规则直连。加完重新激活配置生效。
TLS 与时间。证书类报错先校准系统时间,偏差几分钟握手必败;skip-cert-verify 只作临时排查手段,确认链路后关回 false。
DNS 泄漏与污染。怀疑泄漏时按序查:nameserver 是否全部走可信通道、proxy-server-nameserver 是否已配、respect-rules 是否符合预期、nameserver-policy 的 geosite 键分类名是否写对——分类名写错会静默落空,不报错。
多客户端互抢。同一台机器同时开两个代理客户端,后启动的会覆盖先启动的系统代理设置,表现为规则不生效、流量走错内核、端口反复被占。保证同一时间只运行一个客户端;退出旧客户端后先确认系统代理已复原,再启动新的,必要时重启系统清掉残留的代理注册项。上一次未正常退出的内核进程也会占住混合端口,新进程绑定失败即启动报错,先在任务管理器或活动监视器里结束残留的内核进程再启动;若改了端口号,系统代理与局域网设备里填写的端口要同步修改,否则会出现地址正确却连不上的假故障。
订阅更新失败。更新订阅时报超时或证书错误,先区分是订阅服务器不可达还是本地网络问题:关掉系统代理直连更新一次,再挂代理更新一次,哪条通走哪条,客户端里对应「使用系统代理更新」开关。更新成功但节点列表没变,多半是服务端缓存,间隔几分钟再试;订阅返回 404 或 401 则是链接失效,找服务商重新获取,不要反复重试。
性能与资源占用。节点全部可用但网速明显偏低,依次确认:延迟测试选中的节点是否真是当前策略组的出站(手动选择的组不会自动切换);url-test 组的测试间隔是否过短导致频繁切换;日志级别是否停留在 debug——高频写日志在低配机器上会拖慢转发。内存占用异常增长时,检查 rule-providers 是否引入了体积过大的规则集,精简后重新激活即可回落。
收尾。仍无头绪时,按常见问题页的分类清单过一遍;客户端下载与内核说明在下载页,选型对比在客户端对比页。