Windows 7 中的 IPv4 与 IPv6 优先级

hai*_*img 39 networking windows-7 ipv6

我通过 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
Run Code Online (Sandbox Code Playgroud)

问题:当特定域名的 IPv4 和 IPv6 记录都可用时,如何让 Windows 7 始终优先选择 IPv4?

hai*_*img 54

解决方案 #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
Run Code Online (Sandbox Code Playgroud)

请注意,IPv6 地址 ( ::/0) 优于 IPv4 地址 ( ::/96, ::ffff:0:0/96)。

我们可以创建一个策略,使 Hurricane Electric IPv6 隧道不如任何 IPv4 地址有利

netsh interface ipv6 add prefixpolicy 2001:470::/32 3 6
Run Code Online (Sandbox Code Playgroud)

2001:470::/32是飓风电气的前缀,3是优先级(非常低)并且6是标签。

我可以使用更通用的前缀,但我想确保当我从 ISP 获得直接 IPv6 连接时,它将优先于 IPv4。

如果您采用此解决方案,则需要替换适当的 IPv6 前缀,而不是我的 Hurricane Electric 前缀。

解决方案 #2:调整注册表以使 Windows 始终更喜欢 IPv4 而不是 IPv6

此解决方案更通用,但更具侵入性且不符合标准。最后,Windows 仍会为您修改前缀策略表。

  • 打开 RegEdit,导航到 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\tcpip6\Parameters
  • 创建DisabledComponentsDWORD 注册表值,将其值设置为 20(十六进制)。有关此注册表项的详细信息,请参阅Microsoft KB 929852,尤其是DisabledComponents在您的系统上已存在的情况下。
  • 重启。


Mic*_*ton 23

如果等宽文本和带有奇怪数字和符号的表格吓到您,您可以使用 Microsoft Fix-its,Microsoft 的简单安装程序来为您更改配置。

这些修复来自KB 2533454,它解释了如果您的 IPv6 连接中断,您会想要这样做。您需要成为管理员才能运行修复程序;下载后,右键单击并选择以管理员身份运行。

  • 截至目前,列表中的两个链接已损坏。 (2认同)

小智 7

最简单的方法,而这些总是那么简单,我们忽略了它们......

  1. 打开网络与共享中心。

  2. 点击更改适配器设置

  3. 在“菜单栏”上单击高级。**注意..如果您只看到“组织”,则单击它,然后从下拉列表中选择“布局 - 菜单栏”

  4. 在上一步点击高级后,在这一步点击“高级设置”(屏幕上会打开一个框)

  5. 显示的是适配器和设置,您当前使用的适配器已经在上半部分突出显示,其代表细分如下(您应该看到该适配器的绑定)。突出显示列表中的任何一个绑定,您应该注意到右侧的箭头亮起,使用这些箭头根据您的喜好更改绑定顺序,然后从底部选择确定。

  6. 请注意,就像在适配器属性中安装协议、服务或客户端一样。这里同样适用。也就是你换了一个适配器,其他的也跟着做。因此,例如,如果您在无线适配器上选择 IPV6 优先于 4,您的 LAN 适配器也会发生变化。

这是我能想到的最简单的方法来完成这个特定的任务,而不必考虑太多,或者对网络上的数据包路由有太多的了解。

  • 当我去那里时,IPv4 已经在这两个类别中排在第一位。但是,当我转到网络适配器的属性时,首先列出 IPv6。 (2认同)

Ian*_*oyd 6

简洁版本

Before September 2012                     After September 2012
Precedence  Prefix                        Precedence  Prefix       
----------  -------------                 ----------  -------------
        50  ::1/128        IPv6 loopback          50  ::1/128        IPv6 loopback
        40  ::/0           Native IPv6            40  ::/0           Native IPv6
        40  fc00::/7       ULAs                   35  ::ffff:0:0/96  IPv4
        40  fec0::/10      site-local             30  2002::/16      6to4
        40  3ffe::/16      6bone                   5  2001::/32      Teredo
        30  2002::/16      6to4                    3  fc00::/7       ULAs
        20  ::/96          IPv4compat              1  fec0::/10      site-local
        10  ::ffff:0:0/96  IPv4                    1  3ffe::/16      6bone
         5  2001::/32      Teredo                  1  ::/96          IPv4compat
Run Code Online (Sandbox Code Playgroud)

长版

RFC6724定义了地址优先方式的更改。通过此更改,IPv6 不再是几乎所有情况下的首选地址:(

这个问题于 2012 年 6 月提出,并于 2012 年 9 月通过 RFC 进行了“修复”。根据您的 Windows 版本,您要么拥有开箱即用的新策略 (Windows 8.1),要么可能已经通过更新交付了 ( Windows 8、Windows 7、Windows Vista)。

我们来这里是因为我们使用 IPv6;我们希望撤销这一改变。

如何把它放回去

如果您为单个主机获得多个 IP 地址,您的计算机必须决定使用哪个地址。排名示例可能是:

  • IPv6环回
  • 本机 IPv6
  • 唯一本地地址 (ULA),例如fdxx::
  • 站点本地,例如fec0
  • 6骨
  • 6对4
  • IPv4兼容
  • IPv4
  • 特雷多,例如2001

在 Windows 计算机上,此排名称为前缀策略

前缀策略

您可以通过运行以下命令来查看计算机的前缀策略:

>netsh int ipv6 show prefixpolicies
Run Code Online (Sandbox Code Playgroud)

在过去(最初由RFC 3484定义),前缀策略是:

Precedence  Prefix         
----------  -------------
        50  ::1/128        IPv6 loopback
        40  ::/0           Native IPv6
        40  fc00::/7       ULAs
        40  fec0::/10      site-local
        40  3ffe::/16      6bone
        30  2002::/16      6to4
        20  ::/96          IPv4compat
        10  ::ffff:0:0/96  IPv4
         5  2001::/32      Teredo
Run Code Online (Sandbox Code Playgroud)

所以你会发现它几乎总是使用 IPv6(耶!):

  1. IPv6环回
  2. 本机 IPv6、ULA、站点本地、6one
  3. 6对4
  4. IPv4兼容
  5. IPv4
  6. 特雷多

如果您付出了努力来部署 IPv6:它就成功了。

新前缀策略

2012 年, RFC6724定义了新的优先顺序。如今,前缀策略几乎可以确保您永远不会使用 IPv6:

Precedence  Prefix         
----------  -------------
        50  ::1/128        
        40  ::/0           Native IPv6
        35  ::ffff:0:0/96  IPv4
        30  2002::/16      
         5  2001::/32      
         3  fc00::/7       ULAs
         1  fec0::/10      site-local
         1  3ffe::/16      
         1  ::/96          
Run Code Online (Sandbox Code Playgroud)

您将发现您将永远无法使用您的唯一本地地址或站点本地地址;它永远被打破:

  1. IPv6环回
  2. 本机 IPv6
  3. IPv4
  4. 6对4
  5. 特雷多
  6. ULA
  7. 站点本地
  8. 6骨
  9. IPv6兼容

如何修复它?

我们想要修复 IPv6,以便 ULA 优先于 IPv4。至少我们希望将 ULA ( fc00::/7) 的使用推向 IPv4 之上:

Precedence  Prefix         
----------  -------------
        50  ::1/128        
        40  ::/0           Native IPv6
        37  fc00::/7       ULAs <---------- from 3 up to 37
        35  ::ffff:0:0/96  IPv4
        30  2002::/16      
         5  2001::/32      
         1  fec0::/10      site-local
         1  3ffe::/16      
         1  ::/96          
Run Code Online (Sandbox Code Playgroud)

这是由以下人员完成的:

>netsh interface ipv6 set prefixpolicy prefix=fc00::/7 precedence=37 label=13 store=active
Run Code Online (Sandbox Code Playgroud)

这只会使其保持活动状态,直到下次重新启动为止。要使更改永久生效:

>netsh interface ipv6 set prefixpolicy fc00::/7 37 13
Run Code Online (Sandbox Code Playgroud)

如果我:

  • 努力为我的 /48 生成 ULA 全局前缀
  • 并为我的 /64 选择一个子网 ID
  • 并将 ULA 部署到企业中的每台机器
  • 并更新 DNS 服务器以返回 IPv4 地址和 IPv6 ULA 地址

计算机至少可以有礼貌地使用该地址。

奖金闲聊

fc00::/7范围分为两部分:

  • fd00::/8- 本地生成的GlobalID前缀
  • fc00::/8- ???

没有人真正认为这fc对他们有好处,所以就坐在那里。

地址fd定义为:

fd [40-bit random GlobalID] [16-bit subnet] [64-bits for host assignment]

因此,如果您生成了a4d7f6dd66cryptoghpcallly 随机 40 位GlobalID,则会为您提供 /48:

  • fda4:d7f5:dd66::/48
  • fda4:d7f5:dd66:face::/64(在face子网中)
  • fda4:d7f5:dd66:face::825作为主机 IP 地址

SixXS 维护着唯一本地地址 GlobalID 前缀的公共数据库,以减少冲突的可能性,例如:

  • fdee:e004:2208::/48:苹果公司 - Leopard OSX
  • fdd4:43c8:ba34::/48: TekSavvy - 丹尼·穆雷
  • fdac:afbd:fea1::/48:IBM Rational Build Forge - Chris Fuller

但由于使用速度缓慢以及价值可疑,SixXS 于 2018 年停止了该服务。

奖励阅读