mirror of
https://github.com/MHSanaei/3x-ui.git
synced 2026-10-13 09:25:14 +03:00
ec0a57fc4f
xray-core 26.9.9 dropped finalmask.quicParams.udpHop for the client-only
"udphop" UDP mask {mode, interval, remoteIPs, remotePorts}. The panel kept
writing the old key, so hysteria/xhttp outbounds and JSON-subscription
clients silently stopped hopping ports.
An inbound keeps quicParams.udpHop: it is panel metadata advertised as the
link's mport, and a udphop mask on a listener fails with "udphop: client
only". The conversion (maskcompat.UpgradeLegacyUDPHop, intervalRemote mode)
runs only where a client config is produced:
- UDPHopClientMaskFix seeder over hosts, sub-JSON finalmask, cached
outbound-subscription outbounds and template outbounds (never inbounds);
- GetXrayConfig heals template outbounds at build time;
- the JSON subscription upgrades each generated client stream;
- the Go and frontend link importers upgrade a legacy fm= param.
The finalmask editor gains a side prop: the client side lifts the dead key
on mount and offers a udphop mask editor (also for xhttp's HTTP/3 dial);
the inbound side keeps the UDP Hop switch, labelled as advertised.
209 lines
15 KiB
Plaintext
209 lines
15 KiB
Plaintext
---
|
||
title: 传输方式与安全层
|
||
description: 3x-ui 提供的每一种传输方式——TCP、mKCP、WebSocket、gRPC、HTTPUpgrade、XHTTP、Hysteria、XDRIVE、MASQUE——及其设置项,外加 FinalMask 混淆、sockopt、TLS/REALITY、XTLS-Vision 以及 VLESS 加密。
|
||
icon: Network
|
||
---
|
||
|
||
**传输方式**决定数据包在客户端与服务器之间如何承载,**安全**层决定它们如何被加密和伪装,
|
||
而 **FinalMask** 可以对剩下的部分进行混淆。面板只提供有效的组合;本页列出每一种传输方式的
|
||
设置项以及面板强制执行的规则。
|
||
|
||
## 传输方式
|
||
|
||
在入站/出站表单中选择传输方式(入站的 `network`)。每种网络会在传输链路上写入它自己的
|
||
设置键(`tcpSettings`、`kcpSettings`……)。
|
||
|
||
| 传输方式 | 设置键 | 适用场景 |
|
||
| --------------- | --------------------- | ---------------------------------------------------------------------- |
|
||
| **TCP (Raw)** | `tcpSettings` | 开销最低。是 REALITY + XTLS-Vision 以及回落的基础;可选的 HTTP/1.1 头部伪装。 |
|
||
| **mKCP** | `kcpSettings` | 基于 **UDP** 的可靠协议——以带宽换取在丢包链路上更低的延迟。承载不了 TLS/REALITY。 |
|
||
| **WebSocket** | `wsSettings` | 可穿透 CDN 和 HTTP 反向代理;兼容性极佳。 |
|
||
| **gRPC** | `grpcSettings` | 基于 HTTP/2;多路复用效果好,通过 Nginx 代理也很干净。 |
|
||
| **HTTPUpgrade** | `httpupgradeSettings` | 对 CDN 友好的 HTTP/1.1 `Upgrade`;比完整的 WebSocket 更轻量。 |
|
||
| **XHTTP** | `xhttpSettings` | 现代的流多路复用 HTTP 传输;对 CDN 友好且支持 REALITY。 |
|
||
| **Hysteria** | `hysteriaSettings` | 基于 QUIC 的传输——仅用于 **Hysteria2** 协议。 |
|
||
| **XDRIVE** | `xdriveSettings` | 通过共享云存储(Google Drive、本地文件夹或任意 HTTP 存储 API)中的文件传输数据流。 |
|
||
| **MASQUE** | `masqueSettings` | 基于 HTTP/3 或 HTTP/2 的 CONNECT-IP——仅用于 **MASQUE** 协议。参见 [MASQUE](/docs/config/masque)。 |
|
||
|
||
<Callout type="info">
|
||
**WireGuard** 和 **Tunnel**(dokodemo-door)入站不提供传输方式选择器——它们的传输流
|
||
只承载安全层/sockopt。早期的面板还提供过一个原始的 **HTTP/2 (`http`)** 传输;它已被
|
||
**XHTTP** 取代,不再可供选择。
|
||
</Callout>
|
||
|
||
### TCP (Raw) — `tcpSettings`
|
||
|
||
| 字段 | 默认值 | 含义 |
|
||
| ------------------------------ | ------- | ----------------------------------------------------------------------- |
|
||
| `acceptProxyProtocol` | `false` | 接受来自上游代理的 PROXY 协议,以保留真实的客户端 IP。 |
|
||
| `header.type` | `none` | `none`,或 `http`(用于 HTTP/1.1 伪装)。 |
|
||
| `header.request` / `response` | — | 当 `type: http` 时:方法、路径、版本以及一个模仿正常 HTTP 交互的头部映射。 |
|
||
|
||
### mKCP — `kcpSettings`
|
||
|
||
| 字段 | 默认值 | 含义 |
|
||
| ------------------ | ----------- | ---------------------------------------------------------------- |
|
||
| `mtu` | `1350` | 最大传输单元,单位字节(576–1460)。 |
|
||
| `tti` | `20` | 传输时间间隔,单位毫秒(10–100)。越低 = 响应越快,开销越大。 |
|
||
| `uplinkCapacity` | `5` | 上行带宽预算,单位 **MB/s**。 |
|
||
| `downlinkCapacity` | `20` | 下行带宽预算,单位 **MB/s**。 |
|
||
| `cwndMultiplier` | `1` | 拥塞窗口乘数;在优质链路上调高可以更激进地发送。 |
|
||
| `maxSendingWindow` | `2097152` | 在途数据包数量的上限。 |
|
||
|
||
<Callout type="info">
|
||
mKCP 无法承载 TLS 或 REALITY。要伪装它,可以添加一个 **FinalMask** UDP 掩码——
|
||
`mkcp-legacy` 掩码重现了旧版 Xray 存储在 `kcpSettings.header`/`seed` 中的经典头部
|
||
混淆(这些字段在这里已不复存在)。
|
||
</Callout>
|
||
|
||
### WebSocket — `wsSettings`
|
||
|
||
| 字段 | 默认值 | 含义 |
|
||
| --------------------- | ------- | ---------------------------------------------------------------- |
|
||
| `path` | `/` | 请求路径——当多个服务共用一个主机时可据此路由。 |
|
||
| `host` | _(无)_ | `Host` 头部覆盖(在 CDN 后面很有用)。 |
|
||
| `headers` | `{}` | 额外的请求头。 |
|
||
| `heartbeatPeriod` | `0` | keepalive ping 之间的秒数;`0` 表示禁用。 |
|
||
| `acceptProxyProtocol` | `false` | 接受来自上游的 PROXY 协议。 |
|
||
|
||
### gRPC — `grpcSettings`
|
||
|
||
| 字段 | 默认值 | 含义 |
|
||
| ------------- | ------- | --------------------------------------------------------- |
|
||
| `serviceName` | _(无)_ | gRPC 服务路径;作用类似一个秘密路由。 |
|
||
| `authority` | _(无)_ | `:authority` 伪头部覆盖。 |
|
||
| `multiMode` | `false` | 在一条连接上多路复用多个流。 |
|
||
|
||
### HTTPUpgrade — `httpupgradeSettings`
|
||
|
||
| 字段 | 默认值 | 含义 |
|
||
| --------------------- | ------- | --------------------------------------------- |
|
||
| `path` | `/` | 请求路径。 |
|
||
| `host` | _(无)_ | `Host` 头部覆盖。 |
|
||
| `headers` | `{}` | 额外的请求头。 |
|
||
| `acceptProxyProtocol` | `false` | 接受来自上游的 PROXY 协议。 |
|
||
|
||
HTTPUpgrade 是一次性的 HTTP/1.1 `Upgrade`,没有 WebSocket 帧——因此没有心跳字段。
|
||
|
||
### XHTTP — `xhttpSettings`
|
||
|
||
XHTTP(SplitHTTP)有一组庞大的字段;面板会填入合理的默认值。你通常会改动的那些:
|
||
|
||
| 字段 | 默认值 | 含义 |
|
||
| ---------------------- | ----------- | ---------------------------------------------------------------------- |
|
||
| `path` | `/` | 请求路径。 |
|
||
| `host` | _(无)_ | `Host` 头部覆盖。 |
|
||
| `mode` | `auto` | `auto`、`packet-up`、`stream-up` 或 `stream-one`。`packet-up` 对 CDN 兼容性最好;`stream-*` 延迟更低。 |
|
||
| `xPaddingBytes` | `100-1000` | 用于模糊数据包大小的随机填充范围。 |
|
||
| `scMaxBufferedPosts` | `30` | 服务端对上传 POST 的缓冲区。 |
|
||
| `scStreamUpServerSecs` | `20-80` | stream-up 服务端窗口(短横线范围)。 |
|
||
| `xmux` (`enableXmux`) | _(关闭)_ | 连接多路复用——`maxConcurrency` `16-32`、`maxConnections` `6`……为高并发场景开启。 |
|
||
|
||
Session-ID 字段(`sessionIDPlacement`、`sessionIDKey`、`sessionIDTable`、
|
||
`sessionIDLength`)以及 `scMin/MaxEachPostBytes` 旋钮属于高级项;除非要匹配某个特定的
|
||
上游,否则保持为空。
|
||
|
||
### Hysteria — `hysteriaSettings`
|
||
|
||
仅当协议为 **Hysteria2** 时有效。
|
||
|
||
| 字段 | 默认值 | 含义 |
|
||
| ---------------- | ------- | ----------------------------------------------------------------------- |
|
||
| `version` | `2` | Hysteria 协议版本。 |
|
||
| `auth` | _(无)_ | 共享的认证字符串。 |
|
||
| `udpIdleTimeout` | `60` | 空闲 UDP 会话被丢弃前的秒数(2–600)。 |
|
||
| `masquerade` | — | 伪装成一个 HTTP/3 服务器:`type` 为 `proxy`/`file`/`string`,配合 `url`/`dir`/`content`,外加 `headers` 与 `statusCode`。 |
|
||
|
||
### XDRIVE — `xdriveSettings`
|
||
|
||
XDRIVE 把数据流作为文件存放在双方都能访问的文件夹中:服务端轮询该文件夹,而不是在端口上接受连接。
|
||
双方必须使用**相同**的服务、文件夹和密钥,因此 JSON 订阅会把它们下发给每个客户端;XDRIVE 入站不生成分享链接或 Clash 条目。
|
||
|
||
| 字段 | 默认值 | 含义 |
|
||
| -------------- | -------------- | ---- |
|
||
| `service` | `Google Drive` | `Google Drive`、`local`(磁盘上的文件夹)或 `template`(任意 HTTP 存储 API)。 |
|
||
| `remoteFolder` | — | 存放会话文件的文件夹。 |
|
||
| `secrets` | — | Google Drive:恰好三项,依次为 ClientID、ClientSecret、RefreshToken。Template:以 `{secret0}`、`{secret1}`… 引用的值。 |
|
||
| `template` | — | 仅用于 template 服务:存储 API 的 `auth`、`put`、`get`、`list` 和 `delete` 操作。 |
|
||
| 调优参数 | 内核默认值 | `segmentBytes`(512 KiB)、`flushIntervalMs`(20)、`pollIntervalMs`/`maxPollIntervalMs`(50/500)、`eagerWindowMs`(2000)、`holeTimeoutMs`(30000)、`sessionTtlSeconds`(300)、`concurrency`(8)。 |
|
||
|
||
可选的**前置地址/端口**(stream 级的 `address`/`port`)是连接存储 API 时使用的域前置;TLS 中仍使用 API 主机名。
|
||
XDRIVE 没有自己的 TLS/REALITY 层——其流量就是存储 API 自身的 HTTPS。
|
||
|
||
## FinalMask — 末层混淆
|
||
|
||
**FinalMask** 在传输方式和安全层**之后**包裹流量,因此它既能伪装那些承载不了 TLS 的
|
||
传输(如 mKCP),也能在 TLS 之上再加一层外壳。掩码按方向分别配置:
|
||
|
||
- **TCP 掩码** — `fragment`、`sudoku`、`header-custom`、`xmc`(把流量伪装成
|
||
Minecraft 协议;密码必填,主机名和玩家用户名可选)。
|
||
- **UDP 掩码** — `salamander`、`mkcp-legacy`、`header-custom`、`xdns`、`xicmp`、
|
||
`noise`、`sudoku`、`realm`,以及仅限客户端的 `udphop`。(`mkcp-legacy` 重现旧版
|
||
mKCP 的头部混淆;`udphop` 按时间间隔或按连接轮换远端端口——也可轮换远端 IP——以规避
|
||
端口封锁。)
|
||
- **QUIC 参数** — 拥塞控制(`reno`、`bbr`、`brutal`、`force-brutal`)、Brutal 上/下行
|
||
速率以及接收窗口调优。在入站上,**UDP Hop** 设置向客户端公布的端口范围(分享链接的
|
||
`mport` 和 JSON 订阅中的 `udphop` 掩码);服务器本身仍只监听自己的端口。自 Xray
|
||
26.9.9 起客户端只通过 `udphop` 掩码跳端口,因此面板会把客户端旧的
|
||
`quicParams.udpHop` 转换为该掩码。
|
||
|
||
FinalMask 取代了旧版 Xray 构建中暴露的、按每种传输各自实现的 `header`/`seed` 混淆。
|
||
|
||
## sockopt — 底层套接字选项
|
||
|
||
`sockopt` 与任意传输方式一同生效,用于调优底层套接字。最有用的字段:
|
||
|
||
| 字段 | 默认值 | 含义 |
|
||
| --------------------- | ------- | ---------------------------------------------------------------- |
|
||
| `tcpFastOpen` | `false` | 启用 TCP Fast Open。 |
|
||
| `tcpcongestion` | `bbr` | 拥塞控制:`bbr`、`cubic` 或 `reno`。 |
|
||
| `tproxy` | `off` | 透明代理模式:`off`、`redirect` 或 `tproxy`。 |
|
||
| `domainStrategy` | `AsIs` | 地址如何解析(`UseIP`、`ForceIPv4`……)。 |
|
||
| `dialerProxy` | _(无)_ | 将此出站的拨号链式经过另一个出站标签。 |
|
||
| `interface` | _(无)_ | 绑定到指定的网络接口。 |
|
||
| `mark` | `0` | 用于策略路由的 SO_MARK(`0` = 未设置)。 |
|
||
|
||
保持为 `0` 的数值字段不会写入传输链路,因此 Xray 会沿用操作系统的默认值。高级条目
|
||
(`happyEyeballs`、`customSockopt[]`、keepalive 计时器)可用于特殊场景。
|
||
|
||
## 安全
|
||
|
||
安全层为 **`none`**、**`tls`** 或 **`reality`** 三者之一,并遵循以下适用规则:
|
||
|
||
| 安全层 | 适用的传输方式 | 适用的协议 |
|
||
| ----------- | -------------------------------------------- | --------------------------------------------------- |
|
||
| **TLS** | `tcp`, `ws`, `grpc`, `httpupgrade`, `xhttp` | VLESS、VMess、Trojan、Shadowsocks(Hysteria2 始终为 TLS) |
|
||
| **REALITY** | `tcp`, `grpc`, `xhttp` | VLESS、Trojan |
|
||
|
||
mKCP 和 Hysteria 不使用单独的 TLS/REALITY 层——mKCP 以明文运行(用 FinalMask 混淆),
|
||
而 Hysteria 在设计上就是 QUIC/TLS。REALITY 会把你的服务器伪装成一个真实的 TLS 站点,
|
||
且无需证书——参见 [REALITY](/docs/config/reality)。
|
||
|
||
## XTLS-Vision 流控
|
||
|
||
`xtls-rprx-vision` 流控既快速又能抵抗 DPI。在以下任一情况下,它都可用于 **VLESS**:
|
||
|
||
- 传输方式为裸 **TCP**,安全层为 **TLS** 或 **REALITY**(经典的 XTLS-Vision),或者
|
||
- 传输方式为 **XHTTP** 且启用了 VLESS 加密(见下文)。
|
||
|
||
请在 VLESS **客户端**上设置流控,而不是在入站上。在 TCP 上使用经典 Vision 时,一旦某个
|
||
客户端使用该流控,面板还可以提供一个 **Vision seed**。
|
||
|
||
## VLESS 加密(ML-KEM)
|
||
|
||
VLESS 支持后量子**加密**(ML-KEM / `mlkem768x25519`),它存储在入站的 `decryption`
|
||
(服务器)以及客户端的 `encryption`(用于生成链接)中。启用后,它会解锁在 XHTTP
|
||
之上的 Vision 流控。请从面板的 VLESS 设置中生成密钥。
|
||
|
||
## Shadowsocks 加密方式
|
||
|
||
Shadowsocks 入站同时支持经典加密方式和 **Shadowsocks-2022**(以 `2022-blake3-`
|
||
开头的方法名)。大多数加密方式支持多用户;`2022-blake3-chacha20-poly1305`
|
||
为单用户。
|
||
|
||
<Callout type="info">
|
||
传输方式和安全层必须在两端一致。客户端的分享链接会对它们进行编码(`type=ws`、
|
||
`security=reality`、`flow=xtls-rprx-vision`……)——可使用
|
||
[分享链接检查器](/docs/config/share-links)解码任意链接。
|
||
</Callout>
|