代理组详解:select、url-test、fallback 怎么选
本文目录
订阅里动辄几十上百个节点,分流规则却不可能逐个点名——代理组就是中间那一层。它把节点打包成一个有名字的整体,对规则来说是「一个可以被指向的目标」,对你来说是「一个可以切换的下拉框」。
mihomo 的代理组有四种常用类型,区别只在于组内如何挑出那个真正干活的节点:手动挑(select)、按延迟挑(url-test)、按顺序挑第一个可用的(fallback)、按连接分摊(load-balance)。看懂这一句,剩下的都是参数细节。
代理组解决的是什么问题,以及四种类型的取舍
假设你有三十个节点,规则里要写「流媒体走日本、其余走香港」。如果没有代理组,规则只能指向某个具体节点,节点一挂全盘失效,换节点还得改规则。有了代理组,规则指向的是「日本」「香港」这样的名字,组内换谁不影响规则本身。
组名就是它对外的接口。规则里写的目标、其他组里引用的成员,用的都是这个名字——所以命名要稳定、要好认,改名意味着所有引用处都得同步改。代理组在整份配置里的位置见 mihomo 配置文件入门。
动手写之前,先用一张表把四种类型的差别过一遍:
| 类型 | 选节点的方式 | 适合场景 |
|---|---|---|
select | 你手动指定,不自动变 | 需要明确知道自己在用哪个节点 |
url-test | 周期性测延迟,自动切到最快的 | 只求快、不关心具体是哪个节点 |
fallback | 按列表顺序取第一个可用的 | 有明确优先级,主节点挂了自动顶上 |
load-balance | 把连接分摊到组内多个节点 | 并发多、希望分散压力 |
select:最常用的手动选择组
select 组不做任何自动判断,完全听你的。客户端界面上那些能点开切换的下拉列表,绝大多数就是 select 组:
proxy-groups:
- name: "PROXY"
type: select
proxies:
- "自动选择"
- "香港节点"
- "日本节点"
- DIRECT
注意成员里既可以是节点名,也可以是别的组名(这里的「自动选择」就是另一个组),还可以是内置的 DIRECT 和 REJECT。把 DIRECT 放进主组是个实用习惯:排错时不必改规则,一键切直连就能判断问题出在代理还是本地网络。
url-test:自动挑最快的那个
url-test 会定期向一个测试地址发起请求,记录各节点的响应时间,自动把流量切到最快的节点上:
- name: "自动选择"
type: url-test
proxies:
- "香港01"
- "香港02"
- "日本01"
url: "http://www.gstatic.com/generate_204"
interval: 300
tolerance: 50
三个参数的含义:url 是用于测速的地址,通常用返回 204 空响应的轻量接口;interval 是测试间隔(秒),300 表示每五分钟测一轮;tolerance 是容差(毫秒),只有当别的节点比当前节点快出这个数值时才切换。
说明:tolerance 别设得太小。延迟数值天然会小幅波动,容差过小会导致节点频繁反复横跳,正在进行的连接反而更容易中断。
fallback 与 load-balance
fallback 讲究的是顺序而非速度:它按列表从上往下检查可用性,始终使用第一个通得过健康检查的节点,前面的恢复了就切回去。适合「有一个我最信任的主力节点,其他只是备胎」的场景:
- name: "故障转移"
type: fallback
proxies:
- "主力节点"
- "备用节点A"
- "备用节点B"
url: "http://www.gstatic.com/generate_204"
interval: 300
load-balance 则把不同连接分散到组内多个节点上,可以用 strategy 指定分配策略(例如按连接轮换,或让同一域名固定落在同一节点上)。它适合多连接并发的场景;但对需要保持会话一致的服务,分散反而可能带来异常,日常使用不必优先考虑。
组嵌套:机场订阅的典型结构
代理组的成员可以是另一个组,机场订阅几乎都用这种两层结构:
proxy-groups:
- name: "PROXY"
type: select
proxies:
- "香港"
- "日本"
- "新加坡"
- DIRECT
- name: "香港"
type: url-test
proxies:
- "香港01"
- "香港02"
url: "http://www.gstatic.com/generate_204"
interval: 300
下层是地区组(把同一地区的节点用 url-test 聚在一起,内部自动选最快),上层是功能组(按用途划分,如 PROXY、流媒体、广告拦截,成员是各个地区组)。规则只指向功能组,你在界面上切的也是功能组——地区内部的节点变动完全不影响规则。这也是为什么导入订阅后看到的是「一堆组」而不是「一堆节点」。
注意:组之间不能形成循环引用(A 的成员是 B、B 的成员又是 A),内核会直接启动失败。自己手写多层结构时,画一下引用方向再动手。
写完之后怎么用
代理组本身不决定「哪些流量该走代理」,那是规则的活。组名写好之后,要在 rules 里把流量指过来才有意义,写法见 分流规则入门。如果你用的是机场订阅、并不打算自己写配置,那么了解这些类型的意义在于:看懂客户端里那些组各自在做什么,切换时心里有数。订阅的导入与更新见 订阅导入教程。