IPv6 环境下指定 DNS 服务器的域名解析疑惑,求大神指点

2019-12-15 20:30:02 +08:00
 lalalafq

最近在实现 《指定 DNS 服务器的域名解析》任务,使用的是 res_nquery 进行域名解析(具体方案: https://codeday.me/bug/20190527/1162066.html ),在处理 IPv6 网络环境时,出现一些不能理解的情况,望大神指点。

设备环境:

客户端连接到路由( Mac 共享出来的 NAT64 网络)模拟出来的 IPv6 网络,路由外连则是常规的家庭网络( IPv4 网络)。图中第一部分 。 以下简称客户端,Mac,外部网络。

场景一:IPv6 环境下在使用默认 DNS 的情况下,解析 xyz.com 域名,如图中第二部分。抓包得到:

  1. 客户端向 Mac 发送 AAAA 记录的域名解析请求
  2. Mac 向外部网络发送 A 记录的域名解析请求
  3. 外部网络 DNS 解析后向 Mac 发送 A 记录的域名解析响应
  4. Mac 将 IPv4 地址转化成 IPv6 地址返回给客户端。

场景二:IPv6 环境下在使用指定 DNS 的情况下,解析 xyz.com 域名,如图中第三部分。抓包得到:

  1. 客户端向 Mac 发送 AAAA 记录的域名解析请求
  2. Mac 向指定 DNS 服务发送 AAAA 记录的域名解析请求
  3. 指定 DNS 服务中没有 xyz.com 的 AAAA 记录,响应找不到( SOA )
  4. Mac 响应,客户端无法解析。

问题如下:

  1. 根据 IPv6 相关文档解释说:在 DNS64 向 DNS 服务器查询 IPv6 的地址时,如果不存在则会询问 IPv4 的地址。为什么中间的 Mac 没有发起第二次 IPv4 的请求。 是不是 Mac 模拟的 NAT64 网络只是网络转化而已,没有 DNS64 相关功能(不用苹果的方式,自己搭建一个 DNS64 会有一次 AAAA,找不到再有一次 A )。

  2. 针对上面两个场景的不同,自我猜想,是否正确。

    • 第一种情况,默认 DNS,客户端发起域名解析,Mac 无法解析。Mac 主动发起一次 IPv4 的解析请求到外部,得到 A 记录。然后转化成 AAAA 记录给客户端。
    • 第二种情况,如果指定 DNS,NAT64 退化成一个常规的路由进行报文转发,所以网路上都是以 AAAA 的报文存在的。
  3. 针对第二种情况无法解析,我现在的解决方案是查询用 A 参数,解析用 AAAA 参数,可行。这种方式是否合理,如果不合理有没有其他更好的方式。 按照苹果的教程

1833 次点击
所在节点    问与答
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/629277

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX