三种策略组的选择依据
Clash 的自动策略组解决的是“这条连接从哪个节点出去”,不是让每个应用都自动获得更高带宽。url-test 比较探测延迟,fallback 保持节点优先顺序,load-balance 将不同连接分配给可用节点。先确定需要低延迟、固定主备还是分散连接,再调整配置字段。
策略逻辑由内核运行。客户端负责导入订阅、展示测速结果和提交选择;不同客户端即使按钮名称相似,所用内核及支持的字段也可能不同。下面的 YAML 以 mihomo,也就是 Clash Meta 后续使用的内核名称,对应的配置能力为准。其他 Clash 内核是否接受相同字段,应以其配置文档与加载日志为准。
| 策略类型 | 选择依据 | 典型用途 | 注意事项 |
|---|---|---|---|
url-test |
健康检查延迟与切换容差 | 网页、交互请求的低延迟出口 | 延迟较低不代表下载带宽较高 |
fallback |
列表中靠前且可用的节点 | 固定主线路与备用线路 | 主节点仍可用时,不因备用更快而切换 |
load-balance |
分配策略与节点可用状态 | 多个任务、多个目标的连接分散 | 不把单条连接拆成多条线路叠加带宽 |
url-test:按探测延迟自动选择
url-test 通过各候选节点访问指定测试 URL,记录探测延迟,再从可用候选中选择出口。这里的“测速”是一次请求的延迟探测,不是持续下载测试。结果会受到本机网络、节点到目标站点的线路、DNS、连接建立及服务端响应等因素影响。
interval 与 tolerance 的分工
interval: 300:周期性健康检查的间隔为 300 秒,即 5 分钟。它不是连接超时时间。tolerance: 50:延迟切换容差为 50 毫秒。用于减少候选节点仅略快时的频繁改选。timeout: 5000:单次健康检查的超时上限为 5000 毫秒。超过上限的探测可能被判为失败。lazy: false:不因策略组闲置而暂停周期性健康检查,便于观察连续探测结果。
例如,假设当前节点测得 120 毫秒,另一节点测得 95 毫秒,两者只相差 25 毫秒,设置 50 毫秒容差时不应期待仅凭这点优势就改选。若另一节点降到 60 毫秒,差距达到 60 毫秒,才具备超过该容差的条件。以上数字用于解释配置,不是线路实测;最终选择还受节点存活状态与内核实现影响。
proxy-groups:
- name: 自动延迟
type: url-test
proxies:
- 香港-A
- 香港-B
- 日本-A
url: https://www.gstatic.com/generate_204
interval: 300
timeout: 5000
tolerance: 50
lazy: false
测试地址应能通过每个候选节点访问,且响应体较小、行为稳定。示例 URL 用于连通性探测,并不代表它能反映所有网站的访问质量。若主要使用某个业务站点,应同时验证该站点的实际请求;不要把登录页、验证码页或大文件地址直接用作周期性探测目标。
fallback:按列表顺序保留主备线路
fallback 不以最低延迟作为主要目标,而是从候选列表中选择靠前且通过健康检查的节点。适合希望日常保留同一出口,仅在主线路失效时启用备用线路的场景。
proxy-groups:
- name: 主备线路
type: fallback
proxies:
- 香港-A
- 日本-A
- 香港-B
url: https://www.gstatic.com/generate_204
interval: 300
timeout: 5000
lazy: false
故障切换与恢复顺序
- “香港-A”通过检查时,优先使用它,即使“日本-A”的探测延迟更低。
- “香港-A”被判定不可用后,选择下一条可用的“日本-A”;它也不可用时,再检查“香港-B”。
- 后续健康检查确认“香港-A”恢复后,策略可重新优先选择它,后续连接可能回到主线路。
因此,fallback 表示按优先级选择,不等于“切到备用后一直留在备用”。如果业务要求人工确认后才回切,应使用手动 select 组管理出口,不能只依靠自动主备组实现这个流程。
故障也不会总在发生的同一秒被发现。仅考虑周期性检查时,线路可能在一次成功探测后立即断开,随后等待下一轮检查及超时判定。其他失败触发机制取决于内核配置,不能把 interval: 300 解读为即时切换承诺。
备用线路应尽量具有独立的故障来源。两个名称不同、实际共用同一上游出口的节点,可能同时失效。对重要任务,可分别检查本地接入网络、节点可用性与目标服务状态,避免把目标站点自身故障误判成主节点故障。
load-balance:分配连接而非合并带宽
load-balance 在可用节点之间分配连接。多个网页、下载任务或不同目标的请求可以落到不同出口,但一条既有 TCP 连接仍使用选定节点。浏览器显示的总下载速度是否提高,取决于任务并发、服务器限制以及各节点是否共享带宽。
proxy-groups:
- name: 分散连接
type: load-balance
proxies:
- 香港-A
- 香港-B
- 日本-A
url: https://www.gstatic.com/generate_204
interval: 300
timeout: 5000
lazy: false
strategy: consistent-hashing
consistent-hashing 与 round-robin
| strategy | 分配方式 | 适用边界 |
|---|---|---|
consistent-hashing |
按目标相关信息进行一致性哈希,使相同目标倾向于同一出口 | 希望减少同一站点跨节点访问时优先考虑 |
round-robin |
新连接在可用候选间轮换分配 | 适合可容忍出口变化的独立并发任务 |
一致性哈希不是永久绑定。候选节点数量或健康状态变化后,映射可能改变;域名是否可用、目标如何被识别,也会影响分配。一个页面还可能请求多个不同域名,因此“同一个页面”不等于“所有请求都使用同一个出口”。
mihomo 还提供 sticky-sessions 策略,用于按来源与目标相关信息保持一段时间的分配黏性。需要使用时,应确认当前内核支持并核对其行为;不要把扩展字段直接复制到未确认兼容性的旧内核配置里。
登录与长会话的出口安排
银行、支付、企业认证或对出口 IP 敏感的服务,更适合分流到固定节点或手动组。负载均衡可能让同一账户的不同连接使用不同公网地址,引起重新验证。即使采用一致性哈希,也应把相关域名作为一组检查,而不是只测试首页。
策略组接入规则与订阅覆写
定义组不等于流量已经进入该组。规则模式下,连接先按 rules 从上到下匹配,再由命中的规则指定节点或策略组。客户端的系统代理、TUN 与规则匹配属于不同层次:前两者决定流量怎样进入内核,策略组决定进入后的出口选择。
可以将三种自动组放进一个手动入口,在客户端选择需要的策略。下面片段以已经定义好的三个自动组为前提;组名可以自定,但引用必须一致,也不能让组之间形成循环引用。
proxy-groups:
- name: 出口选择
type: select
proxies:
- 自动延迟
- 主备线路
- 分散连接
rules:
- DOMAIN-SUFFIX,example.com,主备线路
- MATCH,出口选择
example.com 是用于演示规则结构的保留示例域名。这段规则说明特定域名可以固定交给主备组,其余连接再由“出口选择”处理;不是建议覆盖现有订阅的全部规则。MATCH 是兜底规则,应放在需要优先匹配的规则之后。
订阅更新后的配置保留
- 直接修改订阅下载得到的 YAML,下一次更新可能覆盖修改。先确认客户端是否支持持久化覆写或配置合并。
- 使用客户端覆写功能时,检查数组是整体替换、追加还是按名称合并。不同客户端的实现不能互相套用。
- 使用
proxy-providers时,策略组通常通过use引用提供器。提供器自己的健康检查与组的候选管理需要一并核对。 - 订阅端修改节点名称后,静态
proxies引用可能失效。更新后检查加载日志和组内候选列表。
通用字段与规则顺序可继续查阅 YAML 手册的策略组说明。涉及流量接入方式时,再对照 TUN 配置教程,不必为了更换策略组而同时改动所有网络设置。
自动切换异常的检查顺序
测速正常,但下载速度慢
先区分延迟和吞吐量。健康检查只请求一个小资源,无法测出晚高峰拥塞、持续传输限速或单连接带宽。固定同一个下载目标与测试时段,手动选择候选节点比较持续速度;不要单凭 80 毫秒和 100 毫秒的差异判断哪条线路下载更快。
节点已经断开,却没有切换
- 检查当前模式是否为规则模式,并在连接记录中确认实际命中的规则和最终出口。
- 确认应用流量确实进入 Clash。终端工具可能需要单独设置代理环境变量,并不一定遵循 macOS 系统代理。
- 检查
url是否通过节点测试、interval是否过长,以及组是否因懒检查而没有按预期持续探测。 - 重新建立一条测试连接,区分“新连接仍未切换”和“旧连接仍然保留”。
url-test 频繁改选
先记录多个检查周期的延迟变化,再调整容差。可以从 interval: 300 与 tolerance: 50 这样的起点观察,不必将间隔压到几秒。若候选节点只有轻微抖动,适当增加容差有助于减少改选;若测试地址本身不稳定,应先更换合理的探测目标。
所有节点同时显示不可用
优先检查测试 URL 的可访问性、DNS 解析、本地网络和订阅凭据,而不是立即重装客户端。用同一节点访问其他已知可用的小页面,再对比日志中的超时、解析失败或连接拒绝。所有候选同时失败,可能是共同依赖故障,而不是每条远端线路都同时中断。
配置验证与日常选用
网页浏览和交互请求可先用 url-test;有明确主线路、希望备用接管时使用 fallback;多个独立任务需要分散出口时再考虑 load-balance。单个账户需要稳定公网地址时,固定节点或手动选择通常更容易控制。
- 保存原配置。保留可以回退的副本,先只修改策略组,不同时调整 DNS、TUN 栈和全部规则。
- 确认配置已加载。在客户端日志中排除未知字段、节点名称不存在和组循环引用等错误。
- 验证实际出口。发起新请求,在连接记录里查看命中规则、策略链和最终节点,不只看组标题。
- 观察至少两个周期。设置 300 秒间隔时,给健康检查留出相应时间;手动测速只能说明当次结果。
- 受控测试备用。在可恢复的环境中模拟主节点不可用,再恢复,分别观察后续连接的切换与回切。
策略组配置的重点是让选择规则符合业务需求。延迟、可用性、出口稳定性和并发分配是不同指标;把它们分开验证,比反复点击测速或盲目缩短检查间隔更容易定位问题。