Skip to content

iOS 端 Fake-IP 在上游 DNS 返回 AAAA 时出现 DNS 泄露,macOS 同配置正常 #41

Description

@Piggy-Cat-bit-shadow

标题:iOS 端 Fake-IP 在上游 DNS 返回 AAAA 时出现 DNS 泄露,macOS 同配置正常

问题描述:

我这里遇到一个比较稳定的 DNS 泄露问题,怀疑可能和 iOS 端最近的 IPv4 / IPv6 双栈处理有关。

我使用的是同一份 Mihomo 配置,DNS 开启 Fake-IP,并且 nameserver 只配置了一个我自己的私人 DNS(国内自建 AdGuard Home)。

同一份配置在 macOS Hako 和 iOS Hako 上表现完全不同。

一、macOS Hako

macOS 最新版 Hako 下表现正常:

  • Fake-IP 工作符合预期
  • DNS 只使用我配置的私人 DNS
  • 代理流量对应域名没有发现本机 DNS 泄露
  • 代理节点相关的真实域名解析最终由远端 VPS 处理

二、iOS Hako

iOS 端使用完全相同的配置时,只要我的私人 DNS 正常返回 AAAA 记录,就会出现 DNS 泄露。

而且泄露不只表现为 IPv6,有时 DNS 泄露测试中还会出现额外的 IPv4 DNS 地址。

我已经尝试在 Mihomo 配置中同时设置:

ipv6: false

dns:
ipv6: false

但问题依然存在。

也就是说,这两个配置项似乎无法阻止 iOS 端出现这个现象。

三、可以稳定消除问题的方法

目前我测试下来,唯一可以稳定消除泄露的方法是:

直接在我自己的 AdGuard Home 服务端设置“丢弃 AAAA 响应”。

也就是:

正常返回 AAAA
→ iOS Hako 出现 DNS 泄露

AdGuard Home 丢弃 AAAA
→ DNS 泄露立即消失

这个现象可以稳定复现。

而 macOS Hako 使用同一份 Mihomo 配置,即使私人 DNS 正常返回 AAAA,也没有这个问题。

四、复现条件

  1. Hako iOS
  2. Mihomo Fake-IP
  3. DNS 只配置一个私人 nameserver
  4. 私人 DNS 同时正常返回 A 和 AAAA
  5. 进行 DNS Leak Test
  6. 可以观察到额外 DNS 地址

然后只需要在私人 AdGuard Home 上禁止 / 丢弃 AAAA:

  1. 不修改客户端其他配置
  2. 再次进行 DNS Leak Test
  3. 泄露立即消失

五、预期行为

Fake-IP 模式下,如果已经明确指定了 nameserver,并且相关流量应该通过代理处理,不应该因为私人 DNS 返回 AAAA,就额外触发其他系统 DNS / resolver 查询。

尤其是在已经设置:

ipv6: false

dns:
ipv6: false

的情况下,理论上不应该仍然因为 AAAA 响应触发额外 DNS 行为。

六、怀疑方向

我目前不能确定根因,只能根据现象怀疑可能和以下某一层有关:

  • iOS 端 IPv4 / IPv6 双栈处理
  • 最近新增的双栈功能
  • Happy Eyeballs / IPv4 IPv6 并发逻辑
  • iOS Network Extension
  • Hako iOS Adapter
  • 收到 AAAA 后额外触发了系统 resolver
  • 某条 IPv6 相关解析路径没有经过 Mihomo Fake-IP DNS 接管

最让我怀疑双栈相关逻辑的原因是:

只有服务端返回 AAAA 时问题才出现,一旦从服务端直接丢弃 AAAA,泄露立即完全消失。

另外,同一份配置在 macOS 端完全正常,因此感觉不像单纯是 Mihomo YAML 配置的问题,更像是 iOS 平台特有路径导致的。

希望能帮忙看看 iOS 端最近的双栈实现是否有可能绕过 Fake-IP / Mihomo DNS 流程。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions