加入收藏 | 设为首页 | 会员中心 | 我要投稿 济源站长网 (https://www.0391zz.cn/)- 数据工具、数据仓库、行业智能、CDN、运营!
当前位置: 首页 > 综合聚焦 > 移动互联 > 评测 > 正文

一份完整的 IPv6 环境下 DNS 相关测试

发布时间:2019-07-23 13:54:38 所属栏目:评测 来源:董涛 张欣接
导读:董涛,网易游戏高级运维工程师,主要工作方向为网易集团 DNS 的运维与开发。 张欣接,网易集团 DNS 团队负责人,负责网易域名系统的架构设计及生态建设。 一、IPv6 支持度报告 IPv6 简介 IPv6(Internet Protocol version 6,互联网通信协议第 6 版)是用

AAAA 记录

AAAA 是一个域名指向 IPv6 地址的解析结果。如果想要一个域名解析到 IPv6 地址,则需要设置此种类型的解析结果。同一个域名可以同时有 A 与 AAAA 两种记录类型, 例如 ipv6test.ntes53.netease.com. 1800 IN AAAA 2403:c80:100:3000::7b3a:a646
  • 缓存 DNS 服务器

用户直接使用的 DNS 服务器,各种平台、操作系统上直接设置的 DNS 服务器,常见的有 8.8.8.8, 114.114.114.114
  • 权威 DNS 服务器

用于域名的管理。权威 DNS 服务器只对自己所拥有的域名进行域名解析,对于不是自己的域名则拒绝应答。例如网易的权威 DNS 服务器只会响应网易域名的请求,对于其他域名,则拒绝应答。
  • 双栈网络环境

双栈网络环境即客户端或服务器同时拥有 IPv4、IPv6 两种网络环境,可以简单的理解为机器上既有 IPv4 地址又有 IPv6 地址

测试场景

下文中所有测试使用的程序均为测试方法中的程序

1.目前纯 IPv4 环境下,仅新增 AAAA(IPv6) 记录之后,对已有程序的影响

假定已经存在了一个程序(C 程序、python 程序、浏览器等),通过域名访问某个服务,现在在 IPv4 环境下一切工作正常。当给这个域名增加了 AAAA 记录之后,测试对目前的程序的影响。

域名解析
一份完整的 IPv6 环境下 DNS 相关测试

HTTP 请求
一份完整的 IPv6 环境下 DNS 相关测试

客户端
一份完整的 IPv6 环境下 DNS 相关测试

结论

  • 当在某域名原有的 A 记录类型的基础上新增 AAAA 记录后,原有的程序工作正常

2.客户端 IPv6/v4 双栈环境下,测试程序的行为

假定用户的环境是双栈环境,假定一个服务通过域名对外提供服务,测试这种情况下程序的行为。

域名解析

一份完整的 IPv6 环境下 DNS 相关测试

HTTP 请求
一份完整的 IPv6 环境下 DNS 相关测试

客户端
一份完整的 IPv6 环境下 DNS 相关测试

结论

  • 当域名同时存在 A 与 AAAA 记录,并且网络类型为双栈网络时,绝大多数程序工作正常。仅有一种情况例外,即程序中使用了 gethostbyname 函数,同时 resolv.conf 中配置了 options inet6 时,此时程序会返回错误的解析结果

  • RFC 以及绝大多数实现方式,均回优先使用 IPv6 地址建立连接

  • 双栈环境下,客户端使用 IPv4 与 IPv6 缓存 DNS 服务器获取的解析结果是一致的

3. 客户端纯 IPv6 环境下,测试能否正常工作

假定用户只有 IPv6 地址,DNS 也是使用 IPv6 地址 (DNS 必须有双栈环境,因为现在很多权威服务器没有 IPv6 地址,纯 IPv6 环境下无法正常工作),假定一个服务通过域名(同时拥有 A、AAAA 记录)对外提供服务,测试服务是否可以正常访问。

域名解析
一份完整的 IPv6 环境下 DNS 相关测试

HTTP 请求
一份完整的 IPv6 环境下 DNS 相关测试

客户端
一份完整的 IPv6 环境下 DNS 相关测试

结论
当某域名即存在 A 记录 又存在 AAAA 记录时:

  • 如果程序中使用了 gethostbyname 时,程序可能会拿到错误的解析结果,取决于 resolv.conf 的配置(当配置了 option inet6 时,会获取到错误的解析结果)

  • Windows 在这种情况下,部分应用工作不正常。在指定使用 IPv6 socket 的情况下,程序工作正常。

  • 根据安卓官方的描述,Android 6.0 之后的版本已经支持 IPv6,但是根据对国内大多数厂商的安卓手机的调研,目前国内安卓手机很少可以原生支持 IPv6

4. DNS 解析测试

这里测试了缓存服务器和权威服务器在各种网络环境下,优先使用的解析链路。

一份完整的 IPv6 环境下 DNS 相关测试

结论
当权威服务器和缓存服务器均支持 ipv6 时,缓存服务器优先使用 ipv6 链路进行解析,其他情况均使用 ipv4 链路进行解析。

结论

  • 经过测试与查证,gethostbyname 不支持 IPv6,使用此函数可能会拿到错误的结果或者程序抛出异常。建议使用 getaddrinfo 函数取代此函数

  • 目前已经存在 A 记录的域名,添加 AAAA 记录后,不管客户端与服务端的网络环境如何:

    • 绝大多数情况下对客户端与服务端工作正常

    • (编辑:济源站长网)

      【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读