Windows 7中的IPv4与IPv6优先级


31

我通过飓风电隧道具有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?


4
在大多数操作系统上,正确的方法是在Windows上通过配置前缀策略netsh interface ipv6 show prefixpolicy。我明天可能会发布更详细的答案。
grawity 2012年

1
@grawity应该是prefixpolicies,不是prefixpolicy
彼得·伍德

@XP之后的@PeterWood可能会有所不同。
grawity 2014年

1
@grawity是的,我在Windows 7上,并且打电话netsh interface ipv6 show给用法包括show prefixpolicies - Shows prefix policy entries,但没有prefixpolicy。干杯。
彼得·伍德

Answers:


40

解决方案#1:添加前缀策略,使IPv4地址优先于IPv6

前缀策略表类似于路由表,它确定建立连接时首选的IP地址。请注意,前缀策略中的较高优先级由更大的“优先级”值表示,该值与路由表“ cost”值完全相反。

默认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)。

我们可以创建一个策略,使飓风电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始终比IPv6更喜欢IPv4

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

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

解决方案2的PowerShell命令: Get-ItemProperty -Path hklm:SYSTEM\CurrentControlSet\Services\tcpip6\Parameters -Name "DisabledComponents" | select -exp DisabledComponents Set-Itemproperty -Path hklm:SYSTEM\CurrentControlSet\Services\tcpip6\Parameters -Name "DisabledComponents" -value 32
Sergii Volchkov

令人遗憾的是,您无法为每个连接设置此首选项(例如,我的路由器有问题),而只能全局设置或最多每个适配器设置。
mirh

23

如果带有奇异数字和符号的等宽文本和表格使您感到恐惧,则可以使用Microsoft Fix-its(Microsoft提供的简单安装程序)来完成此操作,该安装程序会为您进行配置更改。

这些修复程序来自KB 2533454,该文件解释说,如果IPv6连接断开,则希望执行此操作。您需要成为管理员才能运行此修复程序;下载后,右键单击并选择以管理员身份运行。


+1具有启用/禁用按钮功能的方法非常好,欢呼
ashes999 2015年

7

最简单的方法,这些总是如此简单,我们忽略了它们。

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

  2. 在那里单击更改适配器设置

  3. 在“菜单栏”上,单击“高级”。**注意..如果仅看到“整理”,则单击它,然后从下拉菜单中选择“布局-菜单栏”

  4. 在上一步中单击高级后,在此步骤中单击“高级设置”(屏幕上将打开一个框)

  5. 显示的是适配器和设置,当前使用的适配器将在上半部分突出显示,并且其代表性分解如下(您应该看到该适配器的绑定)。突出显示列表中的任何一个绑定,您应该注意到右边的箭头会亮起,使用这些箭头将绑定顺序更改为您的首选项,然后从底部选择“确定”。

  6. 请注意,就像在适配器属性中安装协议,服务或客户端时一样。此处同样适用。也就是说,您更换了一个适配器,其余的也照做。因此,例如,如果您在无线适配器上选择IPV6优先于4,则LAN适配器也会更改。

这是我想到此最简单方法的最简单方法,而不必考虑太多或对网络间数据包的路由了解太多。


2
当我去那里时,IPv4已经在两个类别中都首先列出。但是,当我转到网络适配器的属性时,IPv6会首先列出。
kojow7'7

1

简洁版本

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

长版

RFC6724定义了首选地址的更改。有了这种更改,在几乎每种情况下,IPv6不再是首选地址:(

2012年6月,RFC 对此问题进行了“修复”,该问题于2012年6 月提出。根据您的Windows版本,您可能已立即使用了该新策略(Windows 8.1),或者可能已经通过更新提供了此策略( Windows 8,Windows 7,Windows Vista)。

我们在这里是因为我们使用IPv6。我们希望撤消更改。

如何放回去

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

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

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

前缀政策

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

>netsh int ipv6 show prefixpolicies

在较早的时期(最初由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

因此,您会看到它几乎总是使用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          

您将看到您将永远无法使用您的唯一本地地址或站点本地地址;永久损坏:

  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          

这是通过以下方式完成的:

>netsh interface ipv6 set prefixpolicy prefix=fc00::/7 precedence=37 label=13 store=active

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

>netsh interface ipv6 set prefixpolicy fc00::/7 37 13

如果我:

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

计算机至少可以做到的是,出于礼貌使用地址。

奖金Chat不休

fc00::/7范围被划分为两个部分:

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

从来没有人真正决定过这样做fc会是件好事,所以就坐在那里。

fd地址被定义为:

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

因此,如果您生成a4d7f6dd66了一个随机的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:Apple Inc-豹OSX
  • fdd4:43c8:ba34::/48:TekSavvy-丹尼·默里(Danny Murray)
  • fdac:afbd:fea1::/48:IBM Rational Build Forge-克里斯·富勒

但是由于使用缓慢,以及最初的可疑价值,SixXS于2018年停止了服务。

奖励阅读


fc00::/7网络是真的分为两个部分。该fc00::/8网络是保留给将来的全球授权机构分配的,当前无法使用,但fd00::/8可用于本地分配,但是需要随机选择接下来的40位。
罗恩·莫平

实际上我们在这里是因为我们(和OP)不想使用IPv6,即使我禁用了我可以找到的每个IPv6实例,它在环回中仍然处于活动状态!
AaA

0

有一种更简单的方法对我有用。我只是更改了接口指标#以确定其优先级。我过去曾经使用过这种方法来更改网络适配器的优先级(首先是无线NIC优先级,然后是LAN NIC优先级),但是我发现它也适用于TCP / IPv4和TCP / IPv6。在这种情况下,我将TCP / IPv4的接口度量标准从“自动”更改为5,将TCP / IPv6的接口度量标准从“自动”更改为10。度量标准号越低,其优先级越高。然后重启电脑。因此,现在每当我使用主机名ping时,它将从IPv4而不是Ipv6进行回复。

这是更详细的说明

https://www.windowscentral.com/how-change-priority-order-network-adapters-windows-10

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.