代理服务器
代理服务器将请求转发到上游代理。Chute 支持 HTTP/HTTPS/SOCKS5/SOCKS5-TLS/SS/SSR/Trojan/VMess/VLESS/AnyTLS/TUIC/Hysteria2/WireGuard/AmneziaWG/ShadowTLS/MASQUE/SSH 代理协议。
[Proxy] 段用于声明代理服务器。你可以为不同的规则创建多个代理服务器。
示例:
[Proxy]
ProxyHTTP = http, 1.2.3.4, 443, username, password
ProxyHTTPS = https, 1.2.3.4, 443, username, password, sni=example.com
ProxySOCKS5 = socks5, 1.2.3.4, 443, username, password
ProxySOCKS5TLS = socks5-tls, 1.2.3.4, 443, username, password, sni=example.com
SS = ss, 1.2.3.4, 443, method, password, obfs=http
SSR = ssr, 1.2.3.4, 443, method, password, protocol=auth_chain_f, protocol_param=user:pass, obfs=http_post, obfs_param=example.com
Trojan = trojan, 1.2.3.4, 443, password=password, tls=true, sni=example.com, skip-cert-verify=false, ws=true
VMess = vmess, 1.2.3.4, 443, uuid=uuid, sni=example.com, tls=true, ws=true
VLESS = vless, 1.2.3.4, 443, uuid=uuid, sni=example.com, xtls=true
AnyTLS = anytls, 1.2.3.4, 443, password, sni=example.com
TUIC = tuic, 1.2.3.4, 443, uuid=uuid, password=password, sni=example.com
Hysteria2 = hysteria2, 1.2.3.4, 443, auth=password, sni=example.com, up=10, down=100
WireGuard = wireguard, private-key=base64key, peer-public-key=base64key, section-name=wg0, self-ip=10.0.0.2
AmneziaWG = amneziawg, section-name=awg0
ShadowTLS = shadowtls, 1.2.3.4, 443, password=password, sni=example.com, skip-cert-verify=false, fingerprint=chrome
ProxyMASQUE = masque, 1.2.3.4, 443, token=auth-token, mode=connect-udp, sni=example.com, alpn=h3, skip-cert-verify=false
SSH = ssh, 1.2.3.4, 22, root, password=pw
SCHEME = scheme, ssr://....
注意:Trojan 策略需要显式的
tls=true——TLS 不会被隐式启用。没有它(也没有始终跑在 TLS 之上的grpc=true)时,策略会以明文连接,加载配置时日志里会写明这一点:Trojan policy <name> has no tls=true; it connects without TLS。导入 Clash/mihomo 配置文件时,每个 Trojan 节点都会被写上tls=true。注意:
scheme接受以下几种分享链接:ss://、ssr://、anytls://、tuic://、hysteria2://和shadowtls://。其他任何类型的链接都会让这一行成为配置错误。
参数
| 类型 | 用户名 | 密码 | 加密方法 | TLS | XTLS | WebSocket | QUIC |
|---|---|---|---|---|---|---|---|
| HTTP | √ | √ | |||||
| HTTPS | √ | √ | TLS | ||||
| Socks | √ | √ | |||||
| SOCKS5-TLS | √ | √ | TLS | ||||
| Shadowsocks | √ | 加密方法, OBFS | TLS, 指纹, ECH | WS | |||
| ShadowsocksR | √ | 加密方法, 协议, OBFS | TLS, 指纹, ECH | WS | |||
| Trojan | √ | TLS, 指纹, ECH | WS, gRPC, XHTTP | ||||
| VMess | uuid | TLS, 指纹, ECH | WS, gRPC, XHTTP | ||||
| VLESS | uuid | TLS, 指纹, ECH | XTLS | WS, gRPC, XHTTP | |||
| AnyTLS | √ | TLS | |||||
| TUIC | uuid | √ | TLS | √ | |||
| Hysteria2 | auth | TLS | √ | ||||
| WireGuard | private-key | 原生 WireGuard | |||||
| AmneziaWG | private-key | 原生 WireGuard | |||||
| ShadowTLS | √ | TLS, 指纹 | |||||
| MASQUE | token | TLS, 模式, 多路复用 | √ | ||||
| SSH | √ | 认证 | |
带 TLS 的代理参数
tls:可选。
tls=true
启用 TLS 传输。
skip-cert-verify:可选
skip-cert-verify=true
如果启用此选项,Chute 将不会验证服务器证书。true、1 和 yes 都表示开启,因此写成 insecure=1 的分享链接同样有效。Shadowrocket 在 socks5-tls 行上的写法 skip-common-name-verify=true 被读作同一个选项。
sni(默认值:hostname)
sni=exmaple.com
你可以自定义 TLS 握手期间的服务器名称指示(SNI)。默认情况下,Chute 会像大多数浏览器一样发送带有主机名的 SNI。
fingerprint:可选。
fingerprint=chrome
用浏览器的 TLS ClientHello 代替系统默认的握手,使其不会因为形似代理客户端而显眼。可用取值为 chrome、firefox、safari、ios,以及 edge、360、qq、android 和 random——后面这几个都按 Chrome 处理。mihomo、sing-box 和 Xray 使用的名字也能识别,并归到这四种预设上:例如 randomized、chrome_pq 和 hellochrome_131 按 Chrome 处理,hellofirefox_120 按 Firefox,hellosafari_16_0 按 Safari,helloios_14 按 iOS。Xray 的 hellogolang 没有对应的预设。
该选项适用于走 TLS 的 Trojan、VMess 和 VLESS,包括它们的 WebSocket 与 gRPC 传输,也适用于走 WebSocket 加 TLS 的 Shadowsocks 和 ShadowsocksR。REALITY 和 ShadowTLS 在各自的章节里有同名选项。若想为所有未单独指定的策略统一设置,请使用 global-client-fingerprint。它总是作用于 ShadowTLS 策略;VLESS 策略设置了 tls=true 或 reality=true 即可;Trojan 和 VMess 策略要设置 tls=true;Shadowsocks 策略要同时设置 ws=true 和 tls=true。走 gRPC 传输的策略同样要写上 tls=true。ShadowsocksR 策略不受它影响。
在这些协议上,fingerprint=none(unsafe 与它含义相同)表示使用系统 TLS 栈,而且优先于 global-client-fingerprint。REALITY 和 ShadowTLS 离不开浏览器式的握手,所以在那里写 none 也会拒绝连接。Chute 认不出的取值在任何协议上都会让该策略的连接被拒绝,而不是退回系统 TLS:不向服务器发出任何数据,连接以失败结束——url-test 或 fallback 组会像对待其他失败一样把它计入——加载配置时日志会记录 Policy <name>: fingerprint '<value>' is not supported; connections through this policy are refused。相比之下,global-client-fingerprint 写了认不出的值只会被忽略。
设置指纹同时会开启后量子密钥交换:Chute 会在 X25519 之外一并提供 X25519MLKEM768 混合群组,这样今天被录下的会话,日后即使攻击者拥有量子计算机也无法解密。服务器若不认识该群组,只会退回选择 X25519,不会出问题。未设置指纹时连接走系统 TLS 栈,不会提供该群组——这与 ECH 需要指纹是同一个原因。
带 Shadowsocks 的代理参数
method:必填。
当前支持:
rc4-md5
aes-128-cfb
aes-192-cfb
aes-256-cfb
aes-128-ctr
aes-192-ctr
aes-256-ctr
bf-cfb
camellia-128-cfb
camellia-192-cfb
camellia-256-cfb
salsa20
chacha20
chacha20-ietf
aes-128-gcm
aes-192-gcm
aes-256-gcm
chacha20-ietf-poly1305
xchacha20-ietf-poly1305
Shadowsocks 2022 加密方法
Chute 支持 Shadowsocks 2022 协议,该协议使用基于 BLAKE3 的密钥派生和 AEAD 加密算法。加密方法名称决定了密码套件:
2022-blake3-aes-128-gcm
2022-blake3-aes-256-gcm
2022-blake3-chacha20-poly1305
密码格式:
SS2022 的密码字段由一个或两个 base64 编码的密钥组成,以 :(冒号)分隔。
单用户模式(一个密钥):
SS2022 = ss, 1.2.3.4, 443, 2022-blake3-aes-256-gcm, "base64-key"
带身份头部的多用户模式(两个密钥):
对于 2022-blake3-aes-128-gcm 和 2022-blake3-aes-256-gcm,你可以提供一个身份头部密钥和一个用户密钥,以 : 分隔:
SS2022 = ss, 1.2.3.4, 443, 2022-blake3-aes-256-gcm, "header-base64-key:user-base64-key"
每个密钥都是一个 base64 编码的字符串(支持标准 base64 和 URL 安全的 base64)。所需的密钥长度:
| 加密方法 | 用户密钥长度 | 头部密钥长度 |
|---|---|---|
2022-blake3-aes-128-gcm |
16 字节 | 16 字节 |
2022-blake3-aes-256-gcm |
32 字节 | 32 字节 |
2022-blake3-chacha20-poly1305 |
32 字节 | 不适用(不支持身份头部) |
生成密钥:
openssl rand -base64 32
注意:SS2022 加密方法不支持
obfs参数。2022-blake3-chacha20-poly1305加密方法不支持多用户模式。
Shadowsocks AEGIS 加密方法
Chute 还支持 AEGIS 系列 AEAD 加密算法。它们构建在 AES 轮函数之上,在任何具备硬件 AES 的处理器上都明显快于 AES-GCM 和 ChaCha20-Poly1305——近年的 iPhone、iPad、Apple TV 和 Mac 都具备:
aegis-128l
aegis-256
配置方式与上面的经典 AEAD 加密方法相同,密码是普通口令,不是 base64 密钥:
AEGIS = ss, 1.2.3.4, 443, aegis-128l, your-password
| 加密方法 | 密钥 | Nonce | 认证标签 |
|---|---|---|---|
aegis-128l |
16 字节 | 16 字节 | 16 字节 |
aegis-256 |
32 字节 | 32 字节 | 16 字节 |
其余部分完全遵循 SIP004:salt 与密钥等长,会话子密钥为 HKDF-SHA1(key, salt, "ss-subkey"),TCP 载荷以带长度前缀的 AEAD 分块传输且每次操作后递增 nonce,UDP 使用全零 nonce。
需要你自建服务端。 AEGIS 不属于 Shadowsocks 规范——没有对应的 SIP,主流 Shadowsocks 服务端也都没有实现,包括 shadowsocks-rust、shadowsocks-libev、shadowsocks-go、sing-box 和 Xray。选用这两个加密方法,只有在你自己运行的、专门支持它们的服务端上才能连通。如果你连的是商用或共享节点,请改用上面那些通用的加密方法。
obfs:可选。
当前支持:
tls
http
obfs_param:可选。
obfs_param=example.com
设置 obfs 层使用的 Host。未设置时默认为 cloudfront.net。
WebSocket(v2ray-plugin):可选。
ws=true, ws-path=/path, ws-headers=Host:example.com, tls=true, sni=example.com, skip-cert-verify=false
把 Shadowsocks 数据流放进 WebSocket 里传输,与 v2ray-plugin 的 websocket 模式相同,因此策略可以连上架在 v2ray-plugin 后面的 Shadowsocks 服务器,前面再套一层 CDN 也可以。所用的选项就是 WebSocket 传输和 TLS 的那些。Shadowsocks 2022 加密方法同样可以走它;ShadowsocksR 策略也接受这些选项,并保留自己的协议与 obfs。
ws-path默认为/;写的路径缺少开头的斜杠时会自动补上。- 升级请求的
Host取ws-headers里的 Host,按原样使用;没有写时用sni(没有sni时用服务器地址),后接:<端口>。 tls=true在 WebSocket 下面加一层 TLS。sni、skip-cert-verify、fingerprint 和 ECH 各选项的作用与 Trojan 相同。没有ws=true时tls=true不起作用:策略不经 TLS 直接连接,这一行会得到提示Shadowsocks tls=true only applies with ws=true (the v2ray-plugin transport); this policy connects without TLS。ws-mux(默认true)在每条 WebSocket 上建立一条 mux.cool 会话,这正是以默认mux=1启动的 v2ray-plugin 服务端所要的。服务端以mux=0启动时,写ws-mux=false。- 同一行还写了
obfs=时以 WebSocket 为准,simple-obfs 不生效;加载配置时日志会记录Policy <name> ignored unsupported option(s): obfs。 - UDP 不经过插件:它仍是普通的 Shadowsocks UDP,直接发往
host:port,穿不过 CDN。经 CDN 连接的服务器请写udp-relay=false。如果插件后面的 Shadowsocks 服务器支持 UoT,也可以改用udp-over-tcp=true:UDP 放进该策略的流里传输,因而同样经过 WebSocket。 - 不支持 v2ray-plugin 的 quic 模式。
Shadowrocket 的写法同样能读入:obfs=websocket(或 obfs=ws),Host 写在 obfsParam 或 obfs-host 里,路径写在 path 或 obfs-uri 里。保存时写成 ws=true。Shadowsocks 读不了的其他 obfs 值——例如 Quantumult X 的 wss,或是拼错的值——会在提示里被点名,策略则按普通 Shadowsocks 连接:Shadowsocks over WebSocket (the v2ray-plugin transport) is written ws=true, with ws-path= and ws-headers=; obfs=<value> is not read, so this policy would connect as plain Shadowsocks。
SS = ss, 1.2.3.4, 443, aes-256-gcm, password, ws=true, ws-path=/ws, ws-headers=Host:cdn.example.com, tls=true, sni=cdn.example.com
udp-over-tcp:可选。
udp-over-tcp=true, udp-over-tcp-version=2
把该策略的 UDP 放进该策略自己的 TCP 连接里传输,而不走服务器的 UDP 中继——即 sing-box 的 UDP over TCP(UoT)。每个 UDP 流各用一条连接,连向服务器识别的约定地址(sp.v2.udp-over-tcp.arpa,版本 1 为 sp.udp-over-tcp.arpa)。这些连接就是该策略的普通连接,所以和其他连接一样遵循它的 underlying-proxy:经由不承载 UDP 的上游(例如 HTTP 代理)也能使用 UDP,经过 WebSocket 传输时同样可用。服务器必须支持 UoT,sing-box 和 mihomo 的服务端都支持。Shadowsocks 2022 加密方法同样适用。
udp-over-tcp-version(默认2):版本 2 在每条连接开头发送一个指明目标的请求,之后每个数据报以长度分帧;版本 1 没有请求,而是在每个数据报前面写上地址。mihomo 默认使用版本 1,所以从 mihomo 导入的配置会写明版本。其他取值会给出提示并按2使用,保存配置时原样写回。udp-relay=false仍然会关闭该策略的 UDP。- 在应用的 Shadowsocks 编辑器中,它们对应UDP over TCP开关和UoT 版本选项。
SS = ss, 1.2.3.4, 8388, aes-256-gcm, password, udp-over-tcp=true
带 ShadowsocksR/ShadowsocksRR/ShadowsocksR-Akarin 的代理参数
method:必填。
当前支持:
rc4
rc4-md5-6
rc4-md5
aes-128-cfb
aes-192-cfb
aes-256-cfb
aes-128-ctr
aes-192-ctr
aes-256-ctr
bf-cfb
camellia-128-cfb
camellia-192-cfb
camellia-256-cfb
cast5-cfb
des-cfb
idea-cfb
rc2-cfb
seed-cfb
salsa20
chacha20
chacha20-ietf
protocol:可选。
当前支持:
origin
auth_sha1
auth_sha1_v2
auth_sha1_v4
auth_aes128_md5
auth_aes128_sha1
auth_chain_a
auth_chain_b
auth_chain_c
auth_chain_d
auth_chain_e
auth_chain_f
auth_akarin_rand
auth_akarin_spec_a
protocol_param:可选。
obfs:可选。
当前支持:
plain
http_simple
http_post
tls1.2_ticket_auth
obfs_param:可选。
带 WebSocket 的代理参数
WebSocket 传输适用于 Trojan、VMess 和 VLESS,也适用于 Shadowsocks 和 ShadowsocksR——对后两者来说它就是 v2ray-plugin 的 websocket 模式,有哪些不同见 WebSocket(v2ray-plugin)。
ws:可选。
ws=true
启用 WebSocket 传输。
ws-path:可选。
ws-path=/exmaple
更改 WebSocket HTTP 请求的路径。
ws-headers:可选。
ws-headers=Header1:Value1|Header2:Value2
修改 WebSocket HTTP 请求的 HTTP 头部。
带 gRPC 的代理参数
gRPC 传输适用于 Trojan、VMess 和 VLESS 协议。它使用基于 HTTP/2 的 gRPC 帧封装通过 TLS 传输,有助于绕过某些网络限制。
grpc:可选。
grpc=true
启用 gRPC 传输。不管策略的 tls 写成什么,这个传输始终跑在 TLS 之上。如果该策略要采用 global-client-fingerprint,仍然要写上 tls=true,因为走 gRPC 的策略只有设置了这一项才会采用它。
grpc-service-name:grpc=true 时必填。
grpc-service-name=MyService
指定用于多路复用的 gRPC 服务名称/路径。它必须与服务器上配置的服务名称一致;没有默认值。
grpc-multi-mode:可选。
grpc-multi-mode=true
使用 Xray 的 multi 模式:隧道调用 /<service>/TunMulti 而不是 /<service>/Tun,多次写入会合在一条 gRPC 消息中传输。服务器必须支持 multi 模式。每条隧道仍然使用自己独立的连接。
VMess 与 gRPC 示例:
VMess = vmess, 1.2.3.4, 443, uuid=uuid, tls=true, grpc=true, grpc-service-name=GunService, sni=example.com
带 XHTTP 的代理参数
XHTTP 传输适用于 Trojan、VMess 和 VLESS 协议。它不保持一条长连接,而是把隧道装进普通的 HTTP 请求里:下行是一条长时间不结束的响应,上行则是一串 POST 或一条长时间不结束的 POST。这让它能穿过 CDN——这也是选它而不选 WebSocket 或 gRPC 的主要理由。
HTTP 版本不直接配置。不启用 TLS 时是 HTTP/1.1;启用 TLS 时是 HTTP/2,除非 alpn 恰好是 http/1.1(走 HTTP/1.1)或恰好是 h3(走 HTTP/3)。REALITY 始终走 HTTP/2。
xhttp:可选。
xhttp=true
启用 XHTTP 传输。
xhttp-mode:可选。
xhttp-mode=packet-up
上行的承载方式。auto(默认)等同 packet-up;启用 REALITY 时等同 stream-one。
packet-up——上行是一串带序号的 POST。兼容性最好,也最适合 CDN。stream-up——上行是一条长时间不结束的 POST,下行走另一个请求。stream-one——一个请求同时承载收发。需要服务端和沿途中间设备支持全双工 HTTP。
服务端通常会固定一种模式,对不上会返回 400。
xhttp-path:可选。
xhttp-path=/yourpath
请求路径,默认 /。必须与服务端提供 XHTTP 服务的路径一致。
xhttp-host:可选。
xhttp-host=example.com
Host 头部与请求 URL 使用的主机名。默认取 sni,未设置时取服务器地址。
xhttp-headers:可选。
xhttp-headers=Header1:Value1|Header2:Value2
附加的 HTTP 头部,格式与 ws-headers 完全一致。
xhttp-padding:可选。
xhttp-padding=100-1000
每个请求携带的填充长度范围,写作 MIN-MAX 或单个数字,默认 100-1000。服务端要求必须有填充并会校验长度,所以这个范围要落在服务端接受的区间内——不带填充或长度不对,请求会被回 400。
xhttp-max-post-bytes:可选。
xhttp-max-post-bytes=1000000
单个上行 POST 的最大字节数,默认 1000000。超过的写入会被拆成多个 POST。
xhttp-min-post-interval:可选。
xhttp-min-post-interval=30
相邻两次上行 POST 之间的最小间隔,单位毫秒,默认 30。
xhttp-xmux-max-concurrency、xhttp-xmux-max-connections、xhttp-xmux-max-reuse-times、xhttp-xmux-max-lifetime:可选。
xhttp-xmux-max-concurrency=4
XMUX 会把底层的 HTTP/2 连接池化,让多条隧道共用一条连接——看上去更像一次普通的浏览器会话,而不是每条隧道一条连接。四项默认都是 0,即不启用池化。
xhttp-xmux-max-concurrency——允许共用一条连接的隧道数。xhttp-xmux-max-connections——每个服务器允许的连接数。xhttp-xmux-max-reuse-times——一条连接服务多少条隧道后不再接新的。xhttp-xmux-max-lifetime——一条连接存活多少秒后不再接新的隧道。
注意 XHTTP 策略不论是哪种协议都会拒绝 mux=true,加载配置时日志会记录 Policy <name> ignored unsupported option(s): mux:XHTTP 自带多路复用,再叠加通用的那套等于复用两层。
xhttp-download-server、xhttp-download-port:可选。
xhttp-download-server=cdn.example.com
让下行走另一个地址——通常是同一台服务器前面的 CDN——而上行仍走主地址。两者必须到达同一台服务器:会话是服务端状态,换一条路由可以,换一台服务器不行。
VLESS 与 XHTTP 示例:
VLESS = vless, 1.2.3.4, 443, uuid=uuid, tls=true, xhttp=true, xhttp-mode=packet-up, xhttp-path=/yourpath, sni=example.com
带 XTLS 的代理参数
xtls:可选。
xtls=true
把传输包进 XTLS。它自身不声明任何 flow:VLESS 请求携带的是空的 addons 块,因此不会协商出任何 flow。要声明 flow 请用下面的 flow=xtls-rprx-vision;xtls-rprx-direct 并未实现。
flow:可选。
flow = xtls-rprx-vision
选择 XTLS 流控。唯一支持的值是 xtls-rprx-vision,它启用 Vision 分帧;该 flow 值会通过 VLESS addons 发送给服务器。
skip-cert-verify:可选
skip-cert-verify=true
与 TLS 相同。
sni(默认值:hostname)
sni=exmaple.com
与 TLS 相同。
带 REALITY 的代理参数
REALITY 是一种基于 TLS 的混淆技术,使代理流量与访问真实网站的常规 TLS 流量无法区分。可用于 VLESS 协议。
reality:可选。
reality=true
启用 REALITY 混淆。需要一个作为伪装目标的目标服务器。
public-key:必填。
public-key=BASE64KEY
服务器的 X25519 公钥(base64)。没有它就无法构造 REALITY 握手。
short-id:可选。
short-id=abcd1234
用于 REALITY 认证的短标识符。通常是一个十六进制字符串。
server-name:可选。
server-name=www.microsoft.com
TLS 握手期间要展示的 SNI(服务器名称指示)。为获得最佳伪装效果,应使用一个真实且常被访问的网站。目标服务器的证书必须与此名称匹配。
fingerprint:可选。
fingerprint=chrome
要模拟的 TLS 客户端指纹。支持的值包括 chrome、firefox、safari、ios、edge、360、qq、android、random,以及 fingerprint 一节列出的其他名字。使用常见的浏览器指纹有助于避免检测。注意 android 和 random 在这里并没有区别——它们会被当作 chrome 处理。none 和 Chute 认不出的取值都会拒绝连接,因为这种握手无法交给系统 TLS 栈完成。
spiderx:可选。
spiderx=/path
REALITY spider 伪装的自定义路径。
VLESS 示例:
VLESS = vless, 1.2.3.4, 443, uuid=uuid, reality=true, public-key=BASE64KEY, server-name=www.microsoft.com, short-id=abcd, fingerprint=chrome
注意:REALITY 不使用传统证书。连接使用伪装服务器的真实证书。
带 ECH 的代理参数
Encrypted Client Hello 让链路上的观察者看不到你要访问的服务器名。真实名字加密后藏在握手内部,明文出现在链路上的是服务器 ECHConfig 里公布的 public_name。
ECH 与客户端指纹共用同一套实现,所以策略必须同时设置 fingerprint——没有它,ech=true 不起任何作用,真实名字照样明文发出。该功能适用于走普通 TLS 的 Trojan、VMess 和 VLESS,包括它们的 WebSocket 传输,也适用于走 WebSocket 加 TLS 的 Shadowsocks 和 ShadowsocksR。
注意:gRPC 和 XHTTP 传输不支持 ECH。在
grpc=true或xhttp=true时,ech=true会被静默忽略,真实服务器名字仍以明文发出。(客户端指纹和后量子密钥交换对 gRPC 和 XHTTP 仍然生效。)
ech:可选。
ech=true
启用 ECH。若未设置 ech-config,Chute 会像浏览器那样从该服务器名的 DNS HTTPS 记录中查询 ECHConfig。
ech-config:可选。
ech-config=AEX+DQBBAAAgACD...
base64 编码的 ECHConfigList,设置后不再走 DNS 查询。适用于服务器没有发布 HTTPS 记录、或你想固定使用某一份配置的场合。设置它本身就会开启 ECH,不必再另写 ech=true。
ech-public-name:可选。
ech-public-name=cover.example.com
覆盖明文发出的掩护名。默认使用 ECHConfig 内的 public_name,那也是服务器期望的值;只有当部署方式让配置由另一个主机代持时才需要设置。
Trojan 示例:
Trojan = trojan, 1.2.3.4, 443, password=pw, tls=true, sni=secret.example.com, fingerprint=chrome, ech=true
如果服务器拒绝 ECH(最常见的原因是配置已过期),它会按掩护名应答并出示该名字的证书,握手回落到外层 TLS。只要证书校验还开着,连接就会因为无法通过身份校验而失败,而不是悄悄继续;而在
skip-cert-verify=true时,没有任何东西核对那个名字,会话就会默默地以掩护名继续下去。请更新ech-config,或者删掉它改回 DNS 查询。
TCP 快速打开(实验性)
tfo:可选
tfo=true
有关 TCP 快速打开的更多信息,可参阅 Wikipedia。启用 TCP 快速打开可能会导致意外的连接失败。Chute Android 会忽略 tfo。
通用参数
udp-relay:可选(默认值:true)
udp-relay=false
将策略标记为仅 TCP。在协议支持的情况下,UDP 中继默认开启;设置 udp-relay=false 可将该策略排除出 UDP 流量中继。Trojan 通过一条到服务器端口的普通 TLS 连接中继 UDP——不经过 WebSocket、gRPC 或 XHTTP,也不带 ECH,但会使用策略的指纹——所以如果服务器只提供其中某种传输,请设置 udp-relay=false。
mux:可选
mux=true
启用连接复用/多路复用。也接受别名 multiplex 和 reuse。支持 HTTP/HTTPS、SOCKS5/SOCKS5-TLS、Trojan、VMess、VLESS、Hysteria2、Shadowsocks(R)、ShadowTLS 和 MASQUE。AnyTLS、TUIC 和 SSH 在任何平台上都不做多路复用。对这些协议,mux=true 不会生效,加载配置时日志里会写明这一点:Policy <name>: mux=true is not applied: <reason>。
Hysteria2 和 MASQUE 在一条共享的 QUIC 连接上复用。其他协议都用 Chute 自有的帧格式承载复用的连接,只有能识别它的服务端才拆得开:标准的 Xray、sing-box 和 Shadowsocks 服务端都拆不开,对它们不要开启 mux。
cert-fingerprint-sha256:可选
cert-fingerprint-sha256=<hex>
通过 SHA-256 指纹固定服务器证书。也接受别名 cert-fp。目前仅对 MASQUE 生效。
encrypt-method(VMess):可选(默认值:auto)
encrypt-method=aes-128-gcm
VMess 载荷加密。支持的值:aes-128-gcm、chacha20-poly1305、aes-128-cfb(别名 legacy)、none。
alpn:可选
alpn=h2|http/1.1
多个 ALPN 值以 | 分隔。只有 TUIC、Hysteria2 和 MASQUE 会读它——不写时三者都默认 h3——以及 XHTTP,在那里它决定该传输说的是哪个 HTTP 版本。其他协议都忽略这个选项,提供的是各自传输决定的 ALPN:gRPC 是 h2;设置了 fingerprint 时,WebSocket 是 http/1.1,纯 TLS 是 h2,http/1.1;没有设置时两者都不提供,因为这时握手由系统 TLS 栈完成。
underlying-proxy:可选。
underlying-proxy=OtherProxy
代理链:该值指定承载本策略流量的另一个策略或策略组。引擎会先建立上游连接,再通过它连接本策略的服务器,因此 A = ..., underlying-proxy=B 会让 A 经由 B 发送。B 还可以继续指定上游,从而形成多跳;留空或写 DIRECT 则直接连接。名称含空格或逗号时要加引号,例如 underlying-proxy="HK 01"。名称不存在时连接会被拒绝(fail closed)并记录日志,不会回退到 DIRECT。
由固定引用构成的循环——包括经由中继组第一个成员自己的 underlying-proxy 绕回来的循环——在加载配置时即被拒绝。只因某个策略组当前的选择才构成的循环不会被永久拒绝:组换了选择后策略即可使用,但在循环存在期间,经过它的每个连接都会被拒绝。无论链路是什么形状,上游嵌套超过 16 层的连接都会被拒绝,而不会无限展开。
本策略的服务器域名也由上游解析:串联的服务器不会交给本地解析器查询,Chute 也不会直接 ping 它;中继组里第一个成员之后的策略同样如此。它的延迟来自策略组的健康检查和延迟测试,二者都经由代理链到达它——url-test、fallback 和 load-balance 组会按真实连接的路径探测串联的成员。
除 Tailscale(内置的 TAILSCALE 策略,它的引擎自己建立连接)外,所有协议都可以串联。经由流连接服务器的策略——HTTP、SOCKS5、Shadowsocks、VMess、VLESS、Trojan、AnyTLS、SSH、基于 HTTP/1.1 或 HTTP/2 的 XHTTP 等——会经由上游打开这条流。Hysteria2、TUIC、MASQUE 和基于 HTTP/3 的 XHTTP(启用 TLS 且 alpn=h3)使用 QUIC,WireGuard 和 AmneziaWG 发送自己的数据报,所以它们经由上游的 UDP 中继:上游(若是策略组,则为它当前选中的策略)必须能承载 UDP——Shadowsocks、SOCKS5、VMess、VLESS、Trojan 和 Hysteria2 可以,HTTP 或 HTTPS 代理不行。上游不承载 UDP 时,经过它们的每个连接都会被拒绝并记录日志,绝不直接发送。串联后,QUIC 策略发送的数据报不超过 1200 字节;WireGuard 或 AmneziaWG 隧道的内层 MTU 为 1280,除非写明了 MTU(mtu,或其段中的 wg-mtu),这样封装后的数据报仍能放进 1500 字节的路径。WireGuard、AmneziaWG 和 SSH 的全部流量共用一条经由自己上游的连接,所以它们都不能作为中继组中靠后的成员。
UDP 同样可以走串联。VMess、VLESS、Trojan 和 AnyTLS 在流内承载 UDP,所以它们的 UDP 经由任何上游都可用。Shadowsocks(包括 ShadowsocksR 和 Shadowsocks 2022)和 SOCKS5 以数据报中继 UDP,QUIC 类协议和 WireGuard 也是如此:只有上游承载 UDP 时,它们的 UDP 才可用——除非 Shadowsocks 节点使用了 udp-over-tcp:它在流内承载 UDP,所以经由任何上游都可用。SSH、HTTP 和 HTTPS 策略本身不承载 UDP。串联策略无法承载的 UDP 按 udp-policy-not-supported-behaviour 处理(默认 REJECT)。
mihomo 的 dialer-proxy 和 sing-box 的 detour 会导入为此选项,代理提供者的 override: dialer-proxy 导入为该提供者的 underlying-proxy。Clash 或 mihomo 的 relay 组会保留为中继组,成员顺序不变。要让一整个策略组的成员都经由同一个上游,可以在组上写 underlying-proxy。要让所有代理策略都经由同一个上游,可以在 [General] 中设置 global-underlying-proxy。
test-url:可选。
test-url=http://www.gstatic.com/generate_204
该策略作为 url-test 或 fallback 组成员时使用的延迟测试 URL:组会用这个 URL 测试该成员,而不是用组的 url。不写时使用组的 URL。
interface:可选
interface=en0
让该策略连向其服务器的 TCP 连接从指定的网络接口发出——比如 Mac 上的 en0、Android 上的 wlan0——而不是走默认路由选定的接口。该接口不可用时,连接会失败,而不是改从别的路径出去;allow-other-interface=true 则让它改走默认路由。它在 Chute Mac 和 Chute Android 上生效,iOS 和 tvOS 会忽略它。UDP 中继不受绑定,基于 QUIC 的协议(TUIC、Hysteria2、MASQUE)、WireGuard 和 Tailscale 也都不受绑定。
带 AnyTLS 的代理参数
AnyTLS 是一种基于 TLS 的代理协议,带有填充混淆功能。
AnyTLS = anytls, 1.2.3.4, 443, password, sni=example.com, skip-cert-verify=false
password:必填。
用于认证的密码/口令。
sni(默认值:hostname)
sni=exmaple.com
与 TLS 相同。
skip-cert-verify:可选
skip-cert-verify=true
与 TLS 相同。
填充方案:可选
填充通过 stop=N 加上数字形式的逐包键来配置:
AnyTLS = anytls, 1.2.3.4, 443, password, sni=example.com, stop=2, 0=30-30, 1=100-400+c
| 参数 | 描述 |
|---|---|
stop |
填充数据包的数量 |
0、1、2、... |
每个数据包的填充方案(数字键) |
每个方案是由 + 连接的段列表,其中每段要么是 c(检查),要么是 min-max 字节范围(最大 16384),例如 stop=2, 0=30-30, 1=100-400+c。, 也能当分隔符用,但仅限值加了引号时——1="100-400,c"——因为不加引号的逗号会结束这个字段,把整行弄坏。优先用 +。
带 TUIC 的代理参数
TUIC 是一种基于 QUIC 的代理协议,提供多路复用的 TCP 和 UDP 中继。也接受关键字 tuic-v5(Surge 的写法),保存时写作 tuic。
TUIC = tuic, 1.2.3.4, 443, uuid=uuid, password=password, sni=example.com, skip-cert-verify=false, alpn=h3
uuid:必填。
用于认证的 UUID。
password:必填。
用于认证的密码。
sni(默认值:hostname)
sni=exmaple.com
与 TLS 相同。
skip-cert-verify:可选
skip-cert-verify=true
与 TLS 相同。
alpn:可选
alpn=h3
指定 QUIC 连接的 ALPN 字符串。
带 Hysteria2 的代理参数
Hysteria2 是一种基于 QUIC 的代理协议,适用于高吞吐量场景。
Hysteria2 = hysteria2, 1.2.3.4, 443, auth=password, sni=example.com, skip-cert-verify=false, up=10, down=100, alpn=h3
auth:必填。
认证密码/令牌。
sni(默认值:hostname)
sni=exmaple.com
与 TLS 相同。
skip-cert-verify:可选
skip-cert-verify=true
与 TLS 相同。
up:可选(Mbps)
up=10
上传带宽,单位为 Mbps。会被接受并保留,但不会被使用:它服务于 Hysteria2 的 Brutal 拥塞控制,而本引擎并不运行该算法。每个设置了它的策略都会记录一条提示。真正会上线的是 down=,即客户端在认证时声明的速率。
down:可选(Mbps)
down=100
下载带宽,单位为 Mbps。
alpn:可选
alpn=h3
指定 QUIC 连接的 ALPN 字符串。
obfs:可选
obfs=salamander
为 QUIC 流量启用 Salamander 混淆。Salamander 使用 BLAKE2b-256 XOR 对 QUIC 数据包进行混淆,使其能够抵抗 DPI(深度数据包检测)。
obfs-password:可选
obfs-password=your-obfuscation-key
用于 Salamander 混淆的密码/密钥。当设置了 obfs=salamander 时为必填项。
带 WireGuard 的代理参数
WireGuard 是一种现代 VPN 协议。Chute 支持将 WireGuard 作为出站代理服务器,可以通过内联配置或引用命名的 [WireGuard] 段来使用。
内联配置:
WireGuard = wireguard, private-key=base64key, peer-public-key=base64key, self-ip=10.0.0.2, server=1.2.3.4, port=51820
引用配置段(推荐):
WireGuard = wireguard, section-name=wg0
有关 [WireGuard] 段的语法,请参阅 WireGuard 配置。
private-key:必填(仅内联模式)。
Base64 编码的 WireGuard 私钥。
peer-public-key:必填(仅内联模式)。
Base64 编码的 WireGuard 对等公钥。
self-ip:可选(内联模式)。
分配给 WireGuard 接口的本地 IP 地址(例如 10.0.0.2)。
self-ip-v6:可选(内联模式)。
分配给 WireGuard 接口的本地 IPv6 地址。
server:必填。
远程 WireGuard 服务器地址(也可以来自引用的 [WireGuard] 段,而非策略行)。
port:必填。
远程 WireGuard 服务器端口(也可以来自引用的 [WireGuard] 段,而非策略行)。
preshared-key:可选。
Base64 编码的预共享密钥,用于抵御量子计算攻击。
allowed-ips:可选(内联模式)。
allowed-ips="10.0.0.0/8, 192.168.0.0/16"
该对等节点承载的目的地址,写成逗号分隔的 CIDR;值中含有逗号,所以要加引号。去往范围之外的目的地址会被拒绝或丢弃,因为对等节点无法把它路由回来。不写时承载所有目的地址。段形式见 WireGuard 配置。
keepalive:可选(秒)。
keepalive=25
用于 NAT 穿透的持久保活间隔。不写时不发送保活。
mtu:可选。
mtu=1420
WireGuard 接口的 MTU。
reserved:可选。
reserved=0,1,2
WireGuard 数据包头部的保留字节。当前引擎会解析但不生效——BoringTun FFI 不支持该值,它会被忽略并记录一条警告日志。
带 ShadowTLS 的代理参数
ShadowTLS 是一种基于 TLS 的代理协议,将流量封装在标准的 TLS 1.3 会话中。Chute 说的是 ShadowTLS v3:密码以 HMAC 的形式携带在 ClientHello 的 session_id 里,因此认证发生在握手内部,而不是握手之后。
在建立好的隧道内部,Chute 会发出一个免认证的 SOCKS5 握手和一个 SOCKS5 CONNECT,所以ShadowTLS 背后的服务器必须是一个免认证的 SOCKS5 代理。把流量转给 Shadowsocks 端口而不是 SOCKS5 端口的 shadow-tls 部署,会先完成 TLS 握手,然后失败。
ShadowTLS = shadowtls, 1.2.3.4, 443, password=password, sni=example.com, skip-cert-verify=false, fingerprint=chrome
password:必填。
用于 ShadowTLS 握手认证的密码。
sni(默认值:hostname)
sni=example.com
与 TLS 相同。写上它同时也就打开了对掩护证书的校验——见下文。
skip-cert-verify:可选
skip-cert-verify=true
打开校验的正是 sni=。写了 sni=,而 skip-cert-verify 没写或为 false 时,被伪装站点出示的那张证书,其证书链与主机名都会按这个名字校验,校验失败连接也随之失败。没写 sni= 时证书不会被校验,并且每条策略在首次使用时会记一条警告,因为手上唯一的名字是中转服务器的,而它并不是掩护站点的名字。skip-cert-verify=true 在这两种情况下都会跳过校验。
fingerprint:可选
fingerprint=chrome
要模拟的 TLS 客户端指纹。支持的值包括 chrome、firefox、safari、ios、edge、360、qq、android、random,以及 fingerprint 一节列出的其他名字。使用常见的浏览器指纹有助于避免检测。注意 android 和 random 在这里并没有区别——它们会被当作 chrome 处理。none 和 Chute 认不出的取值都会拒绝连接,因为这种握手无法交给系统 TLS 栈完成。
带 MASQUE 的代理参数
MASQUE 是一种基于 HTTP/3 的代理协议,通过 QUIC 隧道传输流量。一条 MASQUE 策略需要 type、host 和 port;认证 token 可选。
ProxyMASQUE = masque, 1.2.3.4, 443, token=auth-token, mode=connect-udp, sni=example.com, alpn=h3, skip-cert-verify=false, mux=true
token:可选
token=auth-token
MASQUE 服务器的可选 Bearer 认证令牌。也接受别名 masque-token=。
mode:可选
mode=connect-udp
为兼容性而接受,但不会改变隧道行为:TCP 流始终使用普通 CONNECT 隧道,UDP 流始终使用 connect-udp。也接受别名 masque-mode=。
mux:可选
mux=true
在共享的 QUIC 连接上启用多路复用。
sni / alpn / skip-cert-verify:可选
与 TLS 相同。由于 MASQUE 基于 QUIC,通常使用 alpn=h3。
带 SSH 的代理参数
完整文档请参阅 SSH 代理。
本页为英文版的翻译。如内容有出入,以英文版为准。