很多用户说「这个客户端不支持某协议」,实际可能有三种情况:UI 没有入口,core 版本太旧,或者配置字段没有正确传进去。理解 core 和 UI 的区别,可以少走很多弯路。

四个部件

部件负责什么常见例子
UI导入、展示、切换、日志、系统设置Clash Verge Rev、Mihomo Party、v2rayN
core连接、协议、DNS、路由、规则执行Mihomo、sing-box、Xray-core
配置文件告诉 core 怎么运行YAML、JSON、订阅导出
规则集给分流判断提供数据rule-provider、geosite、geoip

一个桌面客户端通常把这些包装在一起,所以看起来像一个软件。但出了问题时,必须拆开看。

UI 不等于 core

UI 负责让人操作。它会保存订阅、显示节点列表、提供开关、调用系统代理接口,还可能帮你下载或切换内核。UI 做得好,能减少配置成本;UI 做得差,也可能把本来正确的字段写错。

core 负责真正的网络行为。DNS 怎么查、规则怎么命中、协议怎么握手、TUN 怎么建路由,最终都由 core 执行。UI 显示「已连接」不代表 core 的每条连接都成功;core 日志里有 error,也不一定是 UI 问题。

同名协议也要看 core

比如一个配置写了 Reality、Hysteria2、TUIC 或某个新字段。A 客户端能用,B 客户端不能用,原因可能是:

  • B 的 core 版本更旧。
  • B 使用的 core 不是同一个项目。
  • UI 导入时丢了字段。
  • 配置格式针对另一个 core。
  • 规则集路径或缓存目录不同。

所以不要只说「订阅坏了」,导出最终配置,看它被 UI 转成了什么样。

配置是 UI 和 core 的合同

配置文件是两者之间的合同。UI 可以生成配置,core 按配置执行。合同写错,双方都可能看起来正常,但实际不能工作。

典型例子:

proxy-groups:
  - name: Auto
    type: url-test
    use:
      - provider-a

proxy-providers:
  provider-a:
    type: http
    url: https://example.com/provider.yaml

这里 UI 只负责把文件交给 core。core 会检查 provider-a 是否能拉取、是否能解析、组引用是否存在。provider 返回错误页时,UI 可能只显示「更新失败」,真正原因要看 core 日志。

规则集不是节点

规则集决定流量如何分类,不提供节点本身。新手常把 rule-provider、proxy-provider、订阅节点混在一起:

  • proxy-provider:提供节点列表。
  • rule-provider:提供规则列表。
  • proxy-group:决定节点如何被选择。
  • rules:决定一个连接走哪个组。

节点可用但规则错,表现为分流不对;规则正常但 provider 空,表现为组里没有节点。这是两类问题。

选择客户端时看什么

如果你正在选客户端,不要只看截图。更实用的是看这些:

  1. 使用哪个 core,更新是否及时。
  2. 能否查看和导出最终配置。
  3. 日志是否能筛选 debug、info、warn、error。
  4. 是否支持你的系统平台。
  5. 是否把系统代理、TUN、DNS 设置讲清楚。
  6. 配置目录和缓存目录是否容易找到。

对经常排障的人来说,能看到最终配置和 core 日志,比界面漂亮更重要。

排障时怎么描述问题

建议按这个格式说明:

UI:Clash Verge Rev x.y.z
core:Mihomo x.y.z
系统:macOS / Windows / Linux
配置来源:远程订阅 / 本地 YAML / 手写 JSON
故障动作:更新订阅 / 切换策略 / 打开 TUN / 访问某域名
日志级别:info 或 debug
关键日志:已脱敏的 20-60 行

这样别人能快速判断问题属于 UI、core、配置还是规则集。

相关阅读