软件开发培训班 >> 网络技术 >> 网络搭建
正常获取IPV6地址却无法使用的解决方案 |
|
本文标签:IPv6地址 WinXP无法连接 IPv6 站点,但是 IPv6地址的获取是正常的,同一台电脑上的 Ubuntu IPv6工作也正常 。经过一些摸索发现可能是以下两个原因造成的: 1. 分配到 2002 开头的 IPv6地址并使用了它 。2002::/16格式的地址是 6to4 的地址,不是 native 的 IPv6地址,所以在 IPV4+V6 双栈网络中不应该使用 2002::/16 格式的地址 。执行 ping6 IPv6.google.com 可以看到自己使用的是什么 IPv6地址 。 之所以会产生 2002::/16 格式的地址,一个很可能的原因是网络中的 Windows Vista 操作系统默认会发送 IPv6 的路由器公告 。使用 netsh interface IPv6 show interface "本地连接" 命令可以查看本地连接的参数,其中有一条:“发送路由器公告”,一定要设置为“否” 。如果您的这个选项是“是”,那么您可以使用这个命令关闭它: netsh interface IPv6 set interface “本地连接” advertise=disabled 如果获得的全部是 2002 开头的地址,可以使用下面命令进行重分配: netsh interface IPv6 reset 2. IPv6 的路由表(网关)不对 。tracert6 IPv6.google.com 就能看到本机是经过什么路由到 IPv6.google.com 的 。如果从第一跳就显示连接超时,应该就是路由表出了问题 。 两个问题的解决方案如下: netsh interface IPv6 set prefixpolicy 2001::/16 1 1 persistent 上面这条命令的意思是设置 Windows 更偏好使用 2001 开头的 IPv6地址,避免使用 2002 开头的地址 。如果您 ping IPv6.google.com 使用的是 2001 开头的地址,那么您不必执行上面这条命令 。 netsh interface IPv6 add route 2001::/16 "本地连接" fe80::21a:30ff:fe4f:7000 persistent 上面这条命令的意思是为 2001 开头的 IPv6地址使用正确的网关 fe80::21a:30ff:fe4f:7000(中科院某公寓) 。这个网关可能随着用户所在网络的不同而不同,简单点儿的方法可以去看正常用户的 ifconfig 网关地址 。 之后执行 ping6 IPv6.google.com 看能否 ping 通,如果能 ping 通就说明 IPv6 工作正常了 。 如果您经过以上两步之后仍然无法解决问题的话,您可以使用 netsh interface IPv6 reset 命令来重置所有修改 。 PS: 1. 如何确定网络中哪些主机在发送路由器公告? 2002 后面的两个字段就是该主机的 IPV4 地址,比如 2002:3b41:177e:8:18fc:7649:9e1d:2880,其中 3b41:177e 从 16 进制显示换算成 IPV4 的 10 进制显示地址就是 59.65.23.126 。一般来说,V4 地址的分配更有规律,您可以从 V4 地址大致确定该主机的位置 。 2. 如何确定虚假的路由记录? 一般来说,IPv6 地址的最后 4 个域应该从网卡的物理地址中获得,假设网卡物理地址是:00-17-31-94-99-EA,在 3,4 字节之间插入 FFFE 换成 EUI-64 格式是:00-17-31-FF-FE-94-99-EA,再对第一个字节的第二位取反,就变成 02-17-31-FF-FE-94-99-EA,然后装载到 IPv6 的本地地址中,就变成本地地址 fe80::217:31ff:fe94:99ea 。根据网段的不同,在前面加上 4 个网络域,就是主机的公网地址 2001:xxxx:xxxx:xxxx:217:31ff:fe94:99ea 。 由于双栈路由器是使用同一个网卡提供 V4 和 V6 的路由,那么路由器的 V4 地址和 V6 地址的物理地址是一样的 。通过 ping gateway_ipaddress_v4,然后 arp -a 看 V4 的网关地址对应的物理地址,与上面 V6 网关本地地址中获得的物理地址相对照,就可以确定某路由记录是否为可用的记录 。 |