本文目录
先分清:运行模式、系统代理与 TUN 不是一回事
Mihomo 当前文档列出的运行模式是 Rule、Global 和 Direct,默认使用 Rule。它们处理的是已经进入内核的连接,并决定这条连接接下来按规则分流、统一交给 GLOBAL 策略组,还是直接使用本地网络。
系统代理、TUN 和移动端 VPN 解决的是流量怎样进入内核;select、url-test、fallback 解决的是策略组怎样选出口;fake-ip 与 redir-host 则属于 DNS 增强模式。把这些不同层级都叫“代理模式”,很容易在排障时改错开关。
这些名称分别属于哪一层
| 层级 | 常见选项 | 实际决定 |
|---|---|---|
| 运行模式 | Rule / Global / Direct | 已进入内核的连接最终使用哪个出口 |
| 接管方式 | System Proxy / TUN / 移动端 VPN | 哪些应用或系统流量能够进入内核 |
| 策略组类型 | select / url-test / fallback | 一个策略组内部怎样选择节点或其他策略 |
| DNS 增强模式 | fake-ip / redir-host | 域名解析结果怎样交给规则与连接流程 |
三种运行模式改变出口决定,不改变节点速度
在 Clash Verge Rev 等桌面客户端中,打开主界面的“代理模式”项,或右键托盘图标进入 Mode / 模式子菜单;在移动端则通常位于首页或 Proxies / 代理页的“模式”一行。日常使用先点 Rule,需要判断是不是规则导致某个网站走错时,再短暂切到 Global 或 Direct。
三个模式接收的是同一批进入 Clash 的连接,区别在于接下来怎么选出口。Rule 按规则从上到下匹配,Global 把连接交给全局策略组,Direct 则直接使用本地网络。它们不会改变一个节点本身的带宽和延迟。
在客户端里完成一次真实切换
打开 Mode / 代理模式
从主界面模式项或托盘菜单进入,不要去改远程 YAML 的 mode 字段。
选择 Rule
打开目标网页,到 Connections 记下当前命中规则和出口。
需要对照时选择 Global 或 Direct
保持同一节点和目标,只更改模式并重新建立连接。
对照结束切回 Rule
再次请求目标,确认新的连接已经恢复按规则分流。
模式与实际用途
| 模式 | 连接怎么走 | 适合什么时候用 |
|---|---|---|
| Rule | 命中第一条适用规则后执行对应策略 | 日常使用,让不同服务走不同出口 |
| Global | 所有进入 Clash 的连接交给全局组 | 短时间对照规则是否造成问题 |
| Direct | 所有进入 Clash 的连接直接访问 | 验证本地网络,或暂时不使用代理 |
模式只影响已经进入 Clash 的流量。应用完全不读取系统代理、Connections 里没有记录时,从 Rule 切到 Global 不会让它突然出现;应先处理系统代理、应用代理或 TUN。
Rule(规则模式):按第一条命中规则决定出口
Rule 是 Mihomo 的默认运行模式,适合需要直连、代理、拒绝和不同策略组并存的日常场景。它并不天然等于“国内直连、国外代理”,实际结果完全取决于当前配置里的 rules、rule-providers 及其顺序。
Mihomo 从 rules 顶部向下检查,请求命中第一条就停止。一个域名本来应该走代理,却先命中了更宽的 DIRECT 规则,后面再写多少条都不会执行。列表末尾常见的 MATCH 用来接住前面没有匹配的连接。
打开 Connections,找到刚才的请求,查看规则类型和策略组。界面显示 DOMAIN-SUFFIX、RULE-SET 或 MATCH,能直接告诉你是哪里做了决定;凭感觉把模式来回切换,反而看不到规则顺序的问题。
rules:
- DOMAIN,api.example.com,DIRECT
- DOMAIN-SUFFIX,example.com,REJECT
- MATCH,DIRECT日常使用 Rule,要能回答“这条连接命中了什么”
检查一条实际请求
保持 Rule 模式
在主要策略组里固定一条已知可用节点。
重做目标动作
打开同一网页、刷新同一接口或启动同一应用。
到 Connections 找到它
按域名、进程或时间定位刚产生的连接。
读取规则与出口
确认它是 DIRECT、REJECT 还是某个代理策略组。
如果结果符合预期,Rule 就是正常状态。某个网站失败时,只改与它有关的规则或策略组,不要因为一条连接把全站切到 Global。
Global(全局模式):把已接管连接交给 GLOBAL 组
Global 只改变已经进入 Mihomo 的连接,不会自动接管设备上所有应用。进入该模式后,还要到 GLOBAL 策略组确认当前选中的是具体节点、其他策略组还是 DIRECT;只看顶部显示 Global,无法判断实际出口。
在 Global 模式下,先到 GLOBAL 策略组选择一条具体节点。若目标请求在 Rule 下命中 DIRECT 而失败,切到 Global 后通过该节点成功,说明网络和节点至少可用,重点回到 Rule 的匹配顺序。
Global 下仍然 timeout,规则就不是唯一原因;比较节点、DNS 和本地网络。测试结束后切回 Rule,因为系统更新、局域网和国内服务等原本的直连流量在 Global 下也可能被送到同一出口。
Direct(直连模式):经过内核后使用本地网络出口
Direct 模式会让进入 Clash 的请求直接访问。一个本地可达的网站在 Direct 成功、在代理策略失败,问题更可能出在节点或代理连接;Direct 也失败,则检查本地 DNS、网络或目标服务。
Direct 不是“关闭 Clash”的完全等价物。请求仍可能进入内核,只是出口选择 DIRECT。要判断应用有没有经过 Clash,仍然要看 Connections,而不是只看页面是否打开。
- Direct 成功,Rule 失败且走代理
- 检查该代理策略的节点和规则是否应该这样安排。
- Direct 与 Global 都失败
- 分别查看本地网络和代理日志,不要把结果归给模式名称。
- 三种模式都没有连接记录
- 应用绕过了 Clash,先修流量入口。
为什么旧客户端里还有 Script / 脚本模式
部分历史 Clash 客户端、旧内核或特定配置曾提供 Script / 脚本模式,用脚本处理比普通规则更复杂的判断。当前 Mihomo 通用配置文档只把 Rule、Global、Direct 列为运行模式,因此不能把 Script 写成所有现代客户端都具备的第四种通用模式。
旧客户端里能看到 Script,不代表迁移到新客户端后仍有同名开关;新客户端里找不到也不表示安装失败。迁移旧配置时,应先确认脚本实际判断了哪些域名、网络或进程,再按当前内核能力改写为 rules、rule-providers 或客户端支持的覆写。
遇到 Script 时怎么判断
| 看到的位置 | 应怎样理解 | 下一步 |
|---|---|---|
| 历史客户端的模式菜单 | 该版本或内核提供的兼容能力 | 保留旧环境记录并核对对应版本文档 |
| 旧配置中的脚本段 | 可能包含自定义路由逻辑 | 先读清判断条件,再决定是否迁移 |
| 新 Mihomo 客户端没有 Script | 符合当前三种通用运行模式的界面 | 不要强行写入未经当前内核确认的 mode 值 |
| Merge、覆写或 JavaScript 页面 | 属于客户端配置处理能力 | 不要和内核运行模式混为一谈 |
三种模式怎么选:只改变一个变量做对照
按场景选择运行模式
| 当前目的 | 建议模式 | 需要观察 |
|---|---|---|
| 日常按服务分流 | Rule | Connections 中的命中规则、策略组和实际出口 |
| 判断是不是规则把请求送错 | 短时间使用 Global | GLOBAL 组选择与重建后的新连接 |
| 判断本地网络能否直达 | 短时间使用 Direct | 本地 DNS、目标可达性和连接记录 |
| 应用没有任何连接记录 | 先不切模式 | 系统代理、应用代理、TUN 或移动端 VPN |
Rule 失败,Global 成功
比较两次 Connections 的规则和出口,修正 Rule 匹配。
Global 页面仍显示 DIRECT
检查 GLOBAL 策略组的当前选择,而不是只看顶部模式。
切到 Direct 后局域网恢复
补充本地网段直连规则,避免长期靠切模式。
模式切换后页面结果不变
关闭复用连接并重新请求,再看新产生的记录。
一次对照结束后,把模式切回原计划,再重复同一动作。如果 Rule 中已经命中正确策略且结果正常,就不需要保留 Global 作为“修复”。
