这个问题到底出在了哪里呢?今天终于又在查找资料时被 GFW 所困扰,索性花了半个多小时来找这个问题的解决方案,以便能在 XP 系统上开启 IPv6,随意浏览 Web Cache,解决找资料难的问题。
好在 Google 到了个相当靠谱的帖子:苍天哪,大地啊,列祖列宗啊…我终于也突破重围了。
别看这个帖子的标题很是搞怪,可其中的内容真是十分丰富。我上面说到的这个设置了 hosts 中的 IPv6 地址却依然解析出 IPv4 地址的问题迎刃而解。
Teredo 作为一个能够使用基于 IPv4 内网地址通过 NAT 直接 tunnel 到 IPv6 网络的接口,却奇怪地把解析 IPv6 的优先级搞得比 IPv4 要低,这样也就被系统抢先一步从 IPv4 访问所有网站,而直接无视 hosts 里面的任何 IPv6 设置了。
在 cmd 中输入以下命令:
netsh
int
ipv6
set prefix ::1/128 50 0
set prefix ::/0 40 1
set prefix 2002::/16 30 1
set prefix ::/96 20 3
set prefix ::ffff:0:0/96 10 4
set prefix 2001::/32 5 1
以上完成了 Teredo 接口的 IPv6 地址解析的优先级设定。
>netsh int ipv6 set prefix ?
用法: set prefixpolicy [prefix=]<IPv6 address>/<integer> [precedence=]<integer> [label=]<integer> [[store=]active|persistent]
参数:
标记 值
prefix - 添加到策略的前缀。
precedence - 排序的优先顺序值。
label - 匹配的标签值。
store - 下列值之一:
active: 更改只持续到下一次重新启动。
persistent: 更改持久有效(默认值)。
说明: 修改给定前缀的源和目标地址选择策略。
示例:
set prefixpolicy ::/96 3 4
要查看当前的策略优先级设定,可以输入:要重现这个问题,你可以随便在 hosts 里创建一个虚构的地址,如 2404:6800:8007::63 test。这时在 cmd 中 ping test 得到的就是 IPv6 地址,因为此时 test 没有对应 IPv4 地址可以解析到。这个奇怪的问题被网友 jimb 称为“The Teredo Behavior”:>netsh int ipv6 sh prefixpolicy (Windows 7 请使用 prefixpolies 关键字)
正在查询活动状态...
优先顺序 标签 前缀
---------- ----- --------------------------------
5 1 2001::/32
10 4 ::ffff:0:0/96
20 3 ::/96
30 1 2002::/16
40 1 ::/0
50 0 ::1/128
That sounds like a side affect "The Teredo Behavior". I think that's a bug, because the behavior is supposed to only prefer IPv4 if you have only a Teredo address. But it appears to require that a non-teredo IPv6 address appear on the interface that your DNS server lives on, even if you have a native IPv6 interface on a different interface.如果你也遇到了以上问题,可以尝试执行上面的 Teredo 接口优先级设定命令解决问题。
- via tunnelbroker.net
怀着非常大的期望尝试了一下,还是没有成功,也许是我的操作系统的问题吧。
回复删除@Ocean Ban: 你先ping6 google.com一下,发起一个ipv6连接再试试可不可以用。
回复删除Thanks for an idea, you sparked at thought from a angle I hadn’t given thoguht to yet. Now lets see if I can do something with it.
回复删除是::1/128还是::1/1288 ?你前后有点不同。
回复删除@Brucelee YQ:
回复删除抱歉,是/128,是我写错了。
Hi there, I found your blog via Google while searching for a related topic, your site came up, it looks good.
回复删除作为一个小白,有一个问题问大大,怎么恢复默认呢?
回复删除@Risenh Blogger:
回复删除抱歉這麼晚才回覆你。
如果你變更了系統默認設定,可以執行
netsh int ipv6 reset
來把所有設定重置。
特別地,你還可以直接把teredo禁用掉
netsh int ipv6 set teredo disabled
這樣就不用考慮IPv4和IPv6的優先級問題了。
@Risenh Blogger:
回复删除抱歉,剛剛第二個寫錯了,應該是
netsh int ipv6 set teredo disable
@Chen Ma:多谢多谢,本来以为收到回复gmail会有邮件提示,没想到没有,今天才过来看看,发现已经有回复了,十分感谢~
回复删除