引言:
微软官方文档指出,自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查询。
![emm9516_1-1722231457973.png emm9516_1-1722231457973.png](https://community.cisco.com/t5/image/serverpage/image-id/224980iC157A5731E8FD35F/image-size/medium?v=v2&px=400)
3. 抓包结果分析:
• Wireshark抓包结果显示Windows 10发送了两次DNS查询:首先是A记录(IPv4),紧接着是AAAA记录(IPv6)。
• DNS服务器响应了两次查询,分别提供了IPv4和IPv6地址。
• 在获取IPv6地址后,所有网络请求均通过IPv6发起。
![emm9516_2-1722231494772.png emm9516_2-1722231494772.png](https://community.cisco.com/t5/image/serverpage/image-id/224721iAD6979F9D575B99E/image-size/medium?v=v2&px=400)
![emm9516_3-1722231505866.png emm9516_3-1722231505866.png](https://community.cisco.com/t5/image/serverpage/image-id/224722i125438F048044C2A/image-size/medium?v=v2&px=400)
热点设置对DNS解析的影响:
Android手机又有点特殊:
• Android热点仅提供了IPv4 DNS服务器地址,尽管设备同时拥有IPv6和IPv4地址。
![emm9516_4-1722231532547.png emm9516_4-1722231532547.png](https://community.cisco.com/t5/image/serverpage/image-id/224723i314AD301DF96C6B1/image-size/medium?v=v2&px=400)
• Windows 10在这种情况下使用IPv4 DNS服务器进行解析,导致所有网络请求通过IPv4进行。
![emm9516_5-1722231550426.png emm9516_5-1722231550426.png](https://community.cisco.com/t5/image/serverpage/image-id/224724i24CA97FFD4E385C0/image-size/medium?v=v2&px=400)
解析结果的异常:
• 解析结果这里有点意思,解析结果中虽然有AAAA记录查询,但最终结果没有包含IPv6地址(红色标注部分,这个跟上面IPv6查询时候不一样)。
![emm9516_6-1722231577580.png emm9516_6-1722231577580.png](https://community.cisco.com/t5/image/serverpage/image-id/224725iBB8BB9EEE2319D3C/image-size/medium?v=v2&px=400)
手动配置IPv6 DNS服务器:
• 通过手动添加IPv6 DNS服务器地址(例如OpenDNS的2620:119:53::53),可以观察到IPv6 DNS已生效。
![emm9516_7-1722231659996.png emm9516_7-1722231659996.png](https://community.cisco.com/t5/image/serverpage/image-id/224726iF9536B26792C50AD/image-size/medium?v=v2&px=400)
• 拿宇宙第一大行再次进行网络请求测试,验证了Windows系统恢复了优先使用IPv6的行为(结果也告诉我们,宇宙第一大行应该是用了akamai的CDN)。
![emm9516_8-1722231677377.png emm9516_8-1722231677377.png](https://community.cisco.com/t5/image/serverpage/image-id/224727iA5F8E05A086807EE/image-size/medium?v=v2&px=400)
![emm9516_9-1722231682123.png emm9516_9-1722231682123.png](https://community.cisco.com/t5/image/serverpage/image-id/224728i5BE36F00AD566934/image-size/medium?v=v2&px=400)
小结:
• Android设备作为热点时,仅分配IPv4的DNS服务器地址,导致Windows只能通过IPv4解析和访问网络资源。通过手动配置IPv6 DNS服务器地址,Windows系统恢复了IPv6优先的行为。以此可以证明MS这次没有乱说。
调整IPv6和IPv4的优先级:
有两种方式可以更改windows优先采用IPv6还是IPv4,分别是更改注册表和更改路由优先级,推荐修改路由优先级实现:
Windows 10默认优先使用IPv6,但可以通过更改路由优先级来调整这一行为。通过以下命令,我们可以将IPv4的优先级调高。
![emm9516_10-1722231717494.png emm9516_10-1722231717494.png](https://community.cisco.com/t5/image/serverpage/image-id/224729iC0C410BD9C4B3EA0/image-size/medium?v=v2&px=400)
::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)。
![emm9516_11-1722231742459.png emm9516_11-1722231742459.png](https://community.cisco.com/t5/image/serverpage/image-id/224730iFD14E9DA01345BE5/image-size/medium?v=v2&px=400)
分享:
通过实际测试和配置调整,我们可以看到Windows系统确实会根据配置优先使用IPv6协议栈。然而,通过适当的配置,我们可以调整这一行为,以适应不同的网络环境。无论是通过修改注册表还是调整路由优先级,用户都可以根据自己的需求灵活选择使用IPv4或IPv6。