「策略组引用了不存在的节点」——名字对不上的四种情况
Clash 启动失败提示策略组里的某个节点找不到,本质是 proxy-groups 里写的名字和 proxies 里的 name 没有完全一致。本文列出四种容易忽略的不一致来源,以及换订阅后批量失效的处理办法。
本文目录(5 节 · 约 2 分钟) +
- 01 引用关系是怎么回事
- 02 四种容易忽略的不一致
- 03 怎么快速找出对不上的那几个
- 04 顺便说一个不是报错但会出问题的情况
- 05 小结
一句话结论:proxy-groups 里写的每个名字,必须和 proxies 里某个节点的 name 完全一致,或者是另一个策略组的名字,或者是 DIRECT / REJECT 这类内置策略。 「完全一致」包括大小写、空格、emoji 和不可见字符——差一个空格就是两个不同的名字。
引用关系是怎么回事
Clash 的配置分三层,靠名字串起来:
proxies:
- name: 香港01 # ← 这里定义了名字
type: ss
server: hk1.example.com
port: 443
proxy-groups:
- name: 节点选择
type: select
proxies:
- 香港01 # ← 这里引用它,必须一字不差
- DIRECT
rules:
- DOMAIN-SUFFIX,google.com,节点选择 # ← 这里又引用策略组
- MATCH,DIRECT
策略组的 proxies 列表里能填三种东西:节点的 name、别的策略组的 name、内置策略(DIRECT 直连、REJECT 拒绝、PASS 穿透等)。除此之外的任何字符串,Clash 都会认为你引用了一个不存在的东西,直接拒绝启动。
四种容易忽略的不一致
一、空格
香港01 和 香港 01 是两个名字。中英文之间的空格、名字末尾多出来的一个空格,肉眼几乎看不出来。末尾空格尤其阴险——从表格或网页复制节点名时经常带上。
二、emoji 和特殊符号
现在机场普遍在节点名里加旗帜 emoji,比如 🇭🇰 香港01。这些字符必须原样复制。有些编辑器或终端会把 emoji 渲染成别的样子,甚至在保存时改变编码,导致文件里的字节和你看到的不一样。
同类问题还有全角半角:香港01 和 香港01 里的数字不是同一个字符。
三、换订阅之后名字全变了
这是最常见的批量失效场景。你自己写了一套策略组和规则,然后换了机场或者机场调整了节点命名,proxies 里的名字全变了,而 proxy-groups 还写着旧名字——于是几十条引用同时失效。
处理办法有两个方向。一是把策略组改成用 use 引用 proxy-providers,让节点列表动态填充,不写死名字。二是改用正则筛选(部分客户端支持 filter 字段),按地区关键词匹配而不是逐个点名。
四、引用了自己或形成了环
proxy-groups:
- name: A
type: select
proxies: [B]
- name: B
type: select
proxies: [A] # ← A 和 B 互相引用
这在语法上每个名字都「存在」,但运行时会陷入循环。部分客户端能检测出来并报错,部分会直接卡死或行为异常。策略组之间可以嵌套引用,但要保证最终能落到真实节点上。
怎么快速找出对不上的那几个
逐个比对几十个名字是很折磨人的事,尤其当差异只是一个空格。把整份配置粘进配置校验器,它会做交叉引用检查:把 proxies 里所有 name 收集起来,再逐条核对 proxy-groups 和 rules 里的每个引用,把对不上的直接列出来并指到行号。
它也会检查反过来的情况——策略组的 proxies 是空列表。空策略组在多数客户端会被判为无效配置,但这个错误的提示信息往往很含糊。
顺便说一个不是报错但会出问题的情况
节点名重复。
proxies:
- name: 香港01
server: hk1.example.com
- name: 香港01 # ← 重名
server: hk2.example.com
这在语法上完全合法,Clash 也能启动,但策略组引用「香港01」时到底用哪一个是不确定的。表现是「明明选了香港节点,走的却不是我以为的那台服务器」。合并两份订阅、或者手动往订阅里加自建节点时,最容易撞上重名。
校验器会把重名单独标出来,因为它虽然不阻止启动,但排查起来非常隐蔽。
小结
- 名字匹配是严格的,空格、emoji、全角半角都算数
- 换订阅导致的批量失效,考虑改用 provider 或正则筛选,别写死名字
- 重名不报错但会导致选中非预期的节点
- 交叉引用检查用工具做,肉眼比对几十个名字不现实
相关文章
Clash 报错「proxies 必须是数组」是什么意思,怎么改
Clash 或 mihomo 提示 proxies 不是数组、无法解析节点列表时,问题几乎都出在 YAML 的短横线和缩进上。本文说明这个报错的确切含义、四种常见成因,以及每种情况的正确写法。
YAML 缩进明明对齐了却报错?多半是 Tab 混进来了
Clash 配置提示缩进不一致、mapping items 未对齐,但肉眼看每一行都对得整整齐齐——这种情况几乎都是 Tab 和空格混用。本文说明 YAML 为什么禁止 Tab 缩进、怎么在编辑器里揪出它,以及另外两种视觉上看不出的缩进问题。
rules 最后为什么一定要写 MATCH,不写会怎样
MATCH 是 Clash 规则列表的兜底项,决定没有命中任何规则的流量走哪里。不写它不一定报错,但会导致「大部分网站正常、个别网站莫名其妙不走代理」这类难查的问题。本文说明它的作用、白名单与黑名单两种写法,以及规则顺序为什么重要。