Clash 基础教程:内核、配置与规则
Clash 教程:说明原版 Clash 停更后的 mihomo 内核与 Clash Verge Rev、FlClash 等客户端,并逐项解释代理、策略组、规则与运行模式配置。
本文目录 13 节
快速回答 Clash 教程
Clash 是一类按规则分流的代理客户端。原版 Clash 内核已于 2023 年停止维护,如今常用的是 mihomo(原 Clash.Meta)内核,以及基于它的 Clash Verge Rev、FlClash 等图形客户端。看懂 proxies、proxy-groups、rules 三部分配置,并记住规则“自上而下、命中即停”,就能读懂绝大多数订阅配置。
Clash 系客户端通常把节点、策略组和分流规则放在同一份配置中:节点负责连接,策略组决定选择,规则为每条连接指定去向。它与 V2RayN 都能分流,只是配置与界面组织不同。本文把安装、导入、启动、验证和退出连起来,再用示例解释规则如何工作。
Clash 生态现状:内核与客户端
“Clash”这个名字今天其实指代一整个生态,分为两层:内核负责真正的协议处理和规则匹配,图形客户端负责导入订阅、展示节点和设置系统代理。
原版 Clash 内核使用 Go 语言编写,以 YAML 作为配置格式。2023 年,原版内核停止维护,原仓库不再更新;同一时期,Clash for Windows 等一批基于原版内核的图形客户端也先后停止更新。这些旧版本仍然可以在网上找到,但不会再获得安全修复和新协议支持,不建议继续使用。
目前仍在维护、使用较广的项目如下:
| 名称 | 类型 | 平台 | 说明 |
|---|---|---|---|
| mihomo(原 Clash.Meta) | 内核 | 多平台 | MetaCubeX 维护,兼容 Clash 配置格式,支持更多协议与规则类型 |
| Clash Verge Rev | 图形客户端 | Windows / macOS / Linux | 基于 mihomo 内核的桌面客户端 |
| FlClash | 图形客户端 | Android / Windows / macOS / Linux | 基于 mihomo 内核,界面简洁 |
无论选择哪个客户端,都应从项目的官方 GitHub 仓库下载。本文后面的配置示例以 mihomo 文档为准;各客户端界面不同,但底层读取的都是同一种配置。
下载与安装:先准备能运行的客户端
本教程以桌面 Clash Verge Rev 的通用流程说明。已有客户端可以跳到导入部分;手机用户另看移动设备教程,不能把桌面系统代理开关照搬到 Android 或 iOS。
- 从 Clash Verge Rev 官方仓库进入 Releases;FlClash 则从它自己的仓库获取。核对系统、处理器架构、该版本最低要求和是否为预发布。
- 按平台安装包说明完成安装。Windows 安装包、macOS DMG 与 Linux 软件包的操作不同,按项目官方安装文档执行。
- 首次打开先保持额外覆写、脚本和 TUN 关闭,暂时停止其他代理/VPN,记录原来的系统代理状态。主界面应正常加载,核心不应循环报错。
- 准备一条提供方标注为 Clash/mihomo 的配置地址。安装客户端不会自动获得节点;通用分享链接也不一定能作为完整 YAML 导入。
平台安装提示与菜单以官方快速入门和当前版本为准。只为了本机浏览器连接,先使用系统代理即可;TUN 和服务权限等需求在基础连接正常后再处理。
一份配置由哪几部分组成
打开任何一份 Clash 订阅配置,都可以把它拆成四个部分来读:
| 部分 | 作用 | 类比 |
|---|---|---|
| 基础设置 | 本地端口、运行模式、日志级别、控制接口等 | 车站的基础设施 |
proxies |
每个节点的协议、地址、端口与认证信息 | 一辆辆列车 |
proxy-groups |
把节点编组成策略组,决定“手动选”还是“自动选” | 线路调度 |
rules |
判断每条连接交给哪个策略组或直连 | 换乘指引 |
其中最容易混淆的是策略组。常见的策略组类型有:
- select:手动选择,界面上看到的“节点选择”一般就是它。
- url-test:定期测试组内节点的延迟,按指定测试地址的结果和容差选择节点;不代表下载带宽最大。
- fallback:按顺序使用第一个可用的节点,前一个失效时切换到下一个。
- load-balance:在多个节点之间分配连接。
策略组可以嵌套:一个 select 组里既可以放具体节点,也可以放另一个 url-test 组,还可以放内置策略 DIRECT(直连)和 REJECT(拒绝)。
带注释的最小配置示例
下面是一份可以帮助理解结构的最小配置。服务器地址使用了保留的示例域名和文档专用 IP 段,密码也是占位符,不能直接拿来连接。
# 示例配置:服务器、端口、密码均为占位符
mixed-port: 7890 # HTTP 与 SOCKS5 共用的本地端口
allow-lan: false # 是否允许局域网内其他设备使用本机代理
mode: rule # 运行模式:rule / global / direct
log-level: info # 日志级别:silent / error / warning / info / debug
external-controller: 127.0.0.1:9090 # 图形界面通过此接口控制内核
proxies:
- name: 示例节点-A
type: trojan
server: node-a.example.com
port: 443
password: your-password-here
sni: node-a.example.com
- name: 示例节点-B
type: ss
server: 192.0.2.10
port: 8388
cipher: aes-128-gcm
password: your-password-here
proxy-groups:
- name: 节点选择 # 手动选择组,规则中引用的就是这个名字
type: select
proxies:
- 自动选择
- 示例节点-A
- 示例节点-B
- DIRECT
- name: 自动选择 # 定期测速,自动使用延迟最低的节点
type: url-test
proxies:
- 示例节点-A
- 示例节点-B
url: https://www.gstatic.com/generate_204
interval: 300 # 测试间隔(秒)
tolerance: 50 # 延迟差小于 50ms 时不频繁切换
rules:
- DOMAIN-SUFFIX,ads.example.net,REJECT
- DOMAIN-SUFFIX,example.com,节点选择
- IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
- GEOIP,CN,DIRECT
- MATCH,节点选择
读这份配置时,注意三个名字之间的引用关系:rules 里的“节点选择”必须与 proxy-groups 中某个组的 name 完全一致,proxy-groups 里列出的节点名也必须与 proxies 中的 name 一致。名称对不上是手写配置时最常见的加载错误。
这份示例用于桌面本地 HTTP/SOCKS 代理,没有配置 TUN 或完整的 DNS 分流。实际使用应替换服务方给出的整段节点参数,而不是只改地址和密码;GEOIP 规则也需要客户端具备相应地理数据。加载成功后,先在手动组中选定真实节点,再用连接记录验证;选择了组内 DIRECT 会正常直连,不能据此证明代理节点可用。
规则顺序:为什么写在前面的规则优先
Clash 处理每一条新连接时,会从上到下逐条检查规则,命中第一条就停止,后面的规则不再参与判断。因此规则的书写顺序直接决定结果。常用的规则类型如下:
| 规则类型 | 匹配对象 | 示例 |
|---|---|---|
DOMAIN |
完整域名 | DOMAIN,www.example.com,节点选择 |
DOMAIN-SUFFIX |
域名及其所有子域名 | DOMAIN-SUFFIX,example.com,节点选择 |
DOMAIN-KEYWORD |
域名中包含的关键词 | DOMAIN-KEYWORD,example,DIRECT |
IP-CIDR |
目标 IP 段 | IP-CIDR,10.0.0.0/8,DIRECT,no-resolve |
GEOIP |
目标 IP 的归属地 | GEOIP,CN,DIRECT |
RULE-SET |
引用外部规则集 | RULE-SET,my-direct,DIRECT |
MATCH |
所有连接(兜底) | MATCH,节点选择 |
写规则时可以遵循三条经验:
- 具体的放前面,宽泛的放后面。 先写针对单个域名的规则,再写 GEOIP 这类覆盖面大的规则。
- 按需求决定
no-resolve。 它表示不要为了这一条 IP 规则主动触发域名解析,并不表示所有域名连接都会跳过 IP 规则;已有目标 IP 时仍可能匹配。给 GEOIP 规则随意加它,可能改变分流结果,见mihomo 规则说明。 MATCH永远放在最后。 它会匹配所有连接,写在中间会让后面的规则全部失效。
规则较多时,订阅通常会使用 rule-providers 引用外部规则集,让规则列表可以单独更新:
rule-providers:
my-direct:
type: http
behavior: domain # domain / ipcidr / classical
url: https://rules.example.com/direct.yaml
path: ./ruleset/my-direct.yaml
interval: 86400 # 更新间隔(秒)
rules:
- RULE-SET,my-direct,DIRECT
- MATCH,节点选择
这段是外部规则的结构片段,rules.example.com 不是可下载的真实规则源。把 rule-providers 合并到主配置,并将 RULE-SET 那一行插到原有 MATCH 前面;不要直接在同一文件末尾再追加第二个 rules:,否则会遇到重复键或覆盖原规则的问题。
真实规则源的内容必须匹配 behavior 和 format:这里的 domain 应下载域名规则集合,不能填完整代理订阅或混有 DOMAIN-SUFFIX,... 指令的 classical 集合。path 是缓存文件位置,interval 控制规则源更新,并不更新节点订阅;字段定义见mihomo 规则集合说明。添加后先确认规则源下载和解析成功,再检查目标连接是否命中 my-direct;若源失败,先退回未引用该规则集的可用配置。
在客户端中导入订阅
各客户端的界面布局不同,但导入流程大致相同:
- 复制 Clash 格式的订阅地址:服务商面板通常会区分不同客户端的订阅格式,选择 Clash 或 mihomo 对应的链接。
- 在配置页导入:打开客户端中管理配置的页面(常见名称为“订阅”“配置”或 Profiles),粘贴订阅地址并导入。
- 启用该配置:导入后点击选中这份配置,使其成为当前生效的配置。
- 为策略组选择节点:进入“代理”页面,在“节点选择”等 select 类型的组中选择节点;url-test 组会自动选择,无需手动操作。
- 检查模式与接管开关:日常先选规则模式,打开系统代理;Android 客户端则通常需要启动 VPN 服务并授权,不能只选择配置就结束。
- 查看实际连接:浏览器发起访问后,检查连接页或日志中的匹配规则、策略组和最终节点。没有记录时先排查流量是否进入客户端。
运行模式、系统代理与 TUN
mode 决定规则是否生效,客户端界面上一般会直接提供切换按钮:
| 模式 | 行为 | 使用建议 |
|---|---|---|
| rule(规则) | 按 rules 逐条匹配,默认模式 |
日常使用 |
| global(全局) | 进入核心的连接交给 GLOBAL 组中选定的出站 | 临时排查规则漏判 |
| direct(直连) | 进入核心的连接按直连模式处理 | 临时停用代理 |
系统代理和 TUN 是两种不同的“接管流量”方式。系统代理只对读取系统代理设置的程序生效;TUN 模式创建虚拟网卡,可以接管不读取代理设置的程序,但通常需要管理员权限或安装系统服务,与其他 VPN 软件同时运行时容易冲突。
还有两个与安全相关的设置值得留意:
- allow-lan:开启后,局域网内其他设备可以通过你的电脑上网。实际可达性还取决于监听地址、防火墙与认证设置。只给本机使用时保持关闭,避免无意开放共享代理。
- external-controller:上面的示例把控制接口限制在
127.0.0.1,实际监听值以最终生效配置为准。如果改为对外监听,务必设置访问密钥,否则同一网络中的其他人可能修改你的配置。
完成验证:从“已连接”到可正常使用
代理、测速和流量计数回答的问题不同。按以下顺序确认,才能知道故障发生在哪一层:
| 检查项 | 通过标准 | 未通过时先看 |
|---|---|---|
| 配置已加载 | 当前配置明确,核心无解析错误 | YAML 缩进、节点或策略组引用、协议支持 |
| 节点可用 | 测试地址有响应 | 节点参数、账户与网络;单次测试不能保证所有网站 |
| 应用已接管 | 实际请求出现在连接页或日志 | 系统代理、本地监听端口、浏览器扩展 |
| 规则正确 | 请求命中预期组,最终使用预期出站 | 规则顺序、组内选择、DNS |
| 业务可用 | 目标页面或应用操作成功,普通直连网站也正常 | 特定服务限制、UDP 或应用独立网络设置 |
保持同一节点,临时切到全局后恢复正常,通常应回头检查规则与策略组选项;只切全局而不检查连接记录,仍然无法知道原因。若切换节点或规则后旧页面行为没变,可关闭该应用的旧连接或重启应用再测,避免长连接继续沿用旧路径。
更新订阅、保留自定义与备份
在当前配置对应的更新入口获取新内容,确认更新时间或成功日志,检查策略组中已选节点是否仍存在,再测一次真实请求。自动更新的间隔按实际需求设置,无需频繁重复刷新;下载成功、配置生效和节点可用是三个独立结果。
长期自定义优先用客户端明确支持的扩展或覆写功能。Clash Verge Rev 的扩展配置与脚本说明列出了生效顺序与合并规则;某些字段或列表会整体替换,不能假定所有内容逐项合并。每次加规则后查看最终生效配置并验证,升级时复查相关版本变化。
升级或迁移前,在停止服务后保存应用提供的配置备份;没有统一导出功能时,按当前项目文档找到数据目录并备份。至少保留订阅地址、当前可用配置、自定义扩展、策略组选择与应用设置。备份中可能包含令牌和密码,应受保护保存;从其他人取得的脚本要先读懂其作用。
恢复时先还原基础配置并验证,再逐项恢复覆写、脚本和 TUN。完整通用步骤见订阅导入与备份指南。
以 Clash Verge Rev 的“备份设置”为例:在本地备份中创建备份,再打开“查看记录”,把需要保留的记录导出到应用数据目录以外。换机后“导入备份”先把 ZIP 加入备份列表,还要在记录里对选中的归档执行“恢复”并等待应用重启。创建、导出、导入与恢复是不同操作,项目的备份界面实现可核对当前行为;入口位置随版本调整。
正常停止与异常恢复
用完先关闭 TUN(如果曾启用)和系统代理,再退出客户端。规则模式里的 direct 只改变核心出站,不等于停止服务,也不一定清除系统代理。
异常退出后无法访问网页,重新启动客户端关闭系统代理;也可在系统网络设置里核对遗留的 127.0.0.1 代理,恢复使用前的值。若是手机 VPN 自动重连,先关闭相应自动连接选项再断开,避免一边排查一边被重新接管。
暂时关闭刚添加的覆写或脚本、退回已验证的配置,可以判断是否为自定义改动引起故障。保留错误日志后再操作,反复清空所有配置会丢失排查依据。
新手常见误区
- 长期开着全局模式:国内网站也绕道境外,既慢又浪费流量。排查完问题后记得切回规则模式。
- 直接修改订阅配置:更新订阅后改动会被覆盖,应改用客户端的覆写功能。
- 显示已连接但打不开网页:通常与系统代理、规则或 DNS 有关,详见Clash 显示已连接但无法上网。
- 启动时报端口被占用:多半是另一个代理客户端仍在运行,排查方法见端口被占用。
按学习路径,下一站是 sing-box 入门;要在设备之间维护配置,可继续读订阅更新与备份。遇到具体故障时转到连接失败排查,选择其他客户端可回到客户端专题。
常见问题
- 订阅生成的配置文件可以直接修改吗?
- 可以改,但下一次更新订阅时,服务端下发的新配置会覆盖你的修改。需要长期保留的自定义规则,应使用客户端提供的“覆写”“扩展配置”或脚本类功能(名称因客户端和版本而异),让修改在每次更新后自动重新应用。
- Clash 和 V2RayN 可以同时运行吗?
- 技术上可以,但不建议同时开启系统代理。两个客户端都会尝试修改同一个系统代理设置,后启动的会覆盖先启动的;如果本地端口相同还会出现端口占用。需要切换时,先在一个客户端里关闭系统代理并退出,再打开另一个。
- 为什么全局模式可以访问,规则模式不行?
- 这通常提示规则选错出站、策略组选择不同或 DNS 配合存在差异。保持同一节点,检查失败请求在连接记录中命中了哪条规则、去了哪个组,再逐项修正。不要把长期全局模式当作修复规则的替代方案。
- mihomo 能使用原版 Clash 的配置吗?
- 基本可以。mihomo 兼容原版 Clash 的主要配置格式,并在此基础上增加了更多协议和规则类型。反过来则不一定成立:使用了 mihomo 新增字段的配置,放到已停更的原版内核中可能无法加载。