IPv6只能在ping到路由select框后才能工作

情况:

我们的networking中只有一台ipv4路由器,每台计算机都连接到它(无线或有线)。 带有ipv4和ipv6的服务器也连接到此路由器。 服务器已经configuration了6to4 tunneling和radvd的tunnelbrokers。 networking中的客户端有正确的前缀,可以通过ipv6相互ping通。 但是,他们不能ping通互联网,直到他们第一次ping服务器(与隧道之一)。 我发现这是一个icmp问题,但我找不到解决scheme。

问题是路由器只是ipv4吗?

  • 服务器和客户端运行linux
  • 路由器运行dd-wrt没有ipv6支持:(

Ping试试:

 standa @ standa-laptop:〜$ ping6 ipv6.google.com
 PING ipv6.google.com(2a00:1450:8007 :: 69)56个数据字节
 ^ C
 --- ipv6.google.com ping统计---
 29个数据包传输,0个接收,100%丢包,时间28223ms

 standa @ standa-laptop:〜$ ping6 2001:470:XXXX:XXXX:21c:c0ff:fe2b:6478
 PING 2001:470:XXXX:XXXX:21c:c0ff:fe2b:6478(2001:470:XXXX:XXXX:21c:c0ff:fe2b:6478)56个数据字节
来自2001的64字节:470:XXXX:XXXX:21c:c0ff:fe2b:6478:icmp_seq = 1 ttl = 64时间= 3.55 ms
来自2001的64字节:470:XXXX:XXXX:21c:c0ff:fe2b:6478:icmp_seq = 2 ttl = 64时间= 0.311ms
来自2001的64字节:470:XXXX:XXXX:21c:c0ff:fe2b:6478:icmp_seq = 3 ttl = 64时间= 0.269 ms
来自2001的64字节:470:XXXX:XXXX:21c:c0ff:fe2b:6478:icmp_seq = 4 ttl = 64时间= 0.292 ms
 ^ C
 --- 2001:470:XXXX:XXXX:21c:c0ff:fe2b:6478 ping statistics ---
发送4个数据包,接收4个数据包,丢包0%,时间3000ms
 rtt min / avg / max / mdev = 0.269 / 1.107 / 3.559 / 1.415ms
 standa @ standa-laptop:〜$ ping6 ipv6.google.com
 PING ipv6.google.com(2a00:1450:8007 :: 69)56个数据字节
来自2a00:1450:8007 :: 69的64个字节:icmp_seq = 1 ttl = 57时间= 20.7ms
来自2a00:1450:8007 :: 69的64个字节:icmp_seq = 2 ttl = 57时间= 20.2ms
来自2a00:1450:8007 :: 69的64个字节:icmp_seq = 3 ttl = 57时间= 23.4ms
 ^ C
 --- ipv6.google.com ping统计---
发送3个数据包,接收3个数据包,丢包0%,时间2001ms
 rtt min / avg / max / mdev = 20.267 / 21.479 / 23.413 / 1.392 ms

更新:Radvdconfiguration

接口eth0 {
     AdvSendAdvert;
     MinRtrAdvInterval 3; 
     MaxRtrAdvInterval 10;
     AdvLinkMTU 1280;
    前缀2001:470:1f0a:1511:1 :: / 64 {
     AdvOnLink;
     AdvAutonomous;
     AdvRouterAddr;
     };
 };

更新2:没有连接

 ip -6 neigh
 fe80 :: 21c:c0ff:fe2b:6478 dev wlan1 lladdr 00:1c:c0:2b:64:78 router REACHABLE

连接(ping后)

 fe80 :: 21c:c0ff:fe2b:6478 dev wlan1 lladdr 00:1c:c0:2b:64:78路由器STALE
 2001:470:1f0a:1511 :: 1 dev wlan1 lladdr 00:1c:c0:2b:64:78路由器REACHABLE

邻居请求在ping时发生:

 fe80 :: 21c:c0ff:fe2b:6478 2001:470:1f0a:1511:21c:bfff:fe60:b389 ICMPv6邻居请求
 2001:470:1f0a:1511:21c:bfff:fe60:b389 fe80 :: 21c:c0ff:fe2b:6478 ICMPv6 Neighbor advertisement

客户端的前缀是否被手动分配? 通常他们应该通过邻居发现协议自动发现路由器(在此期间,路由器发送广告并自动分配它们的前缀),但是听起来像这个步骤可能会丢失。

另外,路由器通告应该在路由器通告的ICMP报头中包括其链路层地址作为选项。 如果这个字段丢失,客户端将不知道如何发送数据到路由器。 这听起来可能是这样的。 客户端不知道如何到达路由器,直到它发出邻居发现消息,并且从路由器收到一个邻居通告(ICMP消息集中的路由器标志)。

要在路由器广告中包含源链接层地址,请将以下内容添加到您的radvd.conf中

AdvSourceLLAddress on; 

确保您的客户端使用服务器的ipv6地址作为其网关/路由器。 正如Jeff指出的那样,可能会自动分配(检查你的radvdconfiguration),或者在这种情况下手动检查客户端configuration。

我认为你的radvd.conf是好的,虽然它不会伤害比较ip -6 addr; ip -6 route 在ping客户端之前和之后的ip -6 addr; ip -6 route 。 隧道盒或路由器上是否启用了某种连接跟踪function? 从隧道箱完成的ping6是否足够? 有状态的防火墙可以解释为什么数据包只能在ping成功后才能返回。