我通过 Hurricane Electric 隧道实现了 IPv6 连接。自今年 IPv6 发布以来,许多服务(google.com、facebook.com 等)在其主域上启用了 IPv6。在我的 Windows 计算机上,IPv6 优于 IPv4。这意味着每当我访问 Google 时,所有流量都会通过我的隧道到达 Hurricane Electric,这会使延迟增加 100% 以上:
C:\> ping www.google.com
Pinging www.l.google.com [2001:4860:8005::68] with 32 bytes of data:
Reply from 2001:4860:8005::68: time=85ms
Reply from 2001:4860:8005::68: time=84ms
Reply from 2001:4860:8005::68: time=112ms
Reply from 2001:4860:8005::68: time=86ms
Ping statistics for 2001:4860:8005::68:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 84ms, Maximum = 112ms, Average = 91ms
C:\> ping -4 www.google.com
Pinging www.l.google.com [173.194.79.103] with 32 bytes of data:
Reply from 173.194.79.103: bytes=32 time=28ms TTL=48
Reply from 173.194.79.103: bytes=32 time=28ms TTL=48
Reply from 173.194.79.103: bytes=32 time=55ms TTL=46
Reply from 173.194.79.103: bytes=32 time=29ms TTL=46
Ping statistics for 173.194.79.103:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 28ms, Maximum = 55ms, Average = 35ms
问题:当特定域名同时提供 IPv4 和 IPv6 记录时,如何让 Windows 7 始终首选 IPv4?
答案1
解决方案 1:添加前缀策略以优先选择 IPv4 地址而不是 IPv6 地址
前缀策略表与路由表类似,它决定建立连接时优先使用哪些 IP 地址。请注意,前缀策略中的优先级越高,表示“优先级”值越高,与路由表“成本”值正好相反。
默认的Windows前缀策略表:
C:\> netsh interface ipv6 show prefixpolicies
Querying active state...
Precedence Label Prefix
---------- ----- --------------------------------
50 0 ::1/128
40 1 ::/0
30 2 2002::/16
20 3 ::/96
10 4 ::ffff:0:0/96
5 5 2001::/32
请注意,IPv6 地址(::/0
)优于 IPv4 地址(::/96
, ::ffff:0:0/96
)。
我们可以制定一项政策将使 Hurricane Electric IPv6 隧道比任何 IPv4 地址都更不受欢迎:
netsh interface ipv6 add prefixpolicy 2001:470::/32 3 6
2001:470::/32
是 Hurricane Electric 的前缀,3
是 Precedence(非常低),6
是 Label。
我本可以使用更通用的前缀,但我想确保如果我从 ISP 获得直接 IPv6 连接,它将优先于 IPv4。
如果您采用此解决方案,则需要用适当的 IPv6 前缀替换我的 Hurricane Electric 前缀。
解决方案 #2:调整注册表以使 Windows 始终优先使用 IPv4 而不是 IPv6
这个方案比较通用,但是侵入性比较强,而且不太符合标准。最后,Windows 还是会帮你修改前缀策略表。
- 打开 RegEdit,导航至
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\tcpip6\Parameters
- 创建
DisabledComponents
DWORD 注册表值,将其值设置为 20(十六进制)。请参阅Microsoft 知识库 929852有关此注册表项的更多信息,特别是如果DisabledComponents
您的系统上已经存在此注册表项。 - 重启。
答案2
如果您害怕等宽文本和带有奇怪数字和符号的表格,您可以使用 Microsoft Fix-its 来实现,这是 Microsoft 提供的简单安装程序,可以为您更改配置。
这些修复它的来自知识库 2533454,这说明如果您的 IPv6 连接中断,您将需要执行此操作。您需要以管理员身份运行修复程序;下载后,右键单击并选择以管理员身份运行。
- 优先选择 IPv4,而不是 IPv6
- 优先选择 IPv6,而不是 IPv4(恢复默认行为)
答案3
最简单的方法,这些方法总是如此简单以至于我们忽略了它们......
打开网络与共享中心。
点击更改适配器设置
在“菜单栏”上单击“高级”。**注意:如果您只看到“组织”,请单击它,然后从下拉菜单中选择“布局 - 菜单栏”
在上一步中单击“高级”后,在此步骤中单击“高级设置”(屏幕上将打开一个框)
显示的是适配器和设置,您当前使用的适配器已在上半部分突出显示,其代表性细分在下方(您应该会看到该适配器的绑定)。突出显示列表中的任何一个绑定,您应该注意到右侧的箭头亮起,使用这些箭头将绑定顺序更改为您的偏好,然后从底部选择确定。
请注意,这就像您在适配器属性中安装协议、服务或客户端一样。这里也适用。即您更改一个适配器,其余适配器也会随之更改。因此,例如,如果您在无线适配器上选择 IPV6 优先于 4,您的 LAN 适配器也会更改。
这是我能想到的完成这项特定任务的最简单的方法,无需考虑太多,也不需要对网络上的数据包路由有太多了解。
答案4
有一种更简单的方法对我有用。我只是更改了接口度量值 # 来确定其优先级。我过去曾使用此方法来更改网络适配器的优先级(无线 NIC 优先级第一,LAN NIC 优先级第二),但我发现它对 TCP/IPv4 和 TCP/IPv6 也有效。在这种情况下,我将 TCP/IPv4 的接口度量值从自动更改为 5,将 TCP/IPv6 接口度量值从自动更改为 10。度量值越低,优先级越高。然后重新启动您的 PC。所以现在每当我使用主机名 ping 时,它都会从 IPv4 而不是 IPv6 回复。
以下是更详细的说明
https://www.windowscentral.com/how-change-priority-order-network-adapters-windows-10