8.6 KiB
REALITY
REALITY 是对 TLS 的一种修改,通过借用目标站点的 TLS 外观与握手特征来完成伪装。
REALITY 仅支持与 RAW、XHTTP、gRPC 三种传输方式组合使用。
:::: tip
REALITY 是目前最安全的传输安全方案之一, 且外部看来流量类型和正常上网具有一致性。
启用 REALITY 并且配置合适的 XTLS Vision 流控模式, 可以达到数倍甚至十几倍的性能提升。
::: details 致开发者 REALITY 只是修改了 TLS,客户端的实现只需要轻度修改完全随机的 session id 和自定义证书验证即可,理论上与大多数 TLS 组合完全兼容。 更多信息请参考 REALITY 项目. ::: ::::
RealityObject
RealityObject 对应 StreamSettingsObject 中的 realitySettings 项。
{
// outbound 示例,同样可用于 inbound
"outbounds": [
{
// ...
"streamSettings": {
"security": "reality",
// [!code focus:30]
"realitySettings": {
// 入站(服务端)配置
"show": false,
"target": "example.com:443",
"xver": 0,
"serverNames": ["example.com", "www.example.com"],
"privateKey": "",
"minClientVer": "",
"maxClientVer": "",
"maxTimeDiff": 0,
"shortIds": ["", "0123456789abcdef"],
"mldsa65Seed": "",
"limitFallbackUpload": {
"afterBytes": 0,
"bytesPerSec": 0,
"burstBytesPerSec": 0
},
"limitFallbackDownload": {
"afterBytes": 0,
"bytesPerSec": 0,
"burstBytesPerSec": 0
},
// 出站(客户端)配置
"serverName": "",
"fingerprint": "chrome",
"password": "",
"shortId": "",
"mldsa65Verify": "",
"spiderX": ""
}
}
}
]
}
show: true | false
当值为 true 时,输出调试信息。
::: tip 以下为入站(服务端)配置。 :::
target: string
必填,格式同 VLESS fallbacks 的 dest。
旧称 dest, 当前版本两个字段互为alias
如果 target 支持后量子密钥交换算法 X25519MLKEM768, 那么 REALITY 客户端也会自动使用该后量子算法进行密钥协商。具体是否支持可以使用 xray tls ping cloudflare.com (网址更改为dest, 可以带端口号) 检查。
核心按照这个字段是否存在区分是当前是客户端还是服务端配置,不要在客户端填写,否则会造成识别异常。
::: warning 为了伪装的效果考虑,Xray 对于鉴权失败(非合法 REALITY 请求)的流量,会直接转发至 target. 如果 target 网站的 IP 地址特殊(如使用了 CloudFlare CDN 的网站) 则相当于你的服务器充当了 CloudFlare 的端口转发,可能造成被扫描后偷跑流量的情况。
为了杜绝这种情况,可以考虑前置 Nginx 等方法过滤掉不符合要求的 SNI。
或者也可以考虑配置 limitFallbackUpload 和 limitFallbackDownload,限制其速率。
:::
xver: number
选填,格式同 VLESS fallbacks 的 xver
serverNames: [string]
必填,客户端可用的 serverName 列表,不支持 * 通配符。
一般与 target 保持一致即可,实际的可选值为服务器所接受的任何 SNI(依据 target 本身的配置有所不同),一般是参考是所返回证书的 SAN.
其中可包含空值 "" 代表接受没有SNI的连接。使用此特性不要求 target 具有 IP 证书,只需确保在收到无 SNI 的 Client Hello 其不会拒绝连接。使用这一特性时客户端 serverName 不能为空,需要填入任意有效 IP 地址占位。
可以使用 xray tls ping 观察服务端对无 SNI 请求的响应行为。
privateKey: string
必填,执行 ./xray x25519 生成。
minClientVer: string
选填,客户端 Xray 最低版本,格式为 x.y.z。
maxClientVer: string
选填,客户端 Xray 最高版本,格式为 x.y.z。
maxTimeDiff: number
选填,允许的最大时间差,单位为毫秒。
shortIds: [string]
必填,客户端可用的 shortId 列表,可用于区分不同的客户端。
格式要求见 shortId
若包含空值,客户端 shortId 可为空。
mldsa65Seed: string
仅服务端,为发送给 REALITY 客户端的证书添加额外的后量子签名所使用的私钥,使用 ML-DSA-65 (如果存在可以破解 x25519 的量子计算机,password 泄露可能导致连接可以被 mitm, 该功能可以防止未来的这种攻击)
使用 xray mldsa65 生成使用的公私钥对,服务端配置私钥后只会在证书扩展中添加,不影响旧版客户端或没启用该功能的客户端。
注意,配置该功能后 target 所返回的证书长度必须大于 3500, 因为后量子签名会导致 REALITY 返回的临时证书变大,为了防止产生特征 target 返回的证书也要很大。 可以使用 xray tls ping example.com 进行查看检查。同时为了完美的后量子安全,target 也需要支持后量子密钥交换 X25519MLKEM768, 支持情况一样可以通过前面的命令查看。
limitFallbackUpload/limitFallbackDownload
::: warning 警告:对于 REALITY 最佳实践始终是偷同 ASN 的证书,那么你大概率用不到此功能;只有当你迫不得已偷了 Cloudflare 这种免费 CDN 的证书时,为避免你服务器成为别人加速节点时可考虑开启此功能。
回落限速是一种特征,不建议启用,如果您是面板/一键脚本开发者,务必让这些参数随机化。 :::
::: tip
limitFallbackUpload 和 limitFallbackDownload 为选填,可对未通过验证的回落连接限速,bytesPerSec 默认为 0 即不启用。
原理:针对每个未通过验证的回落连接,当传输了 afterBytes 字节后开启限速算法。 限速采用令牌桶算法,桶的容量是 burstBytesPerSec,每传输一个字节用掉一个令牌,初始 burstBytesPerSec 是满的。 每秒以 bytesPerSec 个令牌填充桶,直到容量满。
举例:afterBytes=10485760, burstBytesPerSec=5242880, bytesPerSec=1048576 代表传输 15MB 后开始限速为 1MB/s,如果暂停传输,5 秒后能突发到 5MB/s,然后又恢复到 1MB/s。
建议:过大的 afterBytes 和 burstBytesPerSec 将起不到限速效果,过小的 bytesPerSec 和 burstBytesPerSec 则十分容易被探测。
应结合被偷网站的资源大小合理设置参数,如果不允许突发,可以把 burstBytesPerSec 设为 0。
:::
afterBytes: number
选填,对回落的 REALITY 连接限速,限制传输指定字节后开始限速,默认为 0。
bytesPerSec: number
选填,对回落的 REALITY 连接限速,限制基准速率(字节/秒),默认为 0 即不启用限速功能。
burstBytesPerSec: number
选填,对回落的 REALITY 连接限速,限制突发速率(字节/秒),大于 bytesPerSec 时生效。
::: tip 以下为出站(客户端)配置。 :::
serverName: string
服务端 serverNames 之一。
特别地,客户端可以将其设置为任意 IP 地址,Xray 将会发送无 SNI 扩展的 Client Hello. 要使用这一特性请确保服务端 serverNames 中包含空值 ""。
fingerprint: string
必填,同 TLSObject。 注意:此处不支持使用 unsafe 禁用 utls, 因为 REALITY 协议实现使用了该库以操作底层 TLS 参数。
shortId: string
服务端 shortIds 之一。
长度为 8 个字节,即 16 个 0~f 的数字字母,可以小于16个,核心将会自动在后面补0, 但位数必须是偶数 (因为一个字节有2位16进制数)
如 aa1234 会被自动补全为 aa12340000000000, 但是aaa1234 则会导致错误。
0也是偶数,所以若服务端的 shordIDs 包含空值 "" ,客户端也可为空。
password: string
必填,服务端私钥对应的公钥。使用 ./xray x25519 -i "服务器私钥" 生成。旧称 publicKey, 为防止误解更名(这个东西地位上确实是 x25519 公钥但是在 REALITY 的设计中是客户端持有,不能公开)
mldsa65Verify
可选,mldsa65 签名验证使用的公钥,非空时使用该公钥检查服务端返回的证书,详情见 "mldsa65Seed" 的描述。
spiderX: string
爬虫初始路径与参数,建议每个客户端不同。