IPv6:来自外部主机的ping6工作,但不能在同一台主机上ping6

我在Ubuntu 12.04上遇到了一个与ipv6有关的奇怪问题。

有两个主机,直接连接到互联网。 两者都分配了一个/ 64networking。 它们正确地configuration了一个/ 128端点,而另一端可以ping另一端,反之亦然。 我的计划是终止我分配的ipv6 / 64的一个/ 112子网到接口有足够的地址用于apache2虚拟主机。 但这不是重点。

主持人A:

$ ifconfig eth0 Link encap:Ethernet HWaddr (...) inet6 addr: fe80::5246:5dff:(...)/64 Scope:Link inet6 addr: 2a01:xxx:xxx:000A::2/64 Scope:Global $ route -A inet6 Kernel IPv6 routing table Destination Next Hop Flag Met Ref Use If 2a01:xxx:xx:000A::/64 :: U 256 0 0 eth0 fe80::/64 :: U 256 0 0 eth0 ::/0 fe80::1 UG 1024 0 0 eth0 ::/0 :: !n -1 1 5689 lo ::1/128 :: Un 0 1 18 lo 2a01:xxx:xx:000A::2/128 :: Un 0 1 202 lo 2a01:xxx:xx:000A::/112 :: U 1024 0 0 lo fe80::5246:5dff:fea1:977c/128 :: Un 0 1 86 lo ff00::/8 :: U 256 0 0 eth0 ::/0 :: !n -1 1 5689 lo 

主机B可以ping6 2a01:xxx:xx:000A :: [0001-FFFF]正确,并按我的预期工作。 但在主机A上,我无法ping通自己的地址。 如果我尝试ping6 2a01:xxx:xxx:000A :: n,我得到这个:

 $ ping6 2a01:xxx:xxx:000A::3 PING (...) 56 data bytes ping: sendmsg: Invalid argument ping: sendmsg: Invalid argument ping: sendmsg: Invalid argument 

我怀疑路由表,但我已经玩了很长时间,甚至使用谷歌我无法得到它的工作。

有任何想法吗? 谢谢。

您已经在lo上configuration了2a01:xxx:xx:000a :: / 112。 最具体的前缀赢得*,所以你试图ping你的lo界面上的IP地址(:: 3)不在那里。 你只需要在eth0上configuration你需要的所有地址,然后从/删除/ 112路由和/ 128。

*)工作原理:路由决策是通过查找“最具体”的路线来完成的。 这意味着具有最长前缀掩码的路由。 在你的情况下:

2A01:XXX:XXX:000A:3

该地址包含在以下networking中:

 ::/0 fe80::1 UG 1024 0 0 eth0 2a01:xxx:xx:000A::/64 :: U 256 0 0 eth0 2a01:xxx:xx:000A::/112 :: U 1024 0 0 lo 

最具体的是具有掩码/ 112的networking,因此是数据包路由的地方。 由于这是您的lo接口(并且您没有在那里configurationIP),ping失败。