共鸣

导航

win10 localhost 解析为 ipv6地址 ::1 的解决办法

今天遇到个奇怪的问题,localhost 访问时提示 not found 404,但是有127.0.0.1可以访问。最后找到原因,是因为 windows 把 localhost 解析为 ipv6 地址 ::1 而不是 127.0.0.1。查了hosts 把ipv6已经屏蔽了,127.0.0.1 localhost 也有,就是不能正常解析。百度查了半天无果,最后用科学上网法在google找到了解决办法,为防止原贴丢失,转贴至此(原贴地址:http://superuser.com/questions/436574/ipv4-vs-ipv6-priority-in-windows-7/436944#436944)。

文章内容:

 

Solution #1: Add a prefix policy to prefer IPv4 addresses over IPv6

Prefix policy table is similar a routing table, it determines which IP addresses are preferred when making a connection. Note that higher precedence in prefix policies is represented by a lager "precedence" value, exactly opposite to routing table "cost" value.

Default Windows prefix policy table:

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

Note that IPv6 addresses (::/0) are preferred over IPv4 addresses (::/96, ::ffff:0:0/96).

We can create a policy that will make Hurricane Electric IPv6 tunnel less favourable than any IPv4 address:

netsh interface ipv6 add prefixpolicy 2001:470::/32 3 6

2001:470::/32 is Hurricane Electric's prefix, 3 is a Precedence (very low) and 6 is a Label.

I could have used a more generic prefix, but I wanted to make sure than if and when I get a direct IPv6 connectivity from an ISP, it will take precedence over IPv4.

If you adapt this solution, you need to substitute an appropriate IPv6 prefix instead of my Hurricane Electric one.

Solution #2: Tweak registry to make Windows always prefer IPv4 over IPv6

This solution is more generic, but more invasive and less standards-compliant. In the end, Windows will still modify the prefix policy table for you.

  • Open RegEdit, navigate to HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\tcpip6\Parameters
  • Create DisabledComponents DWORD registry value, set its value to 20 (Hexadecimal). SeeMicrosoft KB 929852 for more info about this registry key, especially if DisabledComponentsalready exists on your system.
  • Reboot.

英语不是很好,最后对照着翻译软件大概看明白点。就是windows有个优先解析列表,当ipv6的优先级高于ipv4时,就会出现我今天遇到的情况(虽然会这样的原因依然没找到)。第一个办法是加一条优ipv4优先级高于ipv6的记录到优先解析表中,因为很多单词都看不懂,怕弄错参数,没敢用。我是用第二个办法解决的,就是修改注册表,方法如下(不懂英语的朋友就不用查了):

打开注册表,找到键 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\tcpip6\Parameters ,添加类型为DWORD 名字为 DisabledComponents 的项(已经有了的不用添加直接改值)。然后修改值为 20,值类型为16进制 。这样就完了,之后保存注册表,重启电脑。重新ping 下 localhost 试试看吧。

posted on 2016-03-31 16:14  共鸣  阅读(14580)  评论(0编辑  收藏  举报