先分清策略组、节点与代理规则
Clash 与采用 mihomo 内核的 Clash Verge Rev 会把代理节点组织进策略组,再由规则决定某一条连接应交给哪个策略组。策略组不是新的代理服务器,也不会改变节点原有的协议、传输方式或出口位置。它负责的是“从组内成员中如何选出本次连接使用的成员”。
例如,规则可以把视频网站域名交给“流媒体”组,把办公域名交给“稳定线路”组,把其余流量交给“默认代理”组。每个组内部又可以使用不同类型:url-test 根据探测结果倾向选择延迟更低的可用成员,fallback 按配置顺序使用第一个可用成员,load-balance 则把不同连接分配给多个可用成员。
因此,三者的差异不能只用“哪个速度快”概括。选择时至少要核对四个维度:
- 成员选择依据:按照延迟、固定优先级,还是分配算法选择。
- 故障后的行为:重新测速、顺序后移,还是继续在其余成员之间分配。
- 出口一致性:同一目标或同一会话是否需要尽量维持相同出口地址。
- 设备成本:定时探测会消耗少量网络请求、电量和后台资源,移动设备尤其需要合理设置间隔。
健康检查测到的是什么
自动策略通常会访问配置中的测试地址,并在设定的时间间隔内更新可用性或延迟结果。常见测试地址返回一个很小的 HTTP 响应,用于判断 DNS、TCP、TLS 和代理链路能否完成一次请求。该结果能反映基本连通性,但不能等同于所有网站的实际下载速度。
测试目标的位置、节点到目标站点的路由、短时拥塞以及运营商网络都会影响结果。某节点对测试地址延迟最低,不代表它访问另一个地区的业务服务也一定最快。若特定服务有明确的区域和稳定性要求,更合适的做法是先按用途筛选节点,再在较小范围内使用自动策略。
url-test:按探测延迟选择可用成员
url-test 会对组内成员执行连通性测试,并在可用成员中选择探测延迟较低的一项。它适合成员功能相近、出口区域相同,而用户主要关心交互延迟的场景。例如,同一地区有多条普通线路时,可以先用 url-test 自动完成基础筛选,减少频繁手动切换。
一个常见配置结构如下。字段支持情况与具体内核版本有关,导入前应以当前 mihomo 配置文档和客户端日志为准:
proxy-groups:
- name: 自动选择
type: url-test
proxies:
- 节点-A
- 节点-B
- 节点-C
url: http://www.gstatic.com/generate_204
interval: 300
tolerance: 50
lazy: true
interval 表示测试间隔,通常以秒为单位。间隔过短会增加后台探测频率,却未必改善体验;间隔过长则可能无法及时识别线路状态变化。桌面常驻设备可以根据网络波动设置为数分钟,移动设备则可适当延长。
tolerance 用于减少延迟差异很小时的频繁切换。假设当前成员延迟为 95 毫秒,另一个成员测试为 80 毫秒,两者差距较小,继续保留当前成员往往比立刻切换更稳定。容差并非越低越好;设置为零可能让轻微的测量抖动反复改变选中项。
lazy 开启后,内核可在策略组实际被使用时再进行相应测试,有助于减少长期未使用策略组的后台请求。不过,惰性检查的具体触发和缓存行为取决于内核实现,判断结果时应以日志和客户端显示的最后测试时间为准。
url-test 的适用与限制
- 适合网页浏览、代码仓库访问和需要较低响应时间的日常连接。
- 适合同区域、同用途、质量接近的一组节点,不适合把功能差异明显的出口混在一起只按延迟选择。
- 探测延迟不直接代表带宽。大文件下载更受出口带宽、服务端限速和长时间拥塞影响。
- 选中项改变后,新连接可能使用新的出口地址。对出口一致性敏感的登录会话需要谨慎。
fallback:按顺序使用第一个可用成员
fallback 的核心是优先级,而不是比较谁的延迟最低。内核会检查组内成员是否可用,并优先选择列表中排在前面的可用项。首选成员不可用时,才会使用后续成员;首选成员恢复后,后续新连接通常会重新回到优先级更高的成员。
proxy-groups:
- name: 稳定线路
type: fallback
proxies:
- 主线路
- 备用线路-一
- 备用线路-二
url: http://www.gstatic.com/generate_204
interval: 300
lazy: true
这种逻辑特别适合线路之间存在明确等级的情况。例如,主线路出口固定、兼容目标服务且长期稳定,备用线路只在主线路故障时启用。即使备用线路的探测延迟偶尔更低,fallback 也不会因此越过仍然可用的主线路。
“可用”需要结合测试地址理解。测试成功只能证明节点可以访问该测试目标,不能保证所有目标服务都能访问。如果主线路能正常返回连通性测试,但某个业务域名受到路由、区域或服务端策略影响,策略组可能仍把主线路视为可用。此时应调整业务规则、拆分策略组或使用更有代表性的测试目标,而不是单纯缩短检查间隔。
fallback 更适合哪些任务
远程办公、固定区域服务、家庭网关和长时间运行的设备通常更看重“首选线路不变,故障时才后移”。这类需求与 fallback 的顺序语义一致。配置时应把真正希望长期使用的成员放在最前面,并确保备用成员具备相同的业务访问能力。
如果列表顺序没有明确含义,所有成员都可随意替换,那么 url-test 往往更贴近日常自动选择需求。反过来,如果用户希望手动决定当前节点,则应使用 select 类型,而不是期待 fallback 记住一次临时选择。
load-balance:把连接分配到多个可用成员
load-balance 不以选出唯一“最快节点”为主要目标,而是按照策略把不同连接分配给组内多个可用成员。它适用于大量彼此独立的请求、并发下载任务或多设备共享网关,但不能把一条已经建立的单连接带宽直接叠加为多个节点带宽。
proxy-groups:
- name: 并发分配
type: load-balance
proxies:
- 节点-A
- 节点-B
- 节点-C
url: http://www.gstatic.com/generate_204
interval: 300
strategy: consistent-hashing
常见的 consistent-hashing 会依据目标信息进行一致性映射,让相同或相近目标在成员列表稳定时倾向使用同一成员。这有助于减少同一站点在连续请求间频繁改变出口。成员故障或列表变化时,一部分映射仍会调整,因此它不是永久固定出口。
round-robin 则更接近轮流分配新连接。它能让成员获得更均匀的连接机会,但同一应用访问多个域名或建立多条连接时,可能出现不同出口地址。具体可用的 strategy 值会随 Clash 分支和 mihomo 版本变化,使用前应查看当前内核文档,不能把其他实现的字段直接复制进配置。
负载均衡不等于单连接聚合
浏览器下载一个文件时,如果服务端只建立单条连接,该连接通常只经过一个成员。只有下载器、浏览器或应用建立多条独立连接,并且这些连接被分配到不同成员时,整体吞吐才可能利用多条线路。最终速度仍受本地网络上限、节点限速、目标服务器和协议行为影响。
负载均衡还会带来出口一致性问题。部分网站会把短时间内频繁变化的来源地址视为异常,登录状态、验证码频率或区域内容也可能受到影响。对于此类服务,可以通过规则把域名交给 fallback、url-test 或固定的 select 组,而把静态资源、软件更新等并发请求交给负载均衡组。
UDP 流量同样需要关注会话映射和节点支持情况。语音、游戏或 QUIC 连接对路径变化较敏感,不应仅为了“均衡”而让相关流量在出口之间频繁变化。配置后应使用实际应用测试丢包、延迟抖动与重连情况,而不是只看健康检查数值。
按设备与场景选择策略组
桌面日常浏览:优先考虑 url-test
Windows、macOS 或 Linux 桌面设备通常会同时处理网页、代码下载和即时通信。如果节点来自同一区域、访问能力接近,可以使用 url-test,并设置合理容差避免抖动。对于必须固定区域或需要稳定出口的域名,再通过规则分流到单独的 fallback 或手动选择组。
远程办公与固定业务:优先考虑 fallback
企业系统、远程桌面、管理后台和长期登录服务更重视可预测性。把最符合要求的线路放在第一位,再按实际可靠程度排列备用成员,比单纯按毫秒延迟排序更合适。备用成员应事先验证目标服务、DNS 解析和 UDP 支持,不能等主线路故障后才发现备用线路不兼容。
家庭网关与多设备并发:谨慎使用 load-balance
路由器或旁路网关同时承载多台设备时,连接数量较多,负载均衡更容易体现连接分配作用。建议使用规则把对出口一致性敏感的服务单独分组,再让系统更新、静态资源和普通并发请求进入 load-balance。网关硬件性能有限时,还要观察健康检查、TUN 转发和大量连接跟踪产生的资源占用。
移动设备:延长测试间隔并缩小成员范围
笔记本和移动终端会在 Wi-Fi、热点及蜂窝网络之间切换。网络环境变化本身就会导致探测结果失效,过于频繁的健康检查意义有限。可以减少自动组中的成员数量、延长间隔,并启用适当的惰性检查。若设备只偶尔使用代理,手动选择组也可能比复杂自动策略更直观。
TUN 模式不改变策略组语义
TUN 模式负责接管更多系统流量,包括部分不遵循系统代理设置的程序;它不会把 url-test 变成负载均衡,也不会改变 fallback 的成员顺序。流量进入 mihomo 后,仍然按照规则匹配到策略组,再由策略组选择成员。
启用 TUN 后连接范围扩大,DNS、局域网流量和 UDP 应用也可能进入内核,因此策略组配置问题会表现得更明显。排查时要区分“流量是否被 TUN 接管”“规则命中了哪个策略组”和“策略组最终选中了哪个成员”三个阶段。
策略组未按预期切换的排查顺序
-
确认实际运行的配置。
订阅更新后可能生成新的策略组,配置覆写也可能改变组名、成员和测试参数。先在 Clash Verge Rev 的配置页确认当前启用配置,再核对运行中的策略组内容。
-
查看规则命中结果。
连接没有进入目标策略组时,调整组内算法不会产生效果。打开连接或日志页面,确认域名、目标地址、规则类型以及最终命中的策略名称。
-
检查健康测试状态。
观察各成员的最后测试时间、延迟与可用状态。全部超时通常需要检查测试地址、DNS、节点本身和本地网络;只有个别成员失败,则应单独验证对应线路。
-
核对名称与缩进。
YAML 对缩进敏感,
proxies中的名称还必须与节点或其他策略组名称准确对应。名称包含特殊字符时可使用引号包裹,避免解析产生歧义。 -
使用新连接复测。
关闭测试应用中的现有会话,或等待连接结束后重新访问。只刷新界面上的策略状态,不能让所有已建立连接立即迁移。
-
区分 DNS 与代理故障。
域名无法解析时,策略组可能尚未获得可连接的目标。应先检查 DNS 日志、nameserver 配置和劫持设置,再判断节点选择是否异常。直接使用 IP 能连接而域名失败,通常更值得先排查解析链路。
三类策略的快速结论
- 需要自动选择低延迟成员:使用
url-test,并通过容差减少频繁切换。 - 需要固定主线路与顺序备用:使用
fallback,按真实业务优先级排列成员。 - 需要把大量独立连接分散到多个成员:使用
load-balance,同时处理出口一致性问题。 - 需要用户明确指定节点:使用
select,不要用自动策略模拟手动控制。
实际配置可以组合使用:顶层策略组提供手动选择,内部再放入自动测速组、故障转移组和负载均衡组。规则只引用具有明确用途的组名,组内成员保持同类,测试地址与间隔则根据设备和业务调整。这样既方便在 Clash Verge Rev 中查看状态,也能在出现故障时快速定位是规则、健康检查还是节点本身的问题。