2022-08-24 17:31:32 +08:00
|
|
|
|
V2Ray Transport 是 v2ray 发明的一组私有协议,并污染了其他协议的名称,如 clash 中的 `trojan-grpc`。
|
|
|
|
|
|
|
|
|
|
### 结构
|
|
|
|
|
|
|
|
|
|
```json
|
|
|
|
|
{
|
|
|
|
|
"type": ""
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
可用的传输协议:
|
|
|
|
|
|
|
|
|
|
* HTTP
|
|
|
|
|
* WebSocket
|
|
|
|
|
* QUIC
|
|
|
|
|
* gRPC
|
2023-11-03 01:47:25 +08:00
|
|
|
|
* HTTPUpgrade
|
2022-08-24 17:31:32 +08:00
|
|
|
|
|
|
|
|
|
!!! warning "与 v2ray-core 的区别"
|
|
|
|
|
|
|
|
|
|
* 没有 TCP 传输层, 纯 HTTP 已合并到 HTTP 传输层。
|
|
|
|
|
* 没有 mKCP 传输层。
|
|
|
|
|
* 没有 DomainSocket 传输层。
|
|
|
|
|
|
2022-08-24 18:43:39 +08:00
|
|
|
|
!!! note ""
|
2022-08-24 17:31:32 +08:00
|
|
|
|
|
2022-08-25 09:45:22 +08:00
|
|
|
|
当内容只有一项时,可以忽略 JSON 数组 [] 标签。
|
2022-08-24 17:31:32 +08:00
|
|
|
|
|
|
|
|
|
### HTTP
|
|
|
|
|
|
|
|
|
|
```json
|
|
|
|
|
{
|
|
|
|
|
"type": "http",
|
|
|
|
|
"host": [],
|
|
|
|
|
"path": "",
|
|
|
|
|
"method": "",
|
2023-03-12 23:06:59 +08:00
|
|
|
|
"headers": {},
|
|
|
|
|
"idle_timeout": "15s",
|
|
|
|
|
"ping_timeout": "15s"
|
2022-08-24 17:31:32 +08:00
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
!!! warning "与 v2ray-core 的区别"
|
|
|
|
|
|
2022-08-25 09:45:22 +08:00
|
|
|
|
不强制执行 TLS。如果未配置 TLS,将使用纯 HTTP 1.1。
|
2022-08-24 17:31:32 +08:00
|
|
|
|
|
|
|
|
|
#### host
|
|
|
|
|
|
|
|
|
|
主机域名列表。
|
|
|
|
|
|
2023-12-23 10:54:25 +08:00
|
|
|
|
如果设置,客户端将随机选择,服务器将验证。
|
2022-08-24 17:31:32 +08:00
|
|
|
|
|
|
|
|
|
#### path
|
|
|
|
|
|
2023-12-23 10:54:25 +08:00
|
|
|
|
!!! warning
|
|
|
|
|
|
|
|
|
|
V2Ray 文档称服务端和客户端的路径必须一致,但实际代码允许客户端向路径添加任何后缀。
|
|
|
|
|
sing-box 使用与 V2Ray 相同的行为,但请注意,该行为在 `WebSocket` 和 `HTTPUpgrade` 传输层中不存在。
|
|
|
|
|
|
2022-08-24 17:31:32 +08:00
|
|
|
|
HTTP 请求路径
|
|
|
|
|
|
2023-12-23 10:54:25 +08:00
|
|
|
|
服务器将验证。
|
2022-08-24 17:31:32 +08:00
|
|
|
|
|
|
|
|
|
#### method
|
|
|
|
|
|
|
|
|
|
HTTP 请求方法
|
|
|
|
|
|
2023-12-23 10:54:25 +08:00
|
|
|
|
如果设置,服务器将验证。
|
2022-08-24 17:31:32 +08:00
|
|
|
|
|
|
|
|
|
#### headers
|
|
|
|
|
|
|
|
|
|
HTTP 请求的额外标头
|
|
|
|
|
|
2023-12-23 10:54:25 +08:00
|
|
|
|
如果设置,服务器将写入响应。
|
2022-08-24 17:31:32 +08:00
|
|
|
|
|
2023-03-12 23:06:59 +08:00
|
|
|
|
#### idle_timeout
|
|
|
|
|
|
|
|
|
|
在 HTTP2 服务器中:
|
|
|
|
|
|
|
|
|
|
指定闲置客户端应在多长时间内使用 GOAWAY 帧关闭。PING 帧不被视为活动。
|
|
|
|
|
|
|
|
|
|
在 HTTP2 客户端中:
|
|
|
|
|
|
|
|
|
|
如果连接上没有收到任何帧,指定一段时间后将使用 PING 帧执行健康检查。需要注意的是,PING 响应被视为已接收的帧,因此如果连接上没有其他流量,则健康检查将在每个间隔执行一次。如果值为零,则不会执行健康检查。
|
|
|
|
|
|
|
|
|
|
默认使用零。
|
|
|
|
|
|
|
|
|
|
#### ping_timeout
|
|
|
|
|
|
|
|
|
|
在 HTTP2 客户端中:
|
|
|
|
|
|
|
|
|
|
指定发送 PING 帧后,在指定的超时时间内必须接收到响应。如果在指定的超时时间内没有收到 PING 帧的响应,则连接将关闭。默认超时持续时间为 15 秒。
|
|
|
|
|
|
2022-08-24 17:31:32 +08:00
|
|
|
|
### WebSocket
|
|
|
|
|
|
|
|
|
|
```json
|
|
|
|
|
{
|
|
|
|
|
"type": "ws",
|
|
|
|
|
"path": "",
|
|
|
|
|
"headers": {},
|
|
|
|
|
"max_early_data": 0,
|
|
|
|
|
"early_data_header_name": ""
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
#### path
|
|
|
|
|
|
|
|
|
|
HTTP 请求路径
|
|
|
|
|
|
2023-12-23 10:54:25 +08:00
|
|
|
|
服务器将验证。
|
2022-08-24 17:31:32 +08:00
|
|
|
|
|
|
|
|
|
#### headers
|
|
|
|
|
|
2023-12-23 10:54:25 +08:00
|
|
|
|
HTTP 请求的额外标头
|
|
|
|
|
|
|
|
|
|
如果设置,服务器将写入响应。
|
2022-08-24 17:31:32 +08:00
|
|
|
|
|
|
|
|
|
#### max_early_data
|
|
|
|
|
|
2022-08-25 09:45:22 +08:00
|
|
|
|
请求中允许的最大有效负载大小。默认启用。
|
2022-08-24 17:31:32 +08:00
|
|
|
|
|
|
|
|
|
#### early_data_header_name
|
|
|
|
|
|
|
|
|
|
默认情况下,早期数据在路径而不是标头中发送。
|
|
|
|
|
|
|
|
|
|
要与 Xray-core 兼容,请将其设置为 `Sec-WebSocket-Protocol`。
|
|
|
|
|
|
|
|
|
|
它需要与服务器保持一致。
|
|
|
|
|
|
|
|
|
|
### QUIC
|
|
|
|
|
|
|
|
|
|
```json
|
|
|
|
|
{
|
|
|
|
|
"type": "quic"
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
!!! warning "与 v2ray-core 的区别"
|
|
|
|
|
|
|
|
|
|
没有额外的加密支持:
|
|
|
|
|
它基本上是重复加密。 并且 Xray-core 在这里与 v2ray-core 不兼容。
|
|
|
|
|
|
|
|
|
|
### gRPC
|
|
|
|
|
|
2022-08-27 21:32:20 +08:00
|
|
|
|
!!! note ""
|
2022-08-24 17:31:32 +08:00
|
|
|
|
|
2023-12-03 14:53:22 +08:00
|
|
|
|
默认安装不包含标准 gRPC (兼容性好,但性能较差), 参阅 [安装](/zh/installation/build-from-source/#_5)。
|
2022-08-24 17:31:32 +08:00
|
|
|
|
|
|
|
|
|
```json
|
|
|
|
|
{
|
|
|
|
|
"type": "grpc",
|
2023-03-12 23:06:59 +08:00
|
|
|
|
"service_name": "TunService",
|
|
|
|
|
"idle_timeout": "15s",
|
|
|
|
|
"ping_timeout": "15s",
|
|
|
|
|
"permit_without_stream": false
|
2022-08-24 17:31:32 +08:00
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
#### service_name
|
|
|
|
|
|
2023-03-12 23:06:59 +08:00
|
|
|
|
gRPC 服务名称。
|
|
|
|
|
|
|
|
|
|
#### idle_timeout
|
|
|
|
|
|
|
|
|
|
在标准 gRPC 服务器/客户端:
|
|
|
|
|
|
|
|
|
|
如果传输在此时间段后没有看到任何活动,它会向客户端发送 ping 请求以检查连接是否仍然活动。
|
|
|
|
|
|
|
|
|
|
在默认 gRPC 服务器/客户端:
|
|
|
|
|
|
|
|
|
|
它的行为与 HTTP 传输层中的相应设置相同。
|
|
|
|
|
|
|
|
|
|
#### ping_timeout
|
|
|
|
|
|
|
|
|
|
在标准 gRPC 服务器/客户端:
|
|
|
|
|
|
|
|
|
|
经过一段时间之后,客户端将执行 keepalive 检查并等待活动。如果没有检测到任何活动,则会关闭连接。
|
|
|
|
|
|
|
|
|
|
在默认 gRPC 服务器/客户端:
|
|
|
|
|
|
|
|
|
|
它的行为与 HTTP 传输层中的相应设置相同。
|
|
|
|
|
|
|
|
|
|
#### permit_without_stream
|
|
|
|
|
|
|
|
|
|
在标准 gRPC 客户端:
|
|
|
|
|
|
|
|
|
|
如果启用,客户端传输即使没有活动连接也会发送 keepalive ping。如果禁用,则在没有活动连接时,将忽略 `idle_timeout` 和 `ping_timeout`,并且不会发送 keepalive ping。
|
|
|
|
|
|
|
|
|
|
默认禁用。
|
2023-11-03 01:47:25 +08:00
|
|
|
|
|
|
|
|
|
### HTTPUpgrade
|
|
|
|
|
|
|
|
|
|
```json
|
|
|
|
|
{
|
|
|
|
|
"type": "httpupgrade",
|
|
|
|
|
"host": "",
|
|
|
|
|
"path": "",
|
|
|
|
|
"headers": {}
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
#### host
|
|
|
|
|
|
|
|
|
|
主机域名。
|
|
|
|
|
|
2023-12-23 10:54:25 +08:00
|
|
|
|
服务器将验证。
|
2023-11-03 01:47:25 +08:00
|
|
|
|
|
|
|
|
|
#### path
|
|
|
|
|
|
|
|
|
|
HTTP 请求路径
|
|
|
|
|
|
2023-12-23 10:54:25 +08:00
|
|
|
|
服务器将验证。
|
2023-11-03 01:47:25 +08:00
|
|
|
|
|
|
|
|
|
#### headers
|
|
|
|
|
|
|
|
|
|
HTTP 请求的额外标头。
|
|
|
|
|
|
2023-12-23 10:54:25 +08:00
|
|
|
|
如果设置,服务器将写入响应。
|