配置实践 · Clash 技术博客

Clash 自动选择节点怎么设置?url-test、fallback 与测速容差

url-test 追求可用节点中的低延迟,fallback 按主备顺序切换,两者解决的不是同一个问题。先确定你想要哪种自动,再设置检测地址、间隔和容差。

  • 策略组
  • url-test
  • fallback
本文目录

“自动”可能是追延迟,也可能是保主线路

url-test 和 fallback 都会做健康检查,但决策目标不同。url-test 比较候选节点的探测延迟,选择满足条件的较低结果;fallback 按配置顺序使用第一条可用节点,当前项失效才往后切。

前者适合一组同等节点中偏向较低延迟,后者适合“主线路优先、备用线路兜底”。如果只是想自己点节点,用 select;想把连接分摊到多条线路,则是 load-balance,不能拿 fallback 代替。

策略组先按意图选

type它怎么决定适合场景
select由用户手动选择排障、固定账号出口、重要长连接
url-test根据健康检查延迟选择同等级节点的日常自动选择
fallback按列表顺序选第一条可用项主备切换,优先级明确
load-balance按策略把连接分给多项用于并发分流,不负责故障转移

自动组只能在候选项里选择,坏名单不会自动变好

建立自动组前,先用 select 固定候选节点,各完成一次真实请求。协议不受当前内核支持、订阅已经失效或在本地网络完全不可达的节点,应先移出候选;否则健康检查会一直报错,日志也被无用结果淹没。

节点可以直接写进 proxies,也可以通过 use 引用 proxy-providers。provider 更新后新节点会进入候选范围,因此要留意名称过滤、地区筛选和空列表;组本身显示存在,不代表里面实际有项目。

候选列表具备的条件

  • 每个节点在固定选择下完成过真实请求
  • 节点名称能区分地区或线路,不是大批同名项
  • provider 当前更新成功且筛选后不为空
  • 重要账号需要固定出口时另留 select 组

测试 URL 决定“可用”是什么意思

健康检查会让每个候选节点访问 url 指定的地址。地址本身不稳定、在某些地区被拒绝,或必须登录,整组结果都会失真。通常选择稳定、响应很小、无需账号的 HTTPS 地址,例如返回 204 的探测页。

测试 URL 最好和日常访问内容接近,但不要使用带个人 token 的 API,也不要给第三方站点制造高频请求。同一个节点探测成功,只能说明这个 URL 在当时可达,视频、AI 流式回复和 UDP 仍要在对应应用里验证。

自包含的 url-test 结构
proxy-groups:
  - name: 自动选择
    type: url-test
    include-all: true
    url: https://www.gstatic.com/generate_204
    interval: 300
    tolerance: 80
    lazy: true

interval、tolerance、lazy 决定它会不会频繁折腾

interval
两次健康检查的间隔,单位为秒。太短会增加流量和服务端压力。
tolerance
url-test 的延迟容差,单位为毫秒。差距不明显时保留当前选择,可减少来回切换。
lazy
组没有被使用时减少或停止主动检查,适合不是一直使用的策略组。
timeout
某些配置可设单次探测等待时间。太短会把偶发慢响应当作不可用。

没有一组参数适合所有网络。家庭网络稳定但节点延迟接近时,可以用较长 interval 和适度 tolerance;移动网络频繁切换,也不应把间隔压到几秒,因为出口反复变化会中断登录和流式连接。

修改后观察一段真实使用。如果 Connections 中的节点几分钟内来回变化,而各候选只差几十毫秒,先增大 tolerance 或 interval,而不是继续增加节点。

fallback 的列表顺序就是主备优先级

fallback 不会因为第二条延迟更低就跳过去。只要第一条通过健康检查,它就继续使用第一条;第一条不可用,才选择后面的可用项。因此配置顺序应体现业务偏好,例如稳定主线在前、成本更高或地区不同的备用线在后。

完整定义主线与备用组,filter 关键词要按节点名称修改
proxy-groups:
  - name: 主线路
    type: select
    include-all: true
    filter: "(?i)主线"
    proxies: [DIRECT]

  - name: 同区备用
    type: select
    include-all: true
    filter: "(?i)同区备用"
    proxies: [DIRECT]

  - name: 异区备用
    type: select
    include-all: true
    filter: "(?i)异区备用"
    proxies: [DIRECT]

  - name: 主备线路
    type: fallback
    proxies: [主线路, 同区备用, 异区备用]
    url: https://www.gstatic.com/generate_204
    interval: 300
    lazy: true

主线路恢复后,fallback 会在后续健康检查中重新判断。切回时已有连接不一定迁移,新请求才更容易看到新出口;账号后台和长下载仍应考虑使用固定 select,避免出口变化影响会话。

地区内选快、地区间主备,可以用两层组表达

候选很多时,不必把所有节点塞进一个 url-test。可以为每个地区分别建立 url-test,再把这些地区组按优先级放进 fallback。这样“地区内挑延迟”和“地区间保主备”各做一件事,Connections 也能显示请求经过了哪些组。

层级越多,空 provider、循环引用和同名组越难发现。两层已经能表达目标就不要加第三层;每个下层组都应单独可用,再交给上层。

两层决策示例,地区关键词要匹配自己的节点名称
proxy-groups:
  - name: 香港自动
    type: url-test
    include-all: true
    filter: "(?i)香港|HK"
    url: https://www.gstatic.com/generate_204
    interval: 300
    tolerance: 80

  - name: 日本自动
    type: url-test
    include-all: true
    filter: "(?i)日本|JP"
    url: https://www.gstatic.com/generate_204
    interval: 300
    tolerance: 80

  - name: 地区主备
    type: fallback
    proxies: [香港自动, 日本自动]
    url: https://www.gstatic.com/generate_204
    interval: 300

验证 url-test 看选择过程,验证 fallback 看切换顺序

不干扰日常会话的验证方法

  1. 新建或使用独立测试组

    不要在正在下载、开会或登录重要账号时试切换。

  2. 手动触发一次健康检查

    记录每个候选的结果和当前选中项。

  3. 让浏览器走该策略组

    Connections 应显示上层组、下层节点和实际出口。

  4. 观察下一轮检查

    url-test 看容差内是否保持,fallback 看列表前项是否优先。

测试 fallback 时,可以把一条已经确认失效、且不含敏感信息的测试节点临时放在最前,只在独立组里观察它是否跳到第二项;完成后立即移除。不要通过断网、关系统代理或破坏生产配置来制造故障,那会同时改变太多变量。

自动组不工作,错误通常出在名单、探测或引用

组显示空白

检查 proxies / use 引用、provider 更新时间和节点筛选结果。

全部候选 Timeout

单独测试 health URL,再比较当前网络与真实节点请求。

url-test 一直在两条节点间切换

增加 tolerance 或 interval,并确认探测地址稳定。

fallback 总选第二项

第一项没有通过健康检查;查看它的具体错误而不是调顺序。

切换后账号频繁重新登录

把敏感会话放进固定 select 组,避免自动变更出口。

provider 更新后组突然为空

核对过滤表达式和新节点名称,旧缓存可能掩盖此前问题。

用真实请求判断自动组是否值得保留

把目标服务的规则指向自动组,连续完成几次网页、流式回复或下载。Connections 应显示预期的上层组和具体节点;url-test 不应因微小延迟差频繁跳动,fallback 应在主线路可用时保持第一项。

若健康检查全绿而原业务仍失败,固定当前节点重测,并回到协议、DNS 或目标服务。自动组值得保留的标准很简单:业务稳定,出口变化可以解释,主备顺序符合预期。只有探测页变绿,不算完成设置。

参考资料