2012-06-13 23:34:40 +0000 2012-06-13 23:34:40 +0000
33
33

Windows 7中的IPv4与IPv6优先级

我通过Hurricane Electric隧道实现了IPv6连接。自今年的IPv6日以来,许多服务(google.com、facebook.com等)在其主域名上启用了IPv6。在我的Windows机器上,IPv6比IPv4更受欢迎。这意味着,每当我访问谷歌时,所有的流量都要通过我的隧道到飓风电器,这使延迟提高了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?

答案 (5)

45
45
45
2012-06-14 18:15:03 +0000

解决方案 #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)更优先。

我们可以创建一个策略,会使飓风电气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 KB 929852 了解有关该注册表键的更多信息,特别是如果DisabledComponents已经存在于您的系统中。
  • 重新启动。
23
23
23
2014-05-15 12:13:20 +0000

如果你害怕单字符文本和带有奇怪数字和符号的表格,你可以用微软的Fix-its来做,微软的简单安装程序可以为你做配置更改。

这些修复程序来自 KB 2533454 ,它解释说,如果你的IPv6连接被破坏,你会想要这样做。你需要以管理员身份运行修复程序;下载后,右击并选择以管理员身份运行。

7
7
7
2014-05-15 08:58:51 +0000

最简单的方法,这些总是那么简单,我们却忽略了……

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

  1. 在那里点击 “更改适配器设置 ”

  2. 在 “菜单栏 "上点击 "高级"。****注意…如果你只看到 "组织",那么就点击它,然后从下拉菜单中选择 "布局-菜单栏 ”

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

  4. 显示的是适配器和设置,你目前正在使用的适配器将在上半部分高亮显示,下面是它的代表性分解(你应该看到该适配器的绑定)。高亮显示列表中的任何一个绑定,你应该会注意到右边的箭头会亮起,使用这些箭头根据你的喜好改变绑定顺序,然后从底部选择确定。

  5. 注意,就像你在适配器属性中安装一个协议、服务或客户端一样。同样适用于这里,也就是你改变一个适配器,其他的适配器也会跟着改变。所以,例如,如果你在无线适配器上选择IPV6优先于4,你的LAN适配器也会改变。

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

2
2
2
2018-10-31 02:38:41 +0000

##短版本

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月被问到,2012年9月被RFC “修正”_。根据您的 Windows 版本,您可能在开箱即有这个新策略(Windows 8.1),或者可能已经通过更新交付(Windows 8、Windows 7、Windows Vista)。

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

如何把它放回原处

如果你为一台主机获得多个IP地址,你的机器必须决定使用哪个地址。一个例子的排名可能是。

  • IPv6环回
  • 本地IPv6
  • 唯一本地地址(ULA),例如fdxx::
  • 站点本地地址,例如fec0
  • IPv4地址,例如fec0
  • IPv4地址。fec0
  • 6bone
  • 6to4
  • IPv4compat
  • IPv4
  • Teredo,例如 2001

在你的 Windows 机器上,这个排名叫做 prefix policy

前缀策略

你可以通过运行来查看你的计算机的前缀策略:

>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 (yay!):

1.IPv6 loopback 2. 2. 本地IPv6, ULA, site-local, 6one 3. 6to4 4. IPv4compat 5. IPv4 6. Teredo

如果你费尽心思部署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

你会看到,你将永远**不能使用你的Unique Local Addresses,或站点本地地址;它永远是坏的:

1.IPv6 loopback 2. 本地IPv6 3. IPv4 4. 6to4 5. 6to4 5. Teredo 6. ULAs 7. site-local 8. 6bone 9. IPv6compat

如何解决?

我们要做的是修复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服务器以返回IPv6 ULA地址,而不是IPv4地址

至少计算机可以做的是有礼貌地使用这个地址。

Bonus Chatter

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

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

从来没有人真正决定过fc是好用的,所以只是放在那里。

fd的地址定义为:?

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

所以如果你生成fda4:d7f5:dd66::作为你的cryptoghpcallly随机的40位GlobalID,那你就有了/48:

  • fda4:d7f5:dd66:face:: /48
  • face /64 (在fda4:d7f5:dd66:face::825子网中)
  • fdee:e004:2208::/48作为主机IP地址 SixXS维护了一个公共数据库的唯一本地地址GlobalID前缀,以减少碰撞的机会, 例如: 例如:

  • fdd4:43c8:ba34::/48。苹果公司 - Leopard OSX

  • fdac:afbd:fea1::/48: TekSavvy - Danny Murray

  • 0x6&: IBM Rational Build Forge - Chris Fuller

但由于使用速度放缓,以及当初的价值可疑,SixXS在2018年停止了这项服务。

奖励阅读

0
0
0
2019-03-27 20:53:05 +0000

有一个更简单的方法,对我来说是可行的。我只是改变了接口的度量#来确定其优先级。我以前用这个方法改变网络适配器的优先级(无线网卡优先级第一,LAN网卡优先级第二),但我发现这个方法在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