Add h2c DNS & TLS `serverNameToVerify`

pull/650/head
风扇滑翔翼 2025-02-01 14:13:46 +00:00 committed by GitHub
parent b2b0ecd3be
commit dd8fa6344d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 10 additions and 3 deletions

View File

@ -114,6 +114,8 @@ Xray 内置的 DNS 模块,主要有两大用途:
当值是 `"https://host:port/dns-query"` 的形式,如 `"https://dns.google/dns-query"`Xray 会使用 `DNS over HTTPS` (RFC8484, 简称 DOH) 进行查询。有些服务商拥有 IP 别名的证书,可以直接写 IP 形式,比如 `https://1.1.1.1/dns-query`。也可使用非标准端口和路径,如 `"https://a.b.c.d:8443/my-dns-query"`
当值是 `"h2c://host:port/dns-query"` 的形式,如 `"h2c://dns.google/dns-query"`Xray 会使用 `DNS over HTTPS` 的请求格式但是将会以明文 h2c 发出请求,不能直接使用,在这种情况下需要自行配置 Freedom 出站 + streamSettings 设置 TLS 为其配置 TLS 以包装成正常的 DOH 请求。用于特殊目的,比如想要自定义 DOH 请求的 SNI 或者使用 utls 的指纹时使用
当值是 `"https+local://host:port/dns-query"` 的形式,如 `"https+local://dns.google/dns-query"`Xray 会使用 `DOH 本地模式 (DOHL)` 进行查询,即 DOH 请求不会经过路由组件,直接通过 Freedom outbound 对外请求,以降低耗时。一般适合在服务端使用。也可使用非标端口和路径。
当值是 `"quic+local://host"` 的形式,如 `"quic+local://dns.adguard.com"`Xray 会使用 `DNS over QUIC 本地模式 (DOQL)` 进行查询,即 DNS 请求不会经过路由组件,直接通过 Freedom outbound 对外请求。该方式需要 DNS 服务器支持 DNS over QUIC。默认使用 853 端口进行查询,可以使用非标端口。

View File

@ -33,7 +33,7 @@ Freedom 是一个出站协议,可以用来向任意网络发送(正常的)
当目标地址为域名时配置相应的值Freedom 的行为模式如下:
- 当使用 `"AsIs"`Xray 将直接使用 go 自带的 Dial 发起连接,优先级固定为 RFC6724 的默认值(不会遵守 gai.conf 等配置) (人话IPv6 优先)。出于一些原因UDP连接如果使用域名会无视系统设置优先IPv4。
- 当使用 `"AsIs"`Xray 将直接使用 golang 默认的连接优先级。出于一些原因UDP连接如果使用域名会无视系统设置优先IPv4。
- 当填写其他值时,将使用 Xray-core [内置 DNS 服务器](../dns.md) 服务器进行解析。若不存在DNSObject则使用系统DNS。若有多个符合条件的IP地址时核心会随机选择一个IP作为目标IP。
- `"IPv4"` 代表尝试仅使用 IPv4 进行连接,`"IPv4v6"` 代表尝试使用 IPv4 或 IPv6 连接,但对于双栈域名,使用 IPv4。v4v6调换后同理不再赘述
- 当在内置DNS设置了 `"queryStrategy"`实际行为将会与这个选项取并只有都被包含的IP类型才会被解析`"queryStrategy": "UseIPv4"` `"domainStrategy": "UseIP"`,实际上等同于 `"domainStrategy": "UseIPv4"`

View File

@ -103,6 +103,7 @@ Reality 是目前最安全的传输加密方案, 且外部看来流量类型和
```json
{
"serverName": "xray.com",
"serverNameToVerify":"",
"rejectUnknownSni": false,
"allowInsecure": false,
"alpn": ["h2", "http/1.1"],
@ -126,11 +127,15 @@ Reality 是目前最安全的传输加密方案, 且外部看来流量类型和
当留空时自动使用address中的值如果是域名该值同时用于校验服务端证书是否有效。
::: tip
如上所述,因为该值同时用于校验服务端证书是否有效,如果出于特殊目的将其修改为与服务端证书域名不一致的需要需要开启 ```allowInsecure``` 否则会导致证书认证失败。出于安全考虑我们不推荐长期使用这种方法如果想要安全地伪造SNI请考虑使用REALITY。
如上所述,因为该值同时用于校验服务端证书是否有效,如果出于特殊目的将其修改为与服务端证书域名不一致的需要需要开启 `allowInsecure` 否则会导致证书认证失败。出于安全考虑我们不推荐长期使用这种方法如果想要安全地伪造SNI请考虑使用REALITY。
特别地当客户端设置其为IP地址时xray不会发送SNI同样的要使用此功能也必须同时开启 ```allowInsecure```
特别地当客户端设置其为IP地址时xray不会发送SNI同样的要使用此功能也必须同时开启 `allowInsecure`
:::
> `serverNameToVerify`: string
仅客户端,用于校验证书使用的 SNI, 将会覆盖本用于校验的 `serverName`, 用于域前置等特殊目的。 相较于之前的修改 `serverName` 并开启 `allowInsecure` 更加安全,因为其仍会执行证书签名验证。但是这是 utls 的专属功能,需要设置 `fingerprint` 启用 utls 以使用。
> `rejectUnknownSni`: bool
当值为 `true` 时,服务端接收到的 SNI 与证书域名不匹配即拒绝 TLS 握手,默认为 false。