策略组解决的是"选哪个节点"的问题
规则文件里的 DOMAIN-SUFFIX,google.com,PROXY 这条规则,PROXY 并不是某一个具体节点,而是一个策略组的名字。规则只负责判断"这条流量该走哪个组",而组里到底用哪个节点、怎么切换,是策略组自己的调度逻辑决定的。这样设计的好处是:即使你换了订阅、节点全部变了,规则文件完全不用改,因为规则引用的始终是组名,不是具体节点。
proxy-groups:
- name: PROXY
type: select
proxies:
- 香港01
- 新加坡01
- DIRECT
上面这个最简单的例子里,PROXY 组的类型是 select,意味着由你手动选择用哪个节点,客户端界面上点一下就能切换,不会自动变化。
四种调度类型逐个讲清楚
1. select:完全手动,不自动切换
select 是最简单的类型,客户端只是把 proxies 列表里的节点原样展示出来,用哪个由你自己点选,永远不会自动跳动。适合你已经很清楚哪个节点线路稳定,不想让程序帮你"自作聪明"切换的场景。
2. url-test:自动选延迟最低的节点
url-test 会按固定周期(interval)访问一个测试地址,测出组内每个节点的延迟,自动切换到当前最快的那个,你在界面上看到的是一个只读的"当前使用节点",无法手动锁定。
proxy-groups:
- name: 自动选优
type: url-test
proxies: [香港01, 香港02, 新加坡01, 日本01]
url: "https://www.gstatic.com/generate_204"
interval: 300
tolerance: 50
tolerance 是关键参数:只有新节点的延迟比当前节点低出这个容差值(单位毫秒)才会真正切换,作用是防止两个延迟接近的节点来回抖动。tolerance 设得太小,就是"节点一直跳来跳去"最常见的原因。
3. fallback:主节点挂了才切换
fallback 同样会周期性检测节点是否可用,但逻辑不同:只要列表里第一个能连通的节点没有失效,就一直用它,不会因为"有更快的"而切换,只有当前使用的节点检测失败时才顺位切换到下一个。适合你想固定用某个主力节点,只在它彻底不可用时才启用备用线路的场景。
proxy-groups:
- name: 主备切换
type: fallback
proxies: [主力节点, 备用节点A, 备用节点B]
url: "https://www.gstatic.com/generate_204"
interval: 300
4. load-balance:把流量分散到多个节点
load-balance 按一致性哈希或轮询把不同的连接分配到组内的不同节点上,同一时间可能有几个连接分别走不同节点,适合节点带宽都比较充足、希望把负载摊开的场景,代价是同一个网站的不同请求可能会显示来自不同 IP,部分对 IP 一致性敏感的网站可能出现异常。
proxy-groups:
- name: 负载均衡
type: load-balance
proxies: [香港01, 香港02, 香港03]
strategy: consistent-hashing
url: "https://www.gstatic.com/generate_204"
interval: 300
策略组可以嵌套:组里放组
proxies 列表里除了写具体节点名字,也可以写另一个策略组的名字,这样就能搭建出分层结构。一个常见的写法是先按地区建立几个 url-test 自动测速组,再用一个 select 组把这几个地区组汇总起来,手动选"这次主要用哪个地区":
proxy-groups:
- name: 香港自动
type: url-test
proxies: [港01, 港02, 港03]
url: "https://www.gstatic.com/generate_204"
interval: 300
- name: 日本自动
type: url-test
proxies: [日01, 日02]
url: "https://www.gstatic.com/generate_204"
interval: 300
- name: PROXY
type: select
proxies: [香港自动, 日本自动, DIRECT]
这种写法的好处是:规则里只需要引用最外层的 PROXY,而具体某个地区内部怎么自动测速切换,完全是内层组自己的事情,两层逻辑互不干扰,配置文件也更容易维护。
节点频繁跳动?先查这两个参数
如果用了 url-test 之后发现"当前节点"总是在切换,导致长连接(比如下载、视频通话)频繁中断,通常是这两个参数没调好:interval 设得太短,测速本身太频繁;或者 tolerance 设得太小甚至没设,两个延迟接近的节点会被判定为"有更优选项"而反复切换。把 interval 调大到 300 秒以上、tolerance 调到 50ms 左右,通常能明显改善这个问题。
写在最后
选策略组类型其实是在回答一个问题:"这个组里的节点,我希望程序帮我做多少决定?" ——完全不帮忙就用 select,帮忙测速选最快就用 url-test,只在故障时兜底就用 fallback,想摊开负载就用 load-balance。理解这四种类型的差异之后,再配合分流规则决定"谁该用哪个组",一份完整、好维护的配置基本就成型了。不确定某个术语具体含义,可以随时去术语表查一下。