引言:
微软官方文档指出,自Windows Vista起,Windows系统遵循RFC 3484标准,通过前缀表来确定在多个地址可用时使用哪个地址。默认情况下,Windows倾向于优先使用IPv6全局单播地址而不是IPv4地址。
实验背景与设置:
1. 实验环境:
• 使用iPhone手机作为热点,提供IPv6和IPv4地址。
• Windows 10系统的电脑连接该热点。
• 网络协议栈测试工具:nslookup和Wireshark。
2. 初步测试:
• Windows 10在连接热点后,同时获取了IPv6和IPv4地址。
• 使用nslookup www.xxx.com进行测试,观察到Windows 10首先使用IPv6协议栈进行DNS查询。

3. 抓包结果分析:
• Wireshark抓包结果显示Windows 10发送了两次DNS查询:首先是A记录(IPv4),紧接着是AAAA记录(IPv6)。
• DNS服务器响应了两次查询,分别提供了IPv4和IPv6地址。
• 在获取IPv6地址后,所有网络请求均通过IPv6发起。


热点设置对DNS解析的影响:
Android手机又有点特殊:
• Android热点仅提供了IPv4 DNS服务器地址,尽管设备同时拥有IPv6和IPv4地址。

• Windows 10在这种情况下使用IPv4 DNS服务器进行解析,导致所有网络请求通过IPv4进行。

解析结果的异常:
• 解析结果这里有点意思,解析结果中虽然有AAAA记录查询,但最终结果没有包含IPv6地址(红色标注部分,这个跟上面IPv6查询时候不一样)。

手动配置IPv6 DNS服务器:
• 通过手动添加IPv6 DNS服务器地址(例如OpenDNS的2620:119:53::53),可以观察到IPv6 DNS已生效。

• 拿宇宙第一大行再次进行网络请求测试,验证了Windows系统恢复了优先使用IPv6的行为(结果也告诉我们,宇宙第一大行应该是用了akamai的CDN)。


小结:
• Android设备作为热点时,仅分配IPv4的DNS服务器地址,导致Windows只能通过IPv4解析和访问网络资源。通过手动配置IPv6 DNS服务器地址,Windows系统恢复了IPv6优先的行为。以此可以证明MS这次没有乱说。
调整IPv6和IPv4的优先级:
有两种方式可以更改windows优先采用IPv6还是IPv4,分别是更改注册表和更改路由优先级,推荐修改路由优先级实现:
Windows 10默认优先使用IPv6,但可以通过更改路由优先级来调整这一行为。通过以下命令,我们可以将IPv4的优先级调高。

::1/128 指的是IPv6 loopback地址,优先级最高是50
::/0 指的是IPv6的默认路由,优先级40,仅次于loopback接口
::ffff:0:0/96 指的就是IPv4的路由优先级
通过netsh interface ipv6 set prefixpolicy ::ffff:0:0/96 45 4命令将IPv4的优先级提升到45,高于默认的IPv6路由优先级(40)。

分享:
通过实际测试和配置调整,我们可以看到Windows系统确实会根据配置优先使用IPv6协议栈。然而,通过适当的配置,我们可以调整这一行为,以适应不同的网络环境。无论是通过修改注册表还是调整路由优先级,用户都可以根据自己的需求灵活选择使用IPv4或IPv6。