IPv6 仅在 ping 到路由框后才有效

IPv6 仅在 ping 到路由框后才有效

情况:

我们的网络中有一个仅支持 ipv4 的路由器,每台计算机都连接到它(wifi 或电缆)。具有 ipv4 和 ipv6 的服务器也连接到此路由器。该服务器已配置了用于 6to4 隧道和 radvd 的隧道代理。网络中的客户端具有正确的前缀,可以通过 ipv6 相互 ping。但它们无法 ping 到互联网,直到它们首先 ping 服务器(具有隧道的服务器)。我在某处发现这是一个 icmp 问题,但我找不到解决方案。

问题是路由器仅限 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% 数据包丢失,耗时 28223 毫秒

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:470:XXXX:XXXX:21c:c0ff:fe2b:6478 的 64 字节:icmp_seq=1 ttl=64 时间=3.55 毫秒
来自 2001:470:XXXX:XXXX:21c:c0ff:fe2b:6478 的 64 字节:icmp_seq=2 ttl=64 时间=0.311 毫秒
来自 2001:470:XXXX:XXXX:21c:c0ff:fe2b:6478 的 64 字节:icmp_seq=3 ttl=64 时间=0.269 毫秒
来自 2001:470:XXXX:XXXX:21c:c0ff:fe2b:6478 的 64 字节:icmp_seq=4 ttl=64 时间=0.292 毫秒
^C
--- 2001:470:XXXX:XXXX:21c:c0ff:fe2b:6478 ping 统计 ---
发送 4 个数据包,接收 4 个数据包,0% 数据包丢失,时间 3000 毫秒
rtt 最小值/平均值/最大值/mdev = 0.269/1.107/3.559/1.415 毫秒
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.7 毫秒
来自 2a00:1450:8007::69 的 64 字节: icmp_seq=2 ttl=57 时间=20.2 毫秒
来自 2a00:1450:8007::69 的 64 字节: icmp_seq=3 ttl=57 时间=23.4 毫秒
^C
--- ipv6.google.com ping 统计 ---
发送 3 个数据包,接收 3 个数据包,0% 数据包丢失,耗时 2001 毫秒
rtt 最小值/平均值/最大值/mdev = 20.267/21.479/23.413/1.392 毫秒

更新:Radvd 配置

接口 eth0 {
    AdvSendAdvert 开启;
    最小RtrAdv间隔 3;
    最大响应间隔 10;
    AdvLinkMTU 1280;
    前缀 2001:470:1f0a:1511:1::/64 {
    AdvOnLink 开启;
    AdvAutonomous 开启;
    AdvRouterAddr 开启;
    };
};

更新 2:无连接

ip -6 邻居
fe80::21c:c0ff:fe2b:6478 dev wlan1 lladdr 00:1c:c0:2b:64:78 路由器可访问

有连接(ping 后)

fe80::21c:c0ff:fe2b:6478 dev wlan1 lladdr 00:1c:c0:2b:64:78 路由器陈旧
2001:470:1f0a:1511::1 dev wlan1 lladdr 00:1c:c0:2b:64:78 路由器可访问

邻居请求在 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 邻居通告

答案1

客户端的前缀是手动分配的吗?通常它们应该通过邻居发现协议自动找到路由器(在此期间路由器会发出广告并自动为其分配前缀),但听起来可能缺少这一步。

此外,路由器通告应将其链路层地址作为选项包含在路由器通告的 ICMP 标头中。如果缺少此字段,客户端将不知道如何将数据发送到路由器。听起来可能是这种情况。客户端不知道如何到达路由器,直到它发出邻居发现消息并从路由器收到邻居通告(ICMP 消息集中带有路由器标志)。

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

AdvSourceLLAddress on;

答案2

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

答案3

我认为您的 radvd.conf 没问题,尽管在 ping 之前和之后在客户端上进行比较也没什么坏处ip -6 addr; ip -6 route。隧道盒或路由器上是否启用了某种连接跟踪?从隧道盒执行 ping6 是否足够?状态防火墙可以解释为什么数据包仅在成功 ping 后才返回。

相关内容