Skip to content

Commit c814f56

Browse files
authored
Rename and update ECH
1 parent 3adff36 commit c814f56

File tree

4 files changed

+31
-14
lines changed

4 files changed

+31
-14
lines changed

docs/.vuepress/config/sidebar/zh.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ export const sidebarZh: SidebarConfig = {
3434
{
3535
text: "入站协议",
3636
children: [
37-
"/config/inbounds/dokodemo.md",
37+
"/config/inbounds/tunnel(dokodemo).md",
3838
"/config/inbounds/http.md",
3939
"/config/inbounds/shadowsocks.md",
4040
"/config/inbounds/socks.md",

docs/config/inbounds/index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
Xray 支持以下入站协议:
44

5-
- [Dokodemo-Door](../inbounds/dokodemo.md)
5+
- [Dokodemo-Door](../inbounds/tunnel(dokodemo).md)
66
- [HTTP](../inbounds/http.md)
77
- [Shadowsocks](../inbounds/shadowsocks.md)
88
- [Socks](../inbounds/socks.md)

docs/config/inbounds/dokodemo.md renamed to docs/config/inbounds/tunnel(dokodemo).md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
# Dokodemo-Door
1+
# Tunnel
22

3-
Dokodemo door(任意门)可以监听一个本地端口,并把所有进入此端口的数据发送至指定服务器的一个端口,从而达到端口映射的效果。
3+
Tunnel, 或称 Dokodemo door(任意门)可以监听一个本地端口,并把所有进入此端口的数据通过 outbound 发送至指定服务器的一个端口,从而达到端口映射的效果。
44

55
## InboundConfigurationObject
66

@@ -16,13 +16,13 @@ Dokodemo door(任意门)可以监听一个本地端口,并把所有进入
1616

1717
> `address`: address
1818
19-
将流量转发到此地址。可以是一个 IP 地址,形如 `"1.2.3.4"`,或者一个域名,形如 `"xray.com"`。字符串类型
19+
将流量转发到此地址。可以是一个 IP 地址,形如 `"1.2.3.4"`,或者一个域名,形如 `"xray.com"`。字符串类型,默认为 `"localhost"`.
2020

2121
`followRedirect`(见下文)为 `true` 时,`address` 可为空。
2222

2323
> `port`: number
2424
25-
将流量转发到目标地址的指定端口,范围 \[1, 65535\],数值类型。必填参数
25+
将流量转发到目标地址的指定端口,范围 \[0, 65535\],数值类型。不填或者为 0 时默认为监听地址
2626

2727
> `network`: "tcp" | "udp" | "tcp,udp"
2828

docs/config/transport.md

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -117,8 +117,9 @@ Reality 是目前最安全的传输加密方案, 且外部看来流量类型和
117117
"pinnedPeerCertificateChainSha256": [""],
118118
"curvePreferences": [""],
119119
"masterKeyLog": "",
120+
"echServerKeys": "",
120121
"echConfigList": "",
121-
"echServerKeys": ""
122+
"echForceQuery": ""
122123
}
123124
```
124125

@@ -269,25 +270,41 @@ x25519Kyber768Draft00
269270
270271
(Pre)-Master-Secret log 文件路径,可用于Wireshark等软件解密Xray发送的TLS连接。
271272

273+
> `echServerKeys` : string
274+
275+
仅服务端参数,用于服务端启用 Encrypted Client Hello.
276+
277+
使用 `xray tls ech --serverName example.com` 生成可用的 ECH Server Key 和对应的 Config, 其中 example.com 是在 SNI 被加密用用于暴露在外部的 SNI, 可以随便填。Server Key 包含了 ECHConfig, 如果你不慎弄丢了客户端用的 Config 可以使用 `xray tls ech -i "你的 server key"` 重新获得。你可以把它发布到 DNS 的 HTTPS 记录中,格式参考[这里](https://dns.google/query?name=encryptedsni.com&rr_type=HTTPS) 或者 RFC 9460
278+
279+
注意服务端配置 ECH 后仍然接受正常的非 ECH 连接。
280+
272281
> `echConfigList` : string
273282
274283
仅客户端参数,配置 ECHConfig, 不为空则代表客户端启用 Encrypted Client Hello. 支持两种格式
275284

276285
第一种直接 固定 ECHConfig, 如 `"AF7+DQBaAAAgACA51i3Ssu4wUMV4FNCc8iRX5J+YC4Bhigz9sacl2lCfSQAkAAEAAQABAAIAAQADAAIAAQACAAIAAgADAAMAAQADAAIAAwADAAtleGFtcGxlLmNvbQAA"`
277286

278-
第二种从 DNS 服务器查询,比方说使用 CDN 时可以通过 HTTPS 记录动态获取其配置的 ECHConfig, Xray 会遵守服务器下发的 TTL,查询目标会是配置的 SNI, 或者配置的服务器域名(如果 SNI 为空且目标为一个域名)
287+
第二种从 DNS 服务器查询,比方说使用 CDN 时可以通过 HTTPS 记录动态获取其配置的 ECHConfig, 如果获取到有效 ECH Config, Xray 会遵守服务器下发的 TTL,查询目标会是配置的 SNI, 或者配置的服务器域名(如果 SNI 为空且目标为一个域名)
279288

280-
基础格式为 `"udp://1.1.1.1"` 表示从 UDP DNS 1.1.1.1 查询,也可以使用 `"https://1.1.1.1/dns-query"` 这样的格式,代表使用 DOH 进行查询(实际使用请替换成当地可用的服务器). 上述两种均支持修改端口号,如 `udp://1.1.1.1:53`,没写会按照协议默认 53/443.
289+
基础格式为 `"udp://1.1.1.1"` 表示从 UDP DNS 1.1.1.1 查询,也可以使用 `"https://1.1.1.1/dns-query"`(或者 `h2c://`) 这样的格式,代表使用 DOH(h2c) 进行查询(实际使用请替换成当地可用的服务器). 上述三种均支持修改端口号,如 `udp://1.1.1.1:53`,没写会按照协议默认 53/443.
281290

282291
特别地,可以使用指定的域名用于查询 ECHConfig, 格式为 `"example.com+https://1.1.1.1/dns-query"` 这样 Xray 会强制使用 example.com 的 DNS 记录中的 ECHConfig 用于连接,如果你想从 DNS 获取 ECHConfig 但又不想暴露自己在查询这个域名的 HTTPS 记录或者在这个域名下发布 HTTPS 记录时有一些用。
283292

284-
> `echServerKeys` : string
293+
> `echForceQuery` : string
285294
286-
仅服务端参数,用于服务端启用 Encrypted Client Hello.
295+
控制使用 DNS 查询 ECH Config 时的策略,可选 `none`(默认) `half` `full`
287296

288-
使用 `xray tls ech --serverName example.com` 生成可用的 ECH Server Key 和对应的 Config, 其中 example.com 是在 SNI 被加密用用于暴露在外部的 SNI, 可以随便填。Server Key 包含了 ECHConfig, 如果你不慎弄丢了客户端用的 Config 可以使用 `xray tls ech -i "你的 server key"` 重新获得。你可以把它发布到 DNS 的 HTTPS 记录中,格式参考[这里](https://dns.google/query?name=encryptedsni.com&rr_type=HTTPS) 或者 RFC 9460
297+
`none`: 查询一次,如果没能获取有效 ECH Config 五分钟后才会继续查询。如果查询失败**不会使用 ECH**.
298+
299+
`half`: 查询一次,失败后每次请求都会尝试查询。如果查询失败**不会使用 ECH**。如果查询成功得到响应但是不包含 ECH Config 也**不会使用 ECH**,并且五分钟内不会再次查询。
300+
301+
`full`: 查询一次,强制要求得到了有效 ECH Config 才会成功连接,否则连接会失败。确定要使用 ECH 推荐此选项,前两种模拟 fallback 行为确保可用性但是可能会导致明文 SNI 被发送。
302+
303+
无论查询成功与否,只有第一次连接才会阻塞等待查询响应结果,后续更新不会阻塞连接。
304+
305+
> `echSockopt` : [SockoptObject](#sockoptobject)
289306
290-
注意服务端配置 ECH 后仍然接受正常的非 ECH 连接,但是客户端配置 ECH 后如果未能正确执行 ECH 握手会直接失败,不会回退到明文 SNI.
307+
调整使用 DNS 查询 ECH 记录时使用的连接的底层 socket 选项。
291308

292309
### RealityObject
293310

@@ -666,7 +683,7 @@ OCSP 装订更新间隔,单位为秒,默认值为 0. 任意非 0 值将启
666683
透明代理需要 Root 或 `CAP_NET_ADMIN` 权限。
667684

668685
::: danger
669-
[Dokodemo-door](./inbounds/dokodemo.md) 中指定了 `followRedirect``true`,且 Sockopt 设置中的`tproxy` 为空时,Sockopt
686+
[Dokodemo-door](./inbounds/tunnel(dokodemo).md) 中指定了 `followRedirect``true`,且 Sockopt 设置中的`tproxy` 为空时,Sockopt
670687
设置中的`tproxy` 的值会被设为 `"redirect"`
671688
:::
672689

0 commit comments

Comments
 (0)