Skip to content

当 DNS 服务器返回空 AAAA 记录时,即使 A 记录有效,Xray 仍报错 "empty response" #5362

@ibehroozir

Description

@ibehroozir

标题

Android 上:当 DNS 服务器返回空 AAAA 记录时,即使 A 记录有效,Xray 仍报错 "empty response"


正文

在 Android 客户端(基于 Xray-core 的自定义版本)中,当使用 outbound-dns 时,若 DNS 服务器对某域名返回了有效的 A 记录(IPv4),但 AAAA 记录为空([]),Xray 会错误地将整个响应视为失败,并抛出:

features/dns: empty response

尽管日志显示已收到有效的 A 记录,例如:

[Info] app/dns: UDP:178.22.122.100:53 got answer: www.adobe.com. TypeA -> [50.7.85.221]
[Info] app/dns: failed to lookup ip for domain www.adobe.com ... > features/dns: empty response

这表明 Xray 的 DNS 解析逻辑存在问题:只要 A 或 AAAA 中任意一个返回有效 IP,解析就应成功。当前行为不符合 DNS 标准。

当前

设置 "queryStrategy": "UseIPv4" 可绕过此问题,但这不应是必须的。
尤其在 IPv6 不稳定或被限制的地区(如伊朗),强制用户配置 UseIPv4 才能正常使用,是一种糟糕的默认行为。

相关 DNS 配置(来自用户)

"dns": {
  "servers": [
    "178.22.122.100",
    "185.51.200.2",
    "78.157.42.100",
    "78.157.42.101",
    "10.202.10.10",
    "10.202.10.11"
  ],
  "disableCache": false,
  "enableParallelQuery": true
}

所有上述 DNS 服务器在伊朗被广泛使用(如 Shecan、403、Radar),它们对许多国际域名仅返回 A 记录,而 AAAA 为空——这是完全合法的。

期望行为

  • 如果 A 或 AAAA 中任意一个返回非空 IP 列表,解析应视为成功。
  • 默认行为应兼容 IPv4-only 网络环境,无需用户手动设置 queryStrategy

环境

  • 平台:Android
  • Xray-core:custom build(基于主流开源 Android 客户端)
  • 网络环境:伊朗(IPv6 通常不可用)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions