搜索 K
Appearance
先说结论:90% 的人配的所谓"自动切换",其实是"被动补救"而不是"主动容灾"。
绝大多数教程只教你写 type: url-test 就完事,结果真到用时,节点挂了浏览器还在转圈十几秒才切走。原因有三个:一是健康检查间隔默认太长(不少客户端默认 300s 起步),二是 tolerance 与 expected-status 没调,三是策略组嵌套层级错误,导致 fallback 探测的其实是"已被污染的中间组"。
这篇指南会从 BGP 路由收敛、TCP 握手超时、健康检查并发模型三个层面,把 Fallback 与 URL-Test 的真实行为讲清楚,再给你一套可直接抄的 永不掉线策略组配置。目标很明确:节点断线,用户侧 1–3 秒内无感换下一个。
TL;DR
fallback + DIRECT 兜底;url-test + tolerance: 60 + lazy: false;fallback 外层套 url-test 内层,双层防护;interval 调到 30s 以下,那是给自己 DDoS,还可能被机场判滥用。| 故障层级 | 物理表现 | 客户端可观测信号 |
|---|---|---|
| 传输层 | 公网 BGP 撤路由 / IX 抖动 | TCP SYN 无响应,握手超时 |
| 会话层 | TLS 握手被中间设备重置 | curl 报 Connection reset by peer |
| 应用层 | 落地被墙、DNS 污染、出口 IP 被封 | HTTP 返回 403 / 超时,但 TCP 通 |
关键认知:url-test 测的是应用层可达性(默认打 generate_204),而 fallback 判的是"能不能拿到预期状态码"。所以如果你的节点 TCP 通但 HTTP 被 RST,fallback 一层就能救你;如果只做了 tcping 判断,那就白搭。
url-test(并发择优):内核在 interval 周期内对所有成员并发发起健康检查,取 RTT 最小者。加入 tolerance 后,只有当新节点比当前节点快出该阈值才切换,避免抖动引起的频繁跳变。fallback(顺序降级):按数组顺序依次探测,第一个通过检查的立即胜出,后续成员不再探测。这就是它比 url-test 更适合容灾的原因——它是"主备"语义,不是"择优"语义。两者共用的健康检查三件套:
url: "http://www.gstatic.com/generate_204" # 探测目标
interval: 300 # 探测周期(秒),最小建议 120
timeout: 3000 # 单次探测超时(毫秒)
expected-status: 204 # 预期返回码,不符即判死
lazy: false # false=无条件后台探测这里有个 90% 教程不会讲的坑:lazy: true 时,内核只在有实际流量经过该组时才触发探测。你以为它在后台盯着,其实它睡着了。容灾场景必须写 lazy: false。
一台被超售到 300% 的节点,TCP 依然能建连、generate_204 依然能秒回——因为那只是个 204 字节的空响应。但一旦你拉 4K 视频,带宽被挤到 200Kbps。这就是"延迟 30ms 但油管转圈"的根因,也是下文的"伪解锁"避坑重点。
| 指标 | Fallback | URL-Test | Select | Load-Balance |
|---|---|---|---|---|
| 切换语义 | 主备降级 | 延迟择优 | 手动 | 分流哈希 |
| 探测模型 | 顺序串行 | 并发 | 无 | 无(除非挂 health-check) |
| 宕机切换延迟 | ≈ timeout + 1 次重试 | ≈ 1 个 interval 周期 | 人工介入 | 依赖 health-check |
| 是否防抖 | 天然防抖 | 需 tolerance | — | — |
推荐 interval | 120–180s | 300s | — | 300s |
推荐 timeout | 2000ms | 3000ms | — | 3000ms |
lazy 建议 | false | false | — | true 可接受 |
| CPU 开销 | 低(串行) | 中(N 并发) | 无 | 无 |
| 流量开销/节点/天 | ≈ 5.7MB | ≈ 2.9MB | 0 | 0 |
| 适用规模 | 3–8 节点 | 5–30 节点 | 任意 | 20+ 节点 |
流量开销按
interval: 300s、单次 500B 估算:86400/300 × 500B ≈ 144KB,叠加 TLS 握手开销量级在 MB 级。别小看它,超售节点上这部分也算你的倍率。
proxy-groups:
- name: "🚀 节点选择"
type: select
proxies: ["♻️ 自动优选", "🛡️ 永不掉线", "DIRECT"]
# 内层:延迟择优
- name: "♻️ 自动优选"
type: url-test
url: "http://www.gstatic.com/generate_204"
interval: 300
tolerance: 60
timeout: 3000
expected-status: 204
lazy: false
proxies: ["香港 01", "日本 01", "新加坡 01", "美国 01"]
# 外层:主备降级 + 直连兜底
- name: "🛡️ 永不掉线"
type: fallback
url: "http://www.gstatic.com/generate_204"
interval: 150
timeout: 2000
expected-status: 204
lazy: false
proxies: ["♻️ 自动优选", "DIRECT"]逻辑拆解:外层 fallback 只探测"自动优选组是否健康",一旦内层全军覆没,立刻降级 DIRECT。用户侧的体感是:某条线断了 → 内层 url-test 无声换线 → 全断了 → 直连保底。
机场故障时,最怕的是"整个订阅全灭"。可在 fallback 首位塞一个指向本机其他代理端口的节点,实现"上游挂了走备用上游"。
| 人群 | 推荐组合 | 理由 |
|---|---|---|
| 纯小白 / 手机党 | 单个 url-test + tolerance: 100 | 配��简单,够用 |
| 远程办公 / 会议党 | fallback(专线节点优先) | 会议对断流零容忍,宁可慢不可断 |
| 4K 流媒体党 | url-test + 高带宽专线节点 | 带宽优先于延迟 |
| 跨境电商 / 多账号 | select 手动 + 分组隔离 | 避免 IP 随机跳变触发风控 |
| 自建 VPS 用户 | fallback + 多地域自建 | 完全可控,成本最优 |
对跨境办公党,链路类型的优先级远高于节点数量:IEPL/IPLC 专线走的是内网专线,不经过公网出口,晚高峰丢包率通常能压在 < 1%,这是普通中转节点做不到的。像光速云这类以 IEPL 内网专线为主力的服务商,在"会议不掉线"这个场景上的优势是结构性的,不是玄学。
Clash Verge Rev / Mihomo Party:内置配置 merge 或 override 文件,不要直接改订阅 YAML——机场推订阅时会覆盖你的策略组。正确做法是在 profiles/xxx.yaml 同级维护 Merge.yaml,用 prepend-rules / prepend-proxy-groups 注入。
Shadowrocket:iOS 端不支持 expected-status,只认 HTTP 200/204。建议把探测 URL 换成 http://cp.cloudflare.com/generate_204,国内可达性更好,避免因探测目标本身被墙导致"全员判死"。
sing-box:对应功能是 urltest(带 tolerance 与 interrupt_exist_connections)和 selector。注意 sing-box 没有原生 fallback,用 selector + 多个 urltest 模拟即可。
通用三坑:
proxy group loop,整份配置失效。# ① 链路质量:看丢包落在第几跳
mtr -rwzbc 100 1.1.1.1
# ② 代理链路 RTT 分解(connect / TLS / 总耗时)
curl -o /dev/null -s -w "connect=%{time_connect}s tls=%{time_appconnect}s total=%{time_total}s\n" \
-x socks5h://127.0.0.1:7890 https://www.gstatic.com/generate_204
# ③ 触发内核手动健康检查(Mihomo 外部控制 API)
curl -s -H "Authorization: Bearer YOUR_SECRET" \
"http://127.0.0.1:9090/proxies/AUTO/delay?timeout=5000&url=http://www.gstatic.com/generate_204"TCP 层单独验证:
tcping -x 5 -t 2 节点域名 443| 现象 | 抓包特征 | 根因 | 处置 |
|---|---|---|---|
| 切换要等 10s+ | 探测包间隔 = interval | interval 过大 | 降到 120–180s |
| 频繁来回跳 | RTT 曲线呈锯齿 | tolerance = 0 | 设 50–100ms |
| 全员判死 | 所有探测 403/超时 | 探测 URL 被墙 | 换 gstatic/cp.cloudflare |
| TCP 通但 HTTP 断 | SYN-ACK 正常,随后 RST | 落地被 RST | 换协议/换节点 |
| 延迟极低但打不开网页 | 探测 204 秒回,大包丢 | 严重超售 | 该换机场了 |
| 只有 IPv6 环境异常 | AAAA 记录解析失败 | DNS 泄漏/未禁 v6 | 关 v6 或加 nameserver-policy |
| 宣传话术 | 真实性判断 | 验证方法 |
|---|---|---|
| "IPLC 专线" | 多为中转伪装 | mtr 看是否全程内网跳 |
| "延迟 10ms" | 通常是与入口机房的距离 | 实测 generate_204 而非 ping |
| "解锁 Netflix 全区" | 常见"伪解锁"(仅首页可开) | 实播 5 分钟以上 4K |
| "不限速不限量" | 超售信号 | 晚高峰 20:00–23:00 复测 |
| "x0.5 低倍率" | 可能限速到 20Mbps | 测速 + 倍率双验证 |
| "支持 ChatGPT" | 需原生 IP 且非机房段 | 看是否弹 Cloudflare 验证 |
核心原则:任何"自动切换"都救不了烂线路。策略组是容灾工具,不是性能增强工具。线路质量差,url-test 只会在几个烂节点里挑一个没那么烂的。
Q1:为什么我配了 url-test,节点挂了还是卡十几秒? 大概率是 lazy: true 或 interval: 300。加 lazy: false 并把 interval 下调到 120s。另外浏览器 DNS 缓存也会拖慢首次失败感知。
Q2:fallback 和 url-test 能嵌套吗?会��会报错? 可以,且是官方推荐用法。但注意不能循环引用——A 组引用 B 组,B 组又引用 A 组会直接启动失败。
Q3:健康检查会不会消耗我的流量倍率? 会。generate_204 单次约 500B,但叠加 TLS 握手,一天累计在 3–6MB/节点。30 个节点的订阅一天能跑掉 150MB。把 interval 设成 300s 是这个原因。
Q4:tolerance 设多少合适? 移动端 100ms(网络抖动大),桌面端 50–60ms。设 0 会导致节点间反复横跳,体感更差。
Q5:为什么自动优选总选到美国节点而不是香港? 检查你的探测 URL。如果目标域名在港区被限速或有特殊路由,RTT 会虚高。换成 cp.cloudflare.com/generate_204 复测。
Q6:公共 DNS 应该配哪个? 别用运营商 DNS。推荐 https://1.1.1.1/dns-query 或 https://dns.google/dns-query 走 DoH,并配合 nameserver-policy 给国内域名分流。
Q7:有没有必要上 load-balance? 除非你有 20+ 节点且追求聚合带宽,否则不建议。哈希分流会导致同一网站 IP 频繁变化,反而更容易触发风控。
结语:策略组配置的本质,是把"人工排障"转化为"内核自动化决策"。花 20 分钟把 fallback + url-test 的双层结构搭好,interval 与 tolerance 调准,你就能把 90% 的"突然断网"消灭在用户察觉之前。剩下的 10%,交给一条真正稳的专线。
标签:#Clash配置 #Mihomo #Fallback策略组 #URL-Test #自动切换 #容灾策略 #跨境网络 #机场避坑 #AirPick