From 4cae0effb7f9d15c5b2eb6e9f0939dc84370c56d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A3=8E=E6=89=87=E6=BB=91=E7=BF=94=E7=BF=BC?= Date: Tue, 1 Oct 2024 18:51:39 +0000 Subject: [PATCH] Rename h2 and tcp transport --- docs/.vuepress/config/sidebar/zh.ts | 4 +- docs/config/transport.md | 16 ++- docs/config/transports/{h2.md => http.md} | 21 +-- docs/config/transports/raw.md | 148 ++++++++++++++++++++++ docs/config/transports/tcp.md | 147 +-------------------- 5 files changed, 172 insertions(+), 164 deletions(-) rename docs/config/transports/{h2.md => http.md} (75%) create mode 100644 docs/config/transports/raw.md diff --git a/docs/.vuepress/config/sidebar/zh.ts b/docs/.vuepress/config/sidebar/zh.ts index 1e023a1a7..1a6355168 100755 --- a/docs/.vuepress/config/sidebar/zh.ts +++ b/docs/.vuepress/config/sidebar/zh.ts @@ -64,9 +64,9 @@ export const sidebarZh: SidebarConfig = { text: '底层传输', children: [ '/config/transports/grpc.md', - '/config/transports/h2.md', + '/config/transports/http.md', '/config/transports/mkcp.md', - '/config/transports/tcp.md', + '/config/transports/raw.md', '/config/transports/websocket.md', '/config/transports/httpupgrade.md', '/config/transports/splithttp.md' diff --git a/docs/config/transport.md b/docs/config/transport.md index 9f958cba2..a031ba80b 100644 --- a/docs/config/transport.md +++ b/docs/config/transport.md @@ -41,9 +41,13 @@ } ``` -> `network`: "tcp" | "ws" | "h2" | "grpc" | "kcp" | "httpupgrade" | "splithttp" +> `network`: "raw" | "ws" | "h2" | "grpc" | "kcp" | "httpupgrade" | "splithttp" -连接的数据流所使用的传输方式类型,默认值为 `"tcp"` +连接的数据流所使用的传输方式类型,默认值为 `"raw"` + +::: tip +v24.9.30 版本后,为了更贴近实际行为,tcp传输方式已更名为raw, 为了兼容性,`"network": "raw"` 和 "network": "tcp", `rawSettings`和`tcpSettings` 互为别名 +::: ::: tip "h2" 可以写成 "http","grpc" 可以写成 "gun","kcp" 可以写成 "mkcp"。 @@ -70,9 +74,9 @@ Reality 是目前最安全的传输加密方案, 且外部看来流量类型和 达到数倍甚至十几倍的性能提升。 ::: -> `tcpSettings`: [TcpObject](./transports/tcp.md) +> `rawSettings`: [TcpObject](./transports/raw.md) -当前连接的 TCP 配置,仅当此连接使用 TCP 时有效。 +当前连接的 raw 配置,仅当此连接使用 raw 时有效。 > `kcpSettings`: [KcpObject](./transports/mkcp.md) @@ -82,9 +86,9 @@ Reality 是目前最安全的传输加密方案, 且外部看来流量类型和 当前连接的 WebSocket 配置,仅当此连接使用 WebSocket 时有效。 -> `httpSettings`: [HttpObject](./transports/h2.md) +> `httpSettings`: [HttpObject](./transports/http.md) -当前连接的 HTTP/2 配置,仅当此连接使用 HTTP/2 时有效。 +当前连接的 HTTP 配置,仅当此连接使用 HTTP 时有效。 > `grpcSettings`: [GRPCObject](./transports/grpc.md) diff --git a/docs/config/transports/h2.md b/docs/config/transports/http.md similarity index 75% rename from docs/config/transports/h2.md rename to docs/config/transports/http.md index 1c70a7e06..0acd208c5 100644 --- a/docs/config/transports/h2.md +++ b/docs/config/transports/http.md @@ -1,23 +1,24 @@ -# HTTP/2 +# HTTP -基于 HTTP/2 的传输方式。 +基于 HTTP/2 或 HTTP/3 的传输方式。 -它完整按照 HTTP/2 标准实现,可以通过其它的 HTTP 服务器(如 Nginx)进行中转。 +它完整按照 HTTP 标准实现,可以通过其它的 HTTP 服务器(如 Nginx)进行中转。 -由 HTTP/2 的建议,客户端和服务器必须同时开启 TLS 才可以正常使用这个传输方式。 +客户端必须开启 TLS 才可以正常使用这个传输方式。 -HTTP/2 内置多路复用,不建议使用 HTTP/2 时启用 mux.cool。 +HTTP/2和3 内置多路复用,不建议使用时启用 mux.cool。 ::: tip 当前版本的 HTTP/2 的传输方式并不强制要求**入站**(**服务端**)有 TLS 配置. -这使得可以在特殊用途的分流部署环境中,由外部网关组件完成 TLS 层对话,Xray 作为后端应用,网关和 Xray 间使用称为 `h2c` 的明文 http/2 进行通讯。 +这使得可以在特殊用途的分流部署环境中,由外部网关组件完成 TLS 层对话,Xray 作为后端应用,网关和 Xray 间使用明文HTTP进行通讯。 +::: + +::: tip +当alpn有且仅有 `h3` 时,该传输才会工作在h3模式。 ::: ::: warning -⚠️ 如果你正在使用回落,请注意下列事项: - -- 请确认 (x)tlsSettings.alpn 中包含 h2,否则 HTTP/2 无法完成 TLS 握手。 -- HTTP/2 无法通过 Path 进行分流,建议使用 SNI 分流。 +- HTTP/2 和 HTTP/3 无法通过xray的回落 Path 进行分流,不建议使用回落分流。 ::: ## HttpObject diff --git a/docs/config/transports/raw.md b/docs/config/transports/raw.md new file mode 100644 index 000000000..1f0e4dc60 --- /dev/null +++ b/docs/config/transports/raw.md @@ -0,0 +1,148 @@ +# RAW + +更名自曾经的tcp传输(原名称稍有歧义) RAW传输出站发送的原始数据,核心不使用其他协议(如 websocket)承载其流量。 + +可以和各种协议有多种组合模式. + +## RawObject + +`RawObject` 对应传输配置的 `rawSettings` 项。 + +```json +{ + "acceptProxyProtocol": false, + "header": { + "type": "none" + } +} +``` + +> `acceptProxyProtocol`: true | false + +仅用于 inbound,指示是否接收 PROXY protocol。 + +[PROXY protocol](https://www.haproxy.org/download/2.2/doc/proxy-protocol.txt) 专用于传递请求的真实来源 IP 和端口,**若你不了解它,请先忽略该项**。 + +常见的反代软件(如 HAProxy、Nginx)都可以配置发送它,VLESS fallbacks xver 也可以发送它。 + +填写 `true` 时,最底层 TCP 连接建立后,请求方必须先发送 PROXY protocol v1 或 v2,否则连接会被关闭。 + +默认值为 `false`。 + +> `header`: [NoneHeaderObject](#noneheaderobject) | [HttpHeaderobject](#httpheaderobject) + +数据包头部伪装设置,默认值为 `NoneHeaderObject`。 + +::: tip +HTTP 伪装无法被其它 HTTP 服务器(如 Nginx)分流,但可以被 VLESS fallbacks path 分流。 +::: + +### NoneHeaderObject + +不进行伪装 + +```json +{ + "type": "none" +} +``` + +> `type`: "none" + +指定不进行伪装 + +### HttpHeaderObject + +HTTP 伪装配置必须在对应的入站出站连接上同时配置,且内容必须一致。 + +```json +{ + "type": "http", + "request": {}, + "response": {} +} +``` + +> `type`: "http" + +指定进行 HTTP 伪装 + +> `request`: [HTTPRequestObject](#httprequestobject) + +HTTP 请求 + +> `response`: [HTTPResponseObject](#httpresponseobject) + +HTTP 响应 + +#### HTTPRequestObject + +```json +{ + "version": "1.1", + "method": "GET", + "path": ["/"], + "headers": { + "Host": ["www.baidu.com", "www.bing.com"], + "User-Agent": [ + "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36", + "Mozilla/5.0 (iPhone; CPU iPhone OS 10_0_2 like Mac OS X) AppleWebKit/601.1 (KHTML, like Gecko) CriOS/53.0.2785.109 Mobile/14A456 Safari/601.1.46" + ], + "Accept-Encoding": ["gzip, deflate"], + "Connection": ["keep-alive"], + "Pragma": "no-cache" + } +} +``` + +> `version`: string + +HTTP 版本,默认值为 `"1.1"`。 + +> `method`: string + +HTTP 方法,默认值为 `"GET"`。 + +> `path`: \[ string \] + +路径,一个字符串数组。默认值为 `["/"]`。当有多个值时,每次请求随机选择一个值。 + +> `headers`: map{ string, \[ string \]} + +HTTP 头,一个键值对,每个键表示一个 HTTP 头的名称,对应的值是一个数组。 + +每次请求会附上所有的键,并随机选择一个对应的值。默认值见上方示例。 + +#### HTTPResponseObject + +```json +{ + "version": "1.1", + "status": "200", + "reason": "OK", + "headers": { + "Content-Type": ["application/octet-stream", "video/mpeg"], + "Transfer-Encoding": ["chunked"], + "Connection": ["keep-alive"], + "Pragma": "no-cache" + } +} +``` + +> `version`: string + +HTTP 版本,默认值为 `"1.1"`。 + +> `status`: string + +HTTP 状态,默认值为 `"200"`。 + +> `reason`: string + +HTTP 状态说明,默认值为 `"OK"`。 + +> `headers`: map {string, \[ string \]} + +HTTP 头,一个键值对,每个键表示一个 HTTP 头的名称,对应的值是一个数组。 + +每次请求会附上所有的键,并随机选择一个对应的值。默认值见上方示例。 diff --git a/docs/config/transports/tcp.md b/docs/config/transports/tcp.md index 4c1b3aefa..08d5899de 100644 --- a/docs/config/transports/tcp.md +++ b/docs/config/transports/tcp.md @@ -1,148 +1,3 @@ # TCP -TCP 传输模式是目前推荐使用的传输模式之一. - -可以和各种协议有多种组合模式. - -## TcpObject - -`TcpObject` 对应传输配置的 `tcpSettings` 项。 - -```json -{ - "acceptProxyProtocol": false, - "header": { - "type": "none" - } -} -``` - -> `acceptProxyProtocol`: true | false - -仅用于 inbound,指示是否接收 PROXY protocol。 - -[PROXY protocol](https://www.haproxy.org/download/2.2/doc/proxy-protocol.txt) 专用于传递请求的真实来源 IP 和端口,**若你不了解它,请先忽略该项**。 - -常见的反代软件(如 HAProxy、Nginx)都可以配置发送它,VLESS fallbacks xver 也可以发送它。 - -填写 `true` 时,最底层 TCP 连接建立后,请求方必须先发送 PROXY protocol v1 或 v2,否则连接会被关闭。 - -默认值为 `false`。 - -> `header`: [NoneHeaderObject](#noneheaderobject) | [HttpHeaderobject](#httpheaderobject) - -数据包头部伪装设置,默认值为 `NoneHeaderObject`。 - -::: tip -HTTP 伪装无法被其它 HTTP 服务器(如 Nginx)分流,但可以被 VLESS fallbacks path 分流。 -::: - -### NoneHeaderObject - -不进行伪装 - -```json -{ - "type": "none" -} -``` - -> `type`: "none" - -指定不进行伪装 - -### HttpHeaderObject - -HTTP 伪装配置必须在对应的入站出站连接上同时配置,且内容必须一致。 - -```json -{ - "type": "http", - "request": {}, - "response": {} -} -``` - -> `type`: "http" - -指定进行 HTTP 伪装 - -> `request`: [HTTPRequestObject](#httprequestobject) - -HTTP 请求 - -> `response`: [HTTPResponseObject](#httpresponseobject) - -HTTP 响应 - -#### HTTPRequestObject - -```json -{ - "version": "1.1", - "method": "GET", - "path": ["/"], - "headers": { - "Host": ["www.baidu.com", "www.bing.com"], - "User-Agent": [ - "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36", - "Mozilla/5.0 (iPhone; CPU iPhone OS 10_0_2 like Mac OS X) AppleWebKit/601.1 (KHTML, like Gecko) CriOS/53.0.2785.109 Mobile/14A456 Safari/601.1.46" - ], - "Accept-Encoding": ["gzip, deflate"], - "Connection": ["keep-alive"], - "Pragma": "no-cache" - } -} -``` - -> `version`: string - -HTTP 版本,默认值为 `"1.1"`。 - -> `method`: string - -HTTP 方法,默认值为 `"GET"`。 - -> `path`: \[ string \] - -路径,一个字符串数组。默认值为 `["/"]`。当有多个值时,每次请求随机选择一个值。 - -> `headers`: map{ string, \[ string \]} - -HTTP 头,一个键值对,每个键表示一个 HTTP 头的名称,对应的值是一个数组。 - -每次请求会附上所有的键,并随机选择一个对应的值。默认值见上方示例。 - -#### HTTPResponseObject - -```json -{ - "version": "1.1", - "status": "200", - "reason": "OK", - "headers": { - "Content-Type": ["application/octet-stream", "video/mpeg"], - "Transfer-Encoding": ["chunked"], - "Connection": ["keep-alive"], - "Pragma": "no-cache" - } -} -``` - -> `version`: string - -HTTP 版本,默认值为 `"1.1"`。 - -> `status`: string - -HTTP 状态,默认值为 `"200"`。 - -> `reason`: string - -HTTP 状态说明,默认值为 `"OK"`。 - -> `headers`: map {string, \[ string \]} - -HTTP 头,一个键值对,每个键表示一个 HTTP 头的名称,对应的值是一个数组。 - -每次请求会附上所有的键,并随机选择一个对应的值。默认值见上方示例。 +v24.9.30 版本后,为了更贴近实际行为,tcp传输方式已更名为[raw](./raw.md), 为了兼容性,`"network": "raw"` 和 "network": "tcp", `rawSettings`和`tcpSettings` 互为别名 \ No newline at end of file