策略组

一个策略组可以包含多个策略。它可以是代理服务器、另一个策略组或内置策略(DIRECT、REJECT 及其变体或 PROXY)。

共有七种组类型:select、url-test、fallback、load-balance、random、relay 和 ssid(也可写作 subnet)。[Proxy Group] 段用于声明策略组。smart 类型同样被接受,并会被当作 url-test 处理。其他任何类型的组——Surge 的 external,或 Chute 不认识的类型——会保留成员并按 select 组运行,同时在日志里记录提示,而不是被拒绝。

手动选择组

在用户界面上选择使用哪个策略。

SelectGroup = select, ProxyHTTP, ProxyHTTPS, DIRECT, REJECT

可选参数:default=(初始选中的成员——写它的名称,或从 0 开始计数的索引;Shadowrocket 的 select= 与 policy-select-name= 含义相同)、policy-provider:Name(从代理提供者导入成员)、filter= / exclude-filter=(应用于提供者所提供成员的正则表达式)以及 HIDDEN=true。除 ssid 外,所有组类型还支持订阅与成员参数。

在 iOS 版本中,Today Widget 可以切换前三个未隐藏的 select 组的策略;它显示几个组,由应用中的使用 Today Widget 选择策略组设置。在 macOS 版本中,你可以在菜单栏菜单中切换策略。


自动 URL 测试组

通过对 URL 进行延迟基准测试,自动选择使用哪个策略。

AutoTestGroup = url-test, ProxySOCKS5, ProxySOCKS5TLS, url = http://www.google.com/generate_204

参数

url:可选

Chute 会经由每个策略,向该 URL 所在主机的 80 端口发送一个明文 HTTP GET 请求:URL 中的 https:// scheme 或端口都会被忽略,所以请使用在 80 端口提供服务的 http:// URL。测试只关心是否接收到响应数据,即使响应是 HTTP 错误也可以。自带 test-url= 的成员会改为在那个 URL 上探测。省略时,将使用默认的探测 URL http://www.gstatic.com/generate_204。[General] 中的 proxy-test-url 会替换所有未写 url 的组的这一默认值。

interval:可选,秒(默认值:600 秒)。

策略重新测试的频率。一个全局的 1 秒定时器驱动自动重测,每 interval 秒进行一次,无论该策略组是否正在被使用。有两个例外:设置了 lazy=true 的组在首次被使用之前不会开始测试;以及当该组闲置超过 idle-timeout 时,测试会暂停。0 等同于不写。

tolerance:可选,毫秒(默认值:100 毫秒)。

每一轮都会同时测试所有成员。如果最先应答的成员不是正在使用的那个,Chute 会为正在使用的成员再多等最多 tolerance 毫秒(绝不超过这一轮的 timeout):它若在这段时间内应答,就保住自己的位置,否则组会切换到最先应答的那个成员。还没有哪一轮选出成员时,最先应答的成员会被直接采用;没有任何成员应答的一轮不会改变任何东西。0 等同于不写。

timeout:可选,秒(默认值:5 秒)。

如果在超时时间内未完成,则放弃该策略。未写 timeout 或写成 0 时,如果设置了 [General] 中的 test-timeout,则使用它。

lazy:可选(true/false,默认值:false)。

启用后,策略仅在首次使用时进行测试,而不是在启动时测试。

max-failed-times:可选(默认值:0,禁用)。

连续测试失败达到该次数后,策略被视为不健康。此选项仅对负载均衡组有效,不健康的策略会被排除出选择范围。对于 url-test 和 fallback 组,失败次数会被记录,但不影响选择。未设置(0)时,测试失败绝不会排除任何策略。

expected-status:可选(默认值:空)。

expected-status=204

只有状态码符合预期的响应才算成功:单个状态码(204)、范围(200-299),或用 / 连接的两者组合(200/204/300-399)。返回其他状态码的策略会退出本轮测试,并计为一次失败。不属于以上形式的值会被忽略并给出警告,此时接受任何响应。仅在 url-test 组中生效。

idle-timeout:可选,秒。

idle-timeout = 120

当该策略组在超过此时长内未被使用(没有新连接从中选取策略)时,周期性的 URL 测试将暂停。该组再次被使用后,测试会恢复。此选项不会关闭任何连接。

同时支持:HIDDEN=true、filter=、exclude-filter=、policy-provider:Name。


回退组

按优先级选择一个可用的策略。可用性通过访问 URL 进行测试,就像自动 URL 测试组一样。前面定义的策略具有更高的优先级。每一轮都会同时测试所有成员,组会按书写顺序,使用在最近一轮中应答了的第一个成员。在还没有任何一轮完成时,以及某一轮没有任何成员应答之后,它使用第一个成员。一轮的结果在这一轮结束时才生效——所有成员都应答了就立即结束,否则在 timeout 到时结束——所以组不会在一轮进行到一半时更换成员。只有某一轮改变了正在使用的成员才算切换:此时策略组主策略已更改通知会给出切换前后实际在用的成员,interrupt-exist-connections 会关闭原成员上的连接。

FallbackGroup = fallback, ProxySOCKS5, ProxySOCKS5TLS, url = http://www.google.com/generate_204

参数

url:可选

指定要测试的 URL;与 url-test 组一样,探测是向该 URL 所在主机的 80 端口发送的明文 HTTP GET,自带 test-url= 的成员会改为在那个 URL 上探测。省略时,将使用默认的探测 URL http://www.gstatic.com/generate_204。[General] 中的 proxy-test-url 会替换所有未写 url 的组的这一默认值。

interval:可选,秒(默认值:600 秒)。

策略重新测试的频率。语义与自动 URL 测试组相同,唯一的例外是 idle-timeout——它和 expected-status 一样只属于 url-test:fallback 组没有空闲暂停,会一直按间隔测试下去。

timeout:可选,秒(默认值:5 秒)。

如果某个策略在超时时间内未完成,则放弃该策略。未写 timeout 或写成 0 时,如果设置了 [General] 中的 test-timeout,则使用它。

lazy / max-failed-times:可选。

与自动 URL 测试组相同。同时支持:HIDDEN=true、filter=、exclude-filter=、policy-provider:Name。


SSID 组

根据当前网络选择策略:Wi-Fi 名称、接入点、接口类型或路由器。类型也可以写作 subnet,即 Surge 现在使用的名称。

SSIDGroup = subnet, default = ProxyHTTP, cellular = ProxyHTTP, "Home WiFi" = DIRECT, SSID:Office* = ProxySOCKS5, TYPE:WIRED = DIRECT, ROUTER:192.168.1.1 = DIRECT

参数

default:必填。

当未找到匹配的 SSID 选项时使用的策略。

cellular:可选。

蜂窝网络下的策略。如果未提供,将使用默认策略。更准确地说,只要设备不在 Wi-Fi 上且没有成员命中,就使用它。

default 为必填。成员是 <选择器> = <策略> 形式的配对,按顺序检查,第一个命中的生效。选择器可以是网络名称(含空格或冒号时加引号)、SSID:<名称>、BSSID:<地址>、TYPE:WIFI / TYPE:CELLULAR / TYPE:WIRED 或 ROUTER:<网关地址>;名称可以使用 * 和 ? 通配符。MCCMNC: 可以写,但永远不会命中。在 Apple TV 上,该组始终使用 default。


负载均衡组

使用负载均衡策略将请求分配到多个代理上。

LBGroup = load-balance, ProxySOCKS5, ProxyHTTPS, url = http://www.google.com/generate_204, strategy = round-robin

参数

strategy:可选(默认值:round-robin)

指定负载均衡策略:

策略 描述
round-robin 按顺序将请求均匀分配到所有代理
consistent-hashing 将相同的主机名一致地路由到相同的代理
sticky-sessions 持续为所有连接复用上一次选中的代理;该粘滞选择是全局的(而非按客户端区分),并在做出选择 600 秒后失效

url:可选

url = http://www.google.com/generate_204

Chute 会向该 URL 所在主机的 80 端口发送明文 HTTP GET 请求来测试代理的可用性。省略时,将使用默认的探测 URL http://www.gstatic.com/generate_204。只有当 max-failed-times 大于 0 时,测试结果才会影响选择;在默认值 0 下,不健康的代理不会被排除。[General] 中的 proxy-test-url 会替换所有未写 url 的组的这一默认值。

interval:可选,秒(默认值:600 秒)。

interval = 300

重新测试代理可用性的频率。0 等同于不写。

timeout:可选,秒(默认值:5 秒)。

timeout = 3

可用性测试请求的超时时间。未写 timeout 或写成 0 时,如果设置了 [General] 中的 test-timeout,则使用它。

lazy:可选(true/false,默认值:false)。

与自动 URL 测试组相同:在该组首次被使用之前不会开始测试。

max-failed-times:可选(默认值:0,禁用)。

max-failed-times = 3

连续测试失败达到该次数后,代理会被标记为不健康并被排除出负载均衡。在默认值 0 下,测试结果绝不会排除任何代理。如果所有代理都不健康,则会重新使用全部代理。

HIDDEN:可选(true/false,默认值:false)。

HIDDEN = true

启用后,各应用都不再列出该策略组:Chute Mac 的菜单栏菜单和主窗口的代理标签页、Chute iOS 及其 Today Widget、Chute tvOS、Chute Android、Chute Dashboard 以及 Web 控制台都不显示它。规则和其他策略组照常使用它。当前正被选中的隐藏组——例如全局模式正在使用的那个——仍会列出并打勾,让你看得到正在用的是什么。HTTP 控制 API 把全局指向某个 select 组时,各应用的全局列表(平时不含 select 组)也会列出这个组并打勾。HTTP 控制 API 仍返回全部策略组,每个组都带 "hidden": true 或 false。

该键按惯例写作大写,但匹配时不区分大小写,因此 hidden=true 同样有效。同样适用于 select、url-test、fallback 和 ssid 组。

注意:interrupt-exist-connections 参数现在是一个全局 [General] 设置。请参阅 杂项选项。


随机组

Shadowrocket 的 random 组:每个新连接随机选择一个成员。

RandomGroup = random, ProxyA, ProxyB, ProxyC

每个连接以相同的概率在成员中选择,与之前的连接无关。UDP 只在能中继 UDP 的成员中选择;一个都没有时,该组不中继 UDP,按 udp-policy-not-supported-behaviour 处理。成员的写法与 select 组相同,包括 policy-provider: 引用,成员自己的 underlying-proxy 会保留。它没有可切换的选择:Web 控制台和 HTTP 控制 API 会列出它的成员,但拒绝切换选择,default= 也不起作用。HIDDEN=true 可以像隐藏其他组一样隐藏它。


中继组

按书写顺序把成员串成一条路径。第一个成员直接连接(或经由它自己的 underlying-proxy),之后的每个成员都经由它前面的成员到达,最后一个成员连接目标——与 Clash 和 mihomo 的顺序相同。

RelayGroup = relay, Entry, Exit

经过 RelayGroup 的连接从设备到 Entry,从 Entry 到 Exit,再从 Exit 到目标;目标看到的来源是 Exit。

中继组至少需要两个成员,写法与 select 组相同;成员可以是策略,也可以是另一个策略组。第一个成员可以使用任何协议。之后的每个成员都要经由它前面的成员连到自己的服务器,因此必须是可以串联的类型——见 underlying-proxy;如果某个成员(或成员策略组当前选中的策略)不能串联,连接会被拒绝并记录日志,绝不直接发送。在中继组内,之后的成员自己的 underlying-proxy 会被忽略:它前面的成员就是它的路径。成员中的另一个中继组会在这个位置按它自己的成员展开,整条路径最多 8 跳;成员策略组当前选中的如果是另一个中继组,它的跳无法在连接时拼接进来,连接会被拒绝并记录日志。第一个成员之后的策略只能经由前面的成员到达,Chute 不会直接 ping 它们。WireGuard、AmneziaWG 和 SSH 只保持一条经由自己上游的连接,所以它们可以是第一个成员,但不能是之后的成员。当最后一个成员的 UDP 能经由它前面的成员发出时,中继组也承载 UDP,规则与 underlying-proxy 相同:VMess、VLESS、Trojan 或 AnyTLS 出口经由任何成员都可以,Shadowsocks、SOCKS5、Hysteria2、TUIC 或 MASQUE 出口则要求前面的成员承载 UDP。否则,发往它的 UDP 按 udp-policy-not-supported-behaviour 处理。它没有健康检查,也没有可选择的成员。


订阅与成员参数

以下参数适用于 select、url-test、fallback 和 load-balance 组(underlying-proxy 适用于除 SSID 组外的所有组):

[Proxy Group]
Airport = select, policy-path=https://example.com/nodes.list, update-interval=86400, policy-regex-filter="^(HK|JP) \d{1,2}$"
Everything = url-test, include-all-proxies=true
Streaming = fallback, HK-Node, include-other-group=Airport, policy-regex-filter="^HK"
  • policy-path=<URL>(Surge)用订阅填充组成员:Chute 会把它转成一个隐藏的 format=auto 代理提供者,其 interval 就是该组的 update-interval(默认 86400)。policy-regex-filter= 只保留名称匹配的节点。这个隐藏的提供者不会出现在任何提供者列表中,也不会写入文件;组的这一行按你写的原样保存。
  • include-all-proxies=true 加入 [Proxy] 段中的所有策略,include-other-group=<组>(可写多次)递归加入另一个组的成员。两者都在整份配置读完后展开;出现循环时会被截断,未知的组名只给出提示。保存的是你自己列出的成员。include-other-group 带过来的是另一个组的成员和提供者,而不是它的过滤条件:提供者供给的节点按引入方这个组自己的 filter=、policy-regex-filter= 和 exclude-type= 过滤,这就是上面的 Streaming 要自己设一个过滤条件的原因——不设的话,Streaming 会拿到 Airport 订阅里的每一个节点。
  • exclude-type=Shadowsocks|Vmess 把整类协议挡在提供者贡献的成员之外——常见理由是客户端无法用它们承载 UDP。多个名字用 | 分隔,大小写不敏感,并按别名识别,所以 ss 与 Shadowsocks 指的是同一类型。它不影响你自己列出的成员,保存配置时会原样写回。
  • underlying-proxy=<策略>(Surge Mac 6.9 / iOS 5.22)让整组的代理成员经由同一个上游:每个直接列出的、来自 policy-path、include-all-proxies 或 include-other-group 的代理策略,都以派生策略「成员名 (via 上游)」出现在组里,经由该上游连接,并取代成员自己的 underlying-proxy。原来的策略在别处照旧使用。成员是策略组的不受影响(它可以写自己的 underlying-proxy),DIRECT 和 REJECT 原样保留。若组经由它自己串联,经过它的连接会被拒绝并记录日志。
  • external-policy-modifier="键=值,…"(Surge)覆盖经 policy-path 导入的每个策略的这些参数,例如 external-policy-modifier="test-url=http://apple.com/,tfo=true"。它只作用于订阅导入的策略;要让整组经由上游,请用上面的 underlying-proxy。
  • 参数按引号外的逗号切分,所以含逗号的正则(比如上面那个)必须加引号。
  • Chute 不认识的参数,如 evaluate-before-use、no-alert、icon-url 或 persistent,会被保留并写回,但不起作用。

代理提供者

代理提供者允许你从外部来源(文件或 URL)导入代理列表。在 [Proxy Provider] 段中定义:

[Proxy Provider]
MyProvider = url=https://example.com/proxies.yaml, interval=3600

参数

参数 必填 描述
type 否 http(默认)或 file。规则集另有 inline 形态,写在 [Ruleset <名称>] 段里;代理提供者没有内联形态,这里写 type=inline 不会带来任何成员
url type=http 时必填 获取代理列表的 URL
path type=file 时必填 代理列表的本地文件路径
interval 否 缓存时限(秒)(默认:86400)。每次加载策略时——引擎启动时和重新加载配置时——比这更旧的缓存副本会在后台重新拉取;引擎运行期间不会刷新任何内容。0 永远不刷新缓存副本,但没有缓存时仍会做一次初始拉取;负值则永远不会拉取,除非存在上次成功的缓存,否则该提供者一直不生效
format 否 载荷格式:native 或 surge 读取 [Proxy] 风格的行列表;auto 或不写时按内容判断;mihomo-yaml 读取 YAML 文档,若载荷明显是行列表则改按行列表读取
filter 否 用于包含匹配代理名称的过滤正则表达式
exclude-filter 否 用于排除匹配代理名称的过滤正则表达式
underlying-proxy 否 该提供者的每个节点都经由这个策略或策略组连接(mihomo 的 override: dialer-proxy),取代节点自己的上游。见 underlying-proxy
policy 否 下载列表时经由的策略或策略组(mihomo 的 proxy:);若是策略组,使用下载开始时它选中的策略。不写或写 DIRECT 时直接下载;名称未定义时拒绝下载,而不是改为直接下载

YAML 载荷是 mihomo 风格的文档,包含 proxies:(或 payload:)列表;行列表载荷则每行一个 [Proxy] 风格的策略,例如 Name = trojan, example.com, 443, password=…。

代理提供者在策略组中通过 policy-provider: 前缀引用:

[Proxy Group]
MyGroup = select, policy-provider:MyProvider
S. Smart Rabbit LLC © All Rights Reserved            updated 2026-09-29 21:57:05

本页为英文版的翻译。如内容有出入,以英文版为准。

results matching ""

    No results matching ""