mirror of
https://github.com/XTLS/Xray-docs-next.git
synced 2026-09-22 22:38:05 +03:00
Sockopt: Clarify dual-stack DNS fallback behavior
This commit is contained in:
@@ -101,7 +101,7 @@ Sockopt 用于配置底层网络行为。
|
||||
|
||||
- 当使用 `"AsIs"` 时, Xray 不对域名进行特殊处理,到最后 Xray 将直接使用 go 自带的 Dial 发起连接,优先级固定为 RFC6724 的默认值(不会遵守 gai.conf 等配置) 通常来说为 IPv6 优先。
|
||||
- 当填写其他值时,将使用 Xray-core [内置 DNS 服务器](../dns.md) 服务器进行解析。若不存在DNSObject,则使用系统DNS。若有多个符合条件的IP地址时,核心会随机选择一个IP作为目标IP。
|
||||
- `"IPv4"` 代表尝试仅使用 IPv4 进行连接,`"IPv4v6"` 代表尝试使用 IPv4 或 IPv6 连接,但对于双栈域名,使用 IPv4。(v4v6 调换后同理,不再赘述)
|
||||
- `"IPv4"` 代表只解析 IPv4。`"IPv4v6"` 代表先解析 IPv4,仅当解析报错或没有返回 IP 时再解析 IPv6;如果已经解析出 IPv4,之后连接失败不会回退到 IPv6。`"IPv6"`、`"IPv6v4"` 同理,地址族顺序相反。
|
||||
- 当在内置DNS设置了 `"queryStrategy"` 后,实际行为将会与这个选项取并,只有都被包含的IP类型才会被解析,如 `"queryStrategy": "UseIPv4"` `"domainStrategy": "UseIP"`,实际上等同于 `"domainStrategy": "UseIPv4"`。
|
||||
- 当使用 `"Use"` 开头的选项时,若解析结果不符合要求(如,域名只有IPv4解析结果但使用了UseIPv6),则会回落回AsIs。
|
||||
- 当使用 `"Force"` 开头的选项时,若解析结果不符合要求,则该连接会无法建立。
|
||||
@@ -282,7 +282,7 @@ PS: 如果有正常上网的域名流量被 AsIs 的 freedom 出站送过来,
|
||||
|
||||
RFC-8305 实现的 happyEyeballs,仅适用于 TCP。当目标为域名时对它们竞速并选择第一个成功的返回,仅当 `Sockopt.domainStrategy` 被设置为非 `AsIs` 时生效。
|
||||
|
||||
注意:`UseIPv4v6` / `ForceIPv4v6` 会使可用的 IP 列表被缩减到仅剩 IPv4,仅查询失败时才会回退查询 IPv6。不推荐这么用。建议使用 UseIP / ForceIP 配合 `HappyEyeballs.interleave`。
|
||||
注意:`UseIPv4v6` / `ForceIPv4v6` 会使可用的 IP 列表被缩减到仅剩 IPv4,仅当 IPv4 解析报错或没有返回 IP 时才会改为解析 IPv6;IPv4 连接失败不会触发该回退。不推荐这么用。建议使用 UseIP / ForceIP 配合 `HappyEyeballs.interleave`。
|
||||
|
||||
::: warning
|
||||
使用这个功能时不要使用此出站的 `targetStrategy`,这会导致 `Sockopt` 只能看到被替换完毕的 IP。<br>
|
||||
|
||||
@@ -97,7 +97,7 @@ When the target address is a domain name, this field controls how outbound conne
|
||||
|
||||
- With `"AsIs"`, Xray does not specially handle the domain name. In the end it uses Go's built-in dialer directly. The priority is fixed to the RFC 6724 default and does not follow configurations such as `gai.conf`, so in practice IPv6 is usually preferred.
|
||||
- With any other value, Xray uses the Xray-core [built-in DNS server](../dns.md) for resolution. If there is no `DNSObject`, system DNS is used. If multiple IP addresses match, the core randomly picks one target IP.
|
||||
- `"IPv4"` means try IPv4 only. `"IPv4v6"` means try IPv4 or IPv6, but for dual-stack domains prefer IPv4. The same logic applies to the IPv6-first variants.
|
||||
- `"IPv4"` means resolve IPv4 only. `"IPv4v6"` means resolve IPv4 first and resolve IPv6 only if that lookup returns an error or no IP addresses. If IPv4 addresses are resolved but subsequent connection attempts fail, it does not fall back to IPv6. `"IPv6"` and `"IPv6v4"` work analogously, with the address-family order reversed.
|
||||
- When built-in DNS also sets `"queryStrategy"`, the actual behavior is the intersection of the two settings. Only IP types included in both are resolved. For example, `"queryStrategy": "UseIPv4"` together with `"domainStrategy": "UseIP"` behaves the same as `"domainStrategy": "UseIPv4"`.
|
||||
- When using a `"Use"` option, Xray falls back to `"AsIs"` if the resolution result does not match the requested family, such as a domain that only has IPv4 while using `UseIPv6`.
|
||||
- When using a `"Force"` option, the connection fails outright if the resolution result does not match the requested family.
|
||||
@@ -276,7 +276,7 @@ When `type` is `int`, the value must be a decimal number.
|
||||
|
||||
An RFC 8305 Happy Eyeballs implementation, TCP only. When the target is a domain name, it races the resolved addresses and chooses the first successful one. It only works when `Sockopt.domainStrategy` is not `AsIs`.
|
||||
|
||||
Note that `UseIPv4v6` and `ForceIPv4v6` effectively reduce the usable list to IPv4 and only query IPv6 if IPv4 resolution fails. That is not recommended. Prefer `UseIP` or `ForceIP` together with `HappyEyeballs.interleave`.
|
||||
Note that `UseIPv4v6` and `ForceIPv4v6` effectively reduce the usable IP list to IPv4 and switch to resolving IPv6 only if IPv4 resolution returns an error or no IP addresses. Failure to connect over IPv4 does not trigger this fallback. This usage is not recommended. Prefer `UseIP` or `ForceIP` together with `HappyEyeballs.interleave`.
|
||||
|
||||
::: warning
|
||||
Do not use this feature together with this outbound's `targetStrategy`, because then `Sockopt` only sees the final IP after replacement.<br>
|
||||
|
||||
@@ -97,7 +97,7 @@ Sockopt используется для настройки низкоуровн
|
||||
|
||||
- При `"AsIs"` Xray никак специально не обрабатывает доменное имя и в конце использует обычный dialer Go. Приоритет фиксирован правилами RFC 6724 и обычно приводит к предпочтению IPv6.
|
||||
- При любом другом значении Xray использует [встроенный DNS](../dns.md). Если `DNSObject` отсутствует, используется системный DNS. Если есть несколько подходящих IP-адресов, ядро случайным образом выбирает один.
|
||||
- `"IPv4"` означает попытку использовать только IPv4. `"IPv4v6"` означает использование IPv4 или IPv6, но для dual-stack домена предпочитается IPv4. Аналогично работают и IPv6-first варианты.
|
||||
- `"IPv4"` означает разрешение только IPv4. `"IPv4v6"` означает, что сначала разрешается IPv4, а IPv6 разрешается только в том случае, если разрешение IPv4 завершилось ошибкой или не вернуло ни одного IP-адреса. Если IPv4-адреса уже получены, последующая ошибка подключения не приводит к переходу на IPv6. Для `"IPv6"` и `"IPv6v4"` действует та же логика, но порядок семейств адресов обратный.
|
||||
- Если во встроенном DNS также задан `"queryStrategy"`, фактическое поведение определяется пересечением двух настроек. Например, `"queryStrategy": "UseIPv4"` вместе с `"domainStrategy": "UseIP"` фактически эквивалентно `"domainStrategy": "UseIPv4"`.
|
||||
- Варианты `"Use*"` делают fallback к `"AsIs"`, если результат разрешения не соответствует нужному семейству адресов.
|
||||
- Варианты `"Force*"` завершают соединение ошибкой, если получить нужный тип адреса не удалось.
|
||||
@@ -274,7 +274,7 @@ Xray проверяет, присутствуют ли в запросе заг
|
||||
|
||||
Реализация Happy Eyeballs по RFC 8305, только для TCP. Когда целью является доменное имя, Xray запускает гонку между разрешенными адресами и выбирает первый успешный. Работает только если `Sockopt.domainStrategy` не равен `AsIs`.
|
||||
|
||||
Значения `UseIPv4v6` и `ForceIPv4v6` фактически сводят список к IPv4 и только при неудаче обращаются к IPv6. Это не рекомендуется. Лучше использовать `UseIP` или `ForceIP` вместе с `HappyEyeballs.interleave`.
|
||||
Значения `UseIPv4v6` и `ForceIPv4v6` фактически сокращают список доступных IP-адресов до IPv4 и переходят к разрешению IPv6 только в том случае, если разрешение IPv4 завершилось ошибкой или не вернуло ни одного IP-адреса. Ошибка подключения по IPv4 не запускает этот переход. Такое использование не рекомендуется. Лучше использовать `UseIP` или `ForceIP` вместе с `HappyEyeballs.interleave`.
|
||||
|
||||
::: warning
|
||||
Не используйте эту функцию вместе с `targetStrategy` этого outbound, потому что тогда `Sockopt` увидит только конечный IP после подмены.<br>
|
||||
|
||||
Reference in New Issue
Block a user