Clash 策略组 url-test、fallback 与 load-balance 怎么选
逐一拆解三种自动策略组的选路逻辑、测速参数 interval 与 tolerance 的含义,并给出不同使用场景下的配置写法对照。
1. 先区分:最低延迟、优先级与连接分配
三种策略组都能容纳多个代理节点,但解决的问题不同。url-test 依据探测延迟自动选择;fallback 按列表顺序选择可用节点;load-balance 按分配算法把不同连接交给多个可用节点。选组前,先明确需要“自动择优”“主备切换”,还是“分散连接”。
| 类型 | 主要依据 | 适用需求 | 需要注意 |
|---|---|---|---|
url-test |
健康检查测得的延迟 | 日常浏览、自动选择低延迟节点 | 探测快不等于下载带宽大 |
fallback |
节点顺序与可用状态 | 固定主线路、备用线路接替 | 不会因为备用节点更快就主动择优 |
load-balance |
连接分配策略与可用状态 | 多节点分担不同目标或连接 | 不是单连接带宽叠加 |
本文配置以使用 mihomo 内核的客户端为基准。旧版 Clash 与不同分支对扩展字段的支持可能不同,尤其是负载均衡算法。先在客户端“关于”或内核信息中确认内核名称,再保存并检查配置加载结果;不要仅凭客户端名称判断兼容性。
2. url-test:按探测延迟选择,使用 tolerance 减少抖动
url-test 适合没有固定出口要求的日常流量。内核通过各候选节点访问测试地址,记录探测结果,再依据可用性、延迟及切换容差选择出站。它测量的是一次特定 HTTP 请求的耗时,不是 ICMP ping,也不是持续下载测速。
基础配置:300 秒探测,50 毫秒容差
以下片段用于合并进现有配置。示例中的“香港 01”“香港 02”“日本 01”必须已经存在于 proxies 中,并与实际节点名称逐字一致;若使用订阅节点池,后文给出 use 的写法。
proxy-groups:
- name: 自动低延迟
type: url-test
proxies:
- 香港 01
- 香港 02
- 日本 01
url: https://www.gstatic.com/generate_204
interval: 300
tolerance: 50
lazy: false
interval: 300:周期性探测间隔为 300 秒,即 5 分钟,不是 300 毫秒。tolerance: 50:切换容差为 50 毫秒,用于避免延迟只有小幅变化时频繁换节点。lazy: false:关闭懒惰探测,使未被使用的组也能按周期更新健康状态;代价是更多探测请求。
例如,当前节点测得 110 毫秒,另一节点为 95 毫秒,差距只有 15 毫秒。设置 50 毫秒容差后,不应把这次差异理解为“必须切换”。如果候选节点降到 45 毫秒,改善幅度达到 65 毫秒,才更符合切换条件。这里的数值是参数解释示例,不是线路实测;实际结果还受探测时机、当前节点状态与内核实现影响。
延迟最低,为什么视频仍然卡顿?
小体积探测请求不能代表高峰期吞吐量。节点可能在测试地址上响应很快,却对视频服务限速,或者到目标站点的路径拥塞。遇到这种情况,应同时比较实际业务表现与连接日志,而不是把 interval 从 300 改成 5,试图靠频繁测速提高带宽。
如果低延迟节点在两个地区之间反复切换,登录站点可能观察到出口变化。可以适当提高 tolerance,或者把同一地区的节点组成独立组。需要长期固定出口的业务,则更适合手动选择或明确的主备结构。
3. fallback:按节点顺序建立主备关系
fallback 的关键是顺序。列表中的第一个可用节点具有最高优先级;它不可用时,才继续尝试后面的候选节点。主节点在健康检查中恢复可用后,后续选路可以重新回到优先级更高的节点,因此它不是“切换到备用后永远留在那里”。
proxy-groups:
- name: 主备线路
type: fallback
proxies:
- 香港 01
- 香港 02
- 日本 01
url: https://www.gstatic.com/generate_204
interval: 60
lazy: false
在这个例子中,即便“香港 01”为 180 毫秒、“香港 02”为 60 毫秒,只要前者被判断为可用,仍然优先使用“香港 01”。因此,把一条较慢但稳定的线路放在第一位是有效的主备配置,不是测速失灵。
切换时间不是固定的 60 秒
interval: 60 只规定周期性探测的间隔,不能当作故障恢复的时间承诺。故障发生在两次探测之间,可能需要等待下一次检查;单次检查本身也需要时间。连接失败触发的额外检查与相关参数,还会因内核版本和配置而不同。
- 把业务优先使用的节点排在最前,不要按测速结果随意重排列表。
- 主备节点尽量避免完全共享同一故障点;相同上游故障可能让全部候选同时失效。
- 主节点失效后,已有 TCP 连接可能中断,需要应用重连;策略组不会迁移既有连接。
4. load-balance:分配不同连接,不叠加单连接速度
load-balance 会在可用候选之间进行选择,但不把一个 TCP 连接拆到多个代理节点上。单线程下载通常仍由一个出口承担;多连接下载可能使用不同节点,也受下载器、服务器、连接复用与分配算法影响,不能据此保证总速度成倍增长。
consistent-hashing:让相同目标尽量使用相同出口
proxy-groups:
- name: 多线分担
type: load-balance
proxies:
- 香港 01
- 香港 02
- 日本 01
url: https://www.gstatic.com/generate_204
interval: 300
lazy: false
strategy: consistent-hashing
consistent-hashing 根据目标地址进行一致性哈希分配,使相同目标尽量落在同一个节点上。可用节点集合变化时,映射仍可能改变。它适合分散不同目标的访问,但不是“整个浏览器永远固定一个出口”:同一页面可能调用登录、图片、接口等多个域名。
round-robin:轮询分配新连接
将上例的 strategy 改为 round-robin,即采用轮询方式分配连接。轮询不等于按字节均分,也不会自动依据剩余流量配额分配。一个长时间下载连接与一个很快结束的网页连接,在流量体积上可能相差很大。
登录、支付或对出口变化敏感的服务,优先使用固定节点或单独的稳定策略组。已有 HTTP/2 长连接可能承载很多请求,因此也不能通过连续刷新几次网页,就断言轮询没有生效。应在连接面板检查新建连接使用的实际节点。
5. interval、tolerance 与节点池:配置边界
| 字段 | 含义 | 使用建议 |
|---|---|---|
url |
健康检查的 HTTP 测试地址 | 选择稳定、响应体小的目标;不同组比较时保持一致 |
interval |
探测间隔,单位为秒 | 日常可从 300 秒开始,主备需求可按成本缩短 |
tolerance |
url-test 的切换容差,单位为毫秒 |
可从 50 毫秒开始,不用于定义主备优先级 |
lazy |
是否在组未使用时避免周期性探测 | 需要持续更新备用组状态时显式设置为 false |
strategy |
load-balance 的分配算法 |
明确选择一致性哈希或轮询,不与测速容差混用 |
proxies 与 use 不要混淆
proxies 引用节点或其他策略组的名称;use 引用 proxy-providers 中定义的节点提供者。假设现有配置已经定义名为“订阅节点池”的提供者,可以这样让自动组使用它:
proxy-groups:
- name: 订阅自动选择
type: url-test
use:
- 订阅节点池
url: https://www.gstatic.com/generate_204
interval: 300
tolerance: 50
lazy: false
这不是一份可独立运行的完整配置,前提是“订阅节点池”确实存在。提供者的 interval 控制节点资源更新间隔,提供者中 health-check.interval 控制其健康检查间隔,组内 interval 则控制策略组的探测周期。几个同名字段处于不同层级,不能互相替代。
节点数量也影响成本。若一个组包含 30 个候选,每 300 秒对全部候选执行一轮探测,则每小时约有 360 次探测请求;实际次数受懒惰探测、额外检查等机制影响。把间隔缩短到 30 秒,会显著增加请求量,却不一定改善日常体验。
6. 接入规则与客户端:先验证组,再验证流量
策略组创建成功后,还需要让规则或上层手动选择组引用它。下面的组合便于比较三类行为;合并时应把这些组加入同一个 proxy-groups 列表,而不是在 YAML 顶层重复声明多个同名键。
proxy-groups:
- name: 代理出口
type: select
proxies:
- 自动低延迟
- 主备线路
- 多线分担
- DIRECT
rules:
- DOMAIN-SUFFIX,github.com,代理出口
- MATCH,代理出口
这个片段依赖前文三个自动组已经存在。它只演示引用关系,不是一套国内外分流方案:最后的 MATCH 会把此前未匹配的请求交给“代理出口”。已有规则应按实际用途保留,别为了测试把原来的直连规则全部覆盖。
- 备份配置。先导出当前配置;远程订阅更新可能覆盖直接修改的内容,需要持久保留时使用客户端支持的覆写、合并或扩展配置功能。
- 加载配置。检查日志是否出现未知组名、未知节点名或 YAML 缩进错误。缩进使用空格,不使用制表符。
- 切换规则模式。确认客户端当前使用“规则”模式;在“全局”模式下,规则列表不是验证分流路径的依据。
- 选择入口组。在“代理”页面找到“代理出口”,分别选择三个自动组,再执行客户端提供的“测速”或“延迟测试”。按钮名称随客户端而异。
- 检查连接。打开“连接”页面,确认请求命中的规则、策略链及最终节点。手动测速是即时测试,不等同于完整观察周期性健康检查。
验证主备时,可在备份后的测试配置中暂时移除首选节点,重新加载后观察下一候选是否接替。验证出口切换时应新建业务连接,避免浏览器连接池继续复用旧连接。涉及 TUN 模式的接管问题,可另行查看排查手册,先确认流量确实进入内核。
7. 按使用场景确定默认选择
- 日常网页与一般应用:先选
url-test,以 300 秒间隔、50 毫秒容差作为调试起点,再根据实际波动调整。 - 有固定首选线路:选
fallback,认真排列候选顺序;备用线路更低的延迟不会改变优先级。 - 多条线路承担不同访问:选
load-balance,先考虑consistent-hashing;确有轮询需求时再使用round-robin。 - 账号需要稳定出口:单独设置手动选择组与域名规则,不把这类请求混入频繁变动的自动组。
最终判断应落在“实际请求命中了什么规则、最终用了哪个节点”。延迟数字、组名中的“自动”字样以及系统代理开关,都不能替代这一步。先用少量候选验证逻辑,再扩展节点池,通常比同时修改测速间隔、DNS 与 TUN 设置更容易定位问题。