先分清两个开关:流量接管与代理模式
Clash 客户端里的「系统代理」「TUN 模式」和「规则、全局、直连」不是同一层设置。系统代理或 TUN 负责把流量送入 Clash 内核,代理模式负责决定这些已进入内核的连接接下来走代理节点、DIRECT 直连还是 REJECT 拒绝。只切换代理模式,不会自动开启系统代理;只开启 TUN,也不代表所有连接一定走远端节点。
以常见配置为例,HTTP 与 SOCKS 共用的 mixed-port 可能设为 7890,控制接口 external-controller 可能设为 127.0.0.1:9090。浏览器显式使用 127.0.0.1:7890,或者操作系统代理指向该端口后,请求才会进入内核。启用 TUN 后,更多未读取系统代理的应用、UDP 流量和部分命令行程序也能被接管。端口是配置值,不同客户端生成的实际数字可能不同,应以「设置」→「端口设置」或当前配置文件为准。
三种模式处理的是同一批已接管连接
- 规则模式 rule:逐条匹配配置中的 rules,根据命中的规则选择策略组、DIRECT 或 REJECT。
- 全局模式 global:跳过普通分流规则,将连接交给名为 GLOBAL 的全局策略入口,再使用其中选定的节点或策略组。
- 直连模式 direct:让已接管连接直接访问目标地址,通常不再经过远端代理节点。
这里的「跳过规则」需要注意边界。内核仍要完成连接接收、目标识别和 DNS 等基础工作,客户端自身也可能保留局域网绕过、进程排除或防回环逻辑。direct 因而不等于退出 Clash;若想彻底停止接管,应另外关闭系统代理和 TUN,必要时再停止内核。
规则模式:日常使用的默认选择
规则模式适合长期运行。它会从上到下检查规则,第一条命中的规则立即生效,后面的规则不再参与判断。一个典型目标是让局域网与国内站点直连,让指定域名或国外流量进入代理策略组,最后用 MATCH 接住未分类连接。
mode: rule
mixed-port: 7890
rules:
- DOMAIN-SUFFIX,example.com,Proxy
- DOMAIN-SUFFIX,cn,DIRECT
- GEOIP,CN,DIRECT
- MATCH,Proxy
这段示例中,访问 example.com 会先命中第一条并交给 Proxy;其他以 .cn 结尾的域名直接连接;仍未命中的中国大陆 IP 会由 GEOIP,CN 处理;最后剩余请求进入 Proxy。规则顺序不能随意交换。例如把 MATCH 放在最前面,下面的 DOMAIN-SUFFIX 与 GEOIP 就永远没有机会执行。
规则模式适用的具体场景
- 日常浏览:国内服务保持直连,外部服务按规则走代理,减少不必要的远端绕行。
- 视频与下载分流:为流媒体、游戏平台或大文件下载单独设置策略组,按业务选择节点。
- 局域网设备访问:让 192.168.0.0/16、10.0.0.0/8 等私有地址保持直连,避免访问路由器或 NAS 时被送往代理。
- 长期 TUN 接管:系统流量种类较多时,通过规则精确决定 TCP、UDP、域名与 IP 请求的出口。
使用订阅配置时,规则模式的效果取决于订阅提供的规则集与策略组。名称相似的两个配置,可能分别使用 GEOIP、GEOSITE、rule-providers 或大量 DOMAIN-SUFFIX,最终分流结果并不相同。遇到某个网站走错出口,应先在连接详情中查看命中的规则与策略,而不是直接认定 rule 模式失效。
规则命中异常的检查顺序
- 在「连接」页面搜索目标域名,确认实际命中的规则名称和出站策略。
- 检查策略组当前选择,确认规则指向 Proxy 后,Proxy 内部没有选成 DIRECT。
- 检查域名是否被提前解析成 IP;启用 fake-ip 与 redir-host 时,内核可见的目标信息可能不同。
- 检查规则顺序,尤其是 MATCH、FINAL、广泛的 DOMAIN-KEYWORD 和大范围 IP-CIDR。
- 更新远程规则集后重新加载配置,确认日志中没有 rule-provider 下载或解析错误。
全局模式:全流量验证与临时绕过规则
全局模式适合测试,不一定适合长期保持。切换到 global 后,常规业务规则不再决定出口,连接统一进入 GLOBAL 策略入口。用户还需要在 GLOBAL 中明确选中可用节点;如果该入口当前选中了 DIRECT,界面虽然显示全局模式,实际连接仍可能直连。
| 使用场景 | 推荐模式 | 观察重点 |
|---|---|---|
| 判断规则是否导致网站打不开 | 临时切到 global | 同一节点下能否立即恢复访问 |
| 检查指定节点的完整出口 | global | GLOBAL 是否选中目标节点 |
| 日常国内外混合访问 | rule | 域名、GEOIP 与兜底规则 |
| 判断代理节点是否引发异常 | direct | 直连网络能否访问目标 |
例如某网站在规则模式下超时,可以先记录当前节点,然后将模式切到 global,并在 GLOBAL 中选择同一个节点。如果全局模式恢复,通常说明节点本身可用,问题更可能来自规则命中、策略组指向或 DNS 分流。如果全局模式仍失败,再检查节点连通性、握手日志、UDP 支持和目标服务限制。
全局模式并不等于所有程序一定被代理
只有进入 Clash 的流量才受 global 控制。浏览器使用系统代理时会进入内核,但某些游戏、虚拟机、容器或自行建立网络栈的程序可能绕过系统代理。需要覆盖这些程序时,应检查 TUN 是否启动、操作系统是否授予管理员权限,以及客户端的进程排除列表。Android 上则要确认 VpnService 授权仍有效,且目标应用没有被「分应用代理」排除。
直连模式:定位代理影响,不是退出按钮
direct 模式让已进入 Clash 的新连接尝试从本地网络直接访问目标。它最适合做对照测试:同一设备、同一 DNS 环境下,切到直连后是否恢复;如果恢复,问题可能位于代理节点、策略组或远端链路;如果仍失败,则应继续检查本地网络、目标服务、DNS 和应用自身。
直连并不能让本地网络获得原本不可达的目标。如果运营商网络无法直接连接某个地址,direct 下仍会超时。它也不等于关闭 DNS 处理:当 DNS 请求由 Clash 的 nameserver 模块接管时,即使代理模式是 direct,域名解析仍可能经过配置中的本地或加密 DNS 服务器。
适合切到直连的三个时机
- 本地服务突然不可用:用于判断代理路由是否影响公司内网、校园网、NAS 或路由器后台。
- 下载速度对照:分别在 rule 与 direct 下测试同一国内镜像,观察远端绕路是否造成带宽下降。
- 节点故障排查:当多个节点均出现相同错误时,用 direct 判断问题是否其实来自目标站点或本地 DNS。
不要把 direct 当作关闭客户端的替代方案。系统代理仍可能指向 127.0.0.1:7890,TUN 虚拟网卡也可能继续运行,连接记录与 DNS 缓存仍由内核管理。需要恢复原始网络路径时,应依次关闭「设置」→「系统代理」、关闭「设置」→「TUN 模式」,再确认操作系统代理设置已复原。
切换模式后,为什么旧连接没有立刻变化
模式切换主要影响新建连接。已经建立的 TCP 会话通常会继续使用原出口,直到应用关闭连接、服务器断开或内核主动终止。HTTP/2、WebSocket、QUIC 和长连接应用尤其明显:页面刷新后可能复用原连接,看起来像模式没有切换。
切换后建议等待 3 至 10 秒,再重新发起请求。若结果仍未变化,可在客户端「连接」页面关闭对应连接,或者完全退出并重新打开目标应用。浏览器测试时,新建隐私窗口不一定足够,因为浏览器进程仍可能共享连接池;彻底关闭浏览器进程后再打开,结果更可靠。
DNS 缓存也会干扰对照结果
应用、操作系统和 Clash 内核都可能保存 DNS 结果。Windows 可在终端执行 ipconfig /flushdns 清理系统 DNS 缓存;macOS 不同版本的刷新机制不同,通常先重启目标应用与 Clash 内核更稳妥。使用 fake-ip 时,198.18.0.0/16 范围内的地址是内核映射结果,不代表网站真实服务器位于该网段。
测试同一个网站时,应同时记录模式、策略组节点、命中规则、目标域名、连接协议和耗时。例如 rule 下命中 DIRECT 耗时 42 ms,global 下经目标节点耗时 186 ms,这样的对照才有意义。只看网页主观打开速度,容易受到缓存、连接复用和内容分发网络节点变化影响。
客户端中如何切换,以及配置文件如何保存
不同图形客户端的入口名称略有差异,常见路径是侧栏「代理」或「Proxies」页面顶部的「规则 / 全局 / 直连」,也有客户端把它放在「设置」→「运行模式」。切换后应回到连接页面发起一次新请求,确认 mode 与实际出站一致。若客户端支持托盘菜单,也可从托盘的「代理模式」子菜单快速调整。
在 mihomo 或兼容 Clash 配置中,可以用 mode 字段设置加载配置时的默认模式:
mode: rule
可选值通常为 rule、global 与 direct。部分客户端会将运行时选择保存在自己的设置数据库中,并在下次启动时覆盖配置文件的 mode;因此手工编辑 YAML 后,应观察客户端重新加载时是否保留修改。订阅更新也可能替换当前配置,不宜直接把长期自定义内容只写进订阅生成文件。
通过控制接口切换 mihomo 模式
启用了 external-controller 的环境可以通过 REST 接口修改运行配置。下面示例假设控制地址只监听本机 127.0.0.1:9090,并且未配置 secret:
curl -X PATCH http://127.0.0.1:9090/configs \
-H "Content-Type: application/json" \
-d '{"mode":"rule"}'
将 rule 改为 global 或 direct 即可切换。若配置了 secret,请使用 Authorization: Bearer 密钥内容 请求头。控制接口不应直接暴露到公网;需要局域网管理时,应同时限制监听地址、防火墙来源和认证密钥。
一套可重复的模式排错流程
模式切换最有价值的用法是做受控对照,而不是随机来回点击。保持同一网络、同一目标和同一节点,按以下顺序检查,可以较快定位问题所在。
- 确认系统代理或 TUN 已开启,并在连接列表中看到目标请求。
- 使用 rule 发起新连接,记录命中规则、策略组和具体节点。
- 切换到 global,在 GLOBAL 中选择刚才同一个节点,关闭旧连接后重试。
- 切换到 direct,再次关闭旧连接并测试本地网络直达结果。
- 比较三次日志中的 DNS 结果、连接协议、握手错误和耗时。
- 测试结束后恢复 rule,确认策略组选择与 TUN 状态符合日常设置。
| Rule 结果 | Global 结果 | Direct 结果 | 优先检查 |
|---|---|---|---|
| 失败 | 成功 | 失败 | 规则命中与策略组指向 |
| 失败 | 失败 | 成功 | 代理节点、协议与远端链路 |
| 成功 | 成功 | 失败 | 属于正常的代理可达场景 |
| 全部失败 | 全部失败 | 全部失败 | 流量接管、DNS、本地网络或目标服务 |
最终选择可以保持简单:日常使用 rule;需要验证某个节点或绕开复杂规则时临时用 global;需要确认本地网络和代理链路谁在影响连接时用 direct。切换后始终检查 GLOBAL 的具体选择、关闭旧连接,并把系统代理与 TUN 当作独立开关处理,三种模式的判断就不会混在一起。