先选规则模式,再确认流量是否进入内核
日常使用先选规则模式(Rule),确认订阅已启用、目标策略组已选好节点,再访问需要测试的网站。如果只有某个网站异常,可以临时切到全局模式比较;需要确认当前网络能否直接访问目标时,再切到直连模式。每次只改一个设置,结果才容易解释。
三种模式决定的是已经进入 Clash 或 Clash Meta(mihomo)内核的连接如何出站,不是决定哪些应用一定会被接管。系统代理、应用内代理和 TUN 负责把流量送进内核;规则、全局和直连负责处理送进来的流量。这两层设置要分开看。
| 模式 | 进入内核后的处理 | 适合的用途 | 先检查什么 |
|---|---|---|---|
| 规则 Rule | 按规则顺序匹配,交给对应出站或策略组 | 日常分流、区分直连与代理 | 命中规则与策略组实际选择 |
| 全局 Global | 通常交给内置 GLOBAL 策略组 | 临时排查规则遗漏、统一测试出口 | GLOBAL 最终选中的出站 |
| 直连 Direct | 由内核直接连接目标 | 对比本地网络、排查代理节点因素 | 本地 DNS 与网络可达性 |
三种流量走向:入口相同,出站决策不同
下面的图以同一个已经被接管的应用连接为例。图中的“代理选择”是示例策略组名称,不是每份订阅都具备的固定名称;实际配置可能使用“节点选择”“自动选择”或其他名称。
规则模式:从上往下,首次匹配生效
应用连接
↓ 系统代理 / 应用代理 / TUN
Clash 或 mihomo 内核
↓ 从上到下检查 rules
├─ 命中直连规则 → DIRECT → 目标服务
├─ 命中代理规则 → 代理选择 → 当前节点 → 目标服务
├─ 命中拒绝规则 → REJECT → 连接终止
└─ 走到 MATCH 兜底 → 指定策略 → 目标服务
规则不是“越具体的自动优先”,而是通常由上至下检查,先匹配到的先执行。如果把一条覆盖范围很大的规则放在前面,后面更精细的域名规则可能根本没有机会生效。订阅中的规则集也要结合它在 rules 列表里的引用位置判断。
全局模式:绕过通常的规则分流
应用连接
↓ 已被接管
Clash 或 mihomo 内核
↓ Global 模式
GLOBAL 策略组
↓ 当前选中的节点或其他可选出站
目标服务
切到全局后,还要打开代理页面检查 GLOBAL。全局并不等于“自动选择最快节点”,也不保证出口一定是代理节点。如果 GLOBAL 当前选择的是 DIRECT,或者选中的另一层策略组最终指向直连,连接仍会直接出站。部分客户端会用本地化名称展示这个组。
直连模式:仍可经过内核,但不经过代理节点
应用连接
↓ 已被接管
Clash 或 mihomo 内核
↓ Direct 模式
DIRECT
↓ 当前设备可用的网络出口
目标服务
直连模式不是退出客户端,也不等于关闭 TUN。内核仍可能处理连接和 DNS 请求,只是出站改为直连。因此,直连成功只能说明这条连接在当前接管和解析环境下可以直接访问,不能单凭这一点认定系统代理、DNS 和路由都已恢复到未启动客户端时的状态。
规则与策略组怎么配合:看一段最小示例
下面是用于解释匹配顺序的 YAML 片段,不能替代完整订阅。其中的“代理选择”必须已经在 proxy-groups 中定义。example.com 和它的子域名用于展示写法,不代表某项服务必须使用代理。
mode: rule
mixed-port: 7890
rules:
- DOMAIN-SUFFIX,example.com,代理选择
- IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
- IP-CIDR,10.0.0.0/8,DIRECT,no-resolve
- MATCH,代理选择
mode: rule:表示默认按规则处理。客户端界面的运行时切换可能覆盖这个值,重载配置后的行为取决于客户端是否保存了模式覆盖。mixed-port: 7890:在同一入口端口接收 HTTP 与 SOCKS5 代理连接。7890 是示例,不是所有客户端的固定端口。DOMAIN-SUFFIX:匹配指定域名及其子域名;命中后交给“代理选择”,再由该策略组决定实际节点。IP-CIDR:按目标 IP 网段匹配。这里仅示范两个常见内网段,并不是完整的局域网直连规则。no-resolve:避免仅为匹配这条 IP 规则而主动解析域名;并不表示整个连接无需 DNS。MATCH:作为最后的兜底。放在前面会让后续规则失去匹配机会。
切到全局或直连后,通常不再按这份普通 rules 列表逐条决定出站。因此,“规则里写了内网直连”不能直接推出“全局模式也会按同一条规则直连”。对本地打印机、路由器管理页和企业内网服务,日常保留规则模式更便于明确控制。
什么时候临时切全局,什么时候回到规则
单个网站打不开:用全局做一次对照
- 在客户端的“代理模式”区域确认当前是“规则”;部分客户端把入口放在托盘菜单的“代理模式”中,名称以实际界面为准。
- 打开“连接”页面,访问一次目标网站,记录目标域名、命中规则和最终策略链。
- 切为“全局”,在 GLOBAL 中选择一个已确认可用的节点。尽量与规则模式下原本使用的节点一致,避免同时改变两个条件。
- 关闭目标网站的旧连接后重新访问。必要时只断开该域名对应的连接,不必立即断开全部应用。
- 若全局正常而规则异常,切回规则,重点检查域名是否误命中 DIRECT、规则集是否缺失、兜底是否指向了不同策略组。
这个对照不是绝对结论。同一节点下两种模式仍可能受到配置中的按模式 DNS 行为等因素影响。若切换前后解析结果不同,需要把 DNS 一并纳入排查,而不是直接把所有问题归结为规则。
统一出口测试:可以短时间使用全局
需要观察某个代理节点的出口位置、测试一个服务能否通过该节点访问时,全局更容易减少规则分流的干扰。但这段时间内,已被接管的其他应用也可能使用相同出口,包含系统更新和云盘同步。按流量计费的订阅尤其需要留意后台下载。
日常浏览与本地服务:回到规则模式
测试结束后切回规则,重新确认常用策略组。需要代理的域名走代理,本地可直接访问的服务走 DIRECT,才能减少不必要的绕路。全局不是比规则“更高级”的模式;它只是省略了常规规则选择,更适合做短期对照。
系统代理、TUN 与 DNS:模式切换解决不了的部分
应用没有进入内核,全局也接管不到
桌面客户端开启“系统代理”后,一部分应用会读取系统设置,另一部分仍使用自己的网络配置。命令行程序还可能依赖环境变量。可以在确认本地混合端口为 7890 后,用下面的命令显式指定代理入口,减少系统代理设置带来的不确定性:
curl --proxy http://127.0.0.1:7890 --connect-timeout 10 --max-time 20 -I https://example.com/
在 Windows PowerShell 中,如需明确调用系统提供的 curl 程序,可将开头写成 curl.exe。执行时同时看客户端的连接记录:出现这次请求,说明它确实进入了该代理入口;仅有 HTTP 响应并不能证明用了远端节点,还要看最终策略链。命令中的 10 秒是连接超时,20 秒是总耗时上限,不是延迟测试成绩。
TUN 通过虚拟网络接口和路由接管更多 IP 流量,但范围仍受路由、排除项、权限及具体实现影响。开启 TUN 不会自动让节点支持 UDP,也不会修复节点本身不可达的问题。需要接管不遵循系统代理的应用时,再按客户端教程检查 TUN 权限和路由配置。
切换模式不等于清空 DNS 状态
使用 Fake-IP 时,内核可能向应用返回用于域名映射的虚拟地址,再借助映射识别实际域名。这不等于连接真的被发送给了一个公网目标。DNS 上游、Fake-IP 过滤项、应用自己的加密 DNS,以及本机缓存,都可能影响排查结果。
不要因为切全局后仍然打不开,就立刻同时修改 DNS、TUN 和订阅。先看连接有没有出现,再看域名与策略链,最后检查解析和节点连接错误。一次修改多个层级,容易把原本可复现的问题变成偶发问题。
切换后没有变化:按连接记录逐项核对
| 看到的现象 | 优先排查 | 具体操作 |
|---|---|---|
| 切全局后出口没有变化 | 旧连接仍在复用,或 GLOBAL 选了 DIRECT | 检查 GLOBAL,断开目标连接再重新请求 |
| 浏览器可用,游戏不可用 | 游戏未遵循系统代理,或所需 UDP 不受支持 | 先查游戏连接是否进入内核,再核对 TUN 与节点能力 |
| 规则模式异常,全局正常 | 命中规则与最终策略不同 | 对照同一节点,检查规则顺序、规则集和兜底 |
| 直连正常,全局失败 | 所选节点不可用,或目标拒绝该出口 | 查看握手或超时错误,换一个可用节点复测 |
| 三种模式都失败 | 入口端口、DNS、网络或目标服务本身异常 | 先验证本地入口和连接记录,再逐层检查 |
模式切换通常影响后续新建连接,不保证已有 TCP 长连接或 QUIC 会话立即改道。网页刷新也可能复用连接;若记录仍显示旧策略,应先关闭相应连接,再重新发起请求。进行中的下载、会议或远程会话可能因此中断,操作前先确认影响范围。
最后按三个问题收尾:连接进内核了吗?最终走了哪个出站?新连接是否使用了预期模式?这三点确认后,再决定是修正规则、调整接管方式,还是更换节点。日常保留规则模式,排查时短暂使用全局或直连,通常比反复重装客户端更容易定位原因。