具有多个接口的 Ping 系统

具有多个接口的 Ping 系统

设置:

  • 主机:macOS,IPv6 地址 - 2002::3/64 (vmnet1)
  • 客户机:在 vmware 中运行的 Ubuntu,IPv6 地址 - 2002::2/64 (eth0) 和 2001::1/64 (tun0)

配置:

  • 在 Ubuntu 上启用 IPv4 和 IPv6 转发
  • 在 macOS 上添加的路线:sudo route add -inet6 2001::/64 -interface vmnet1

配置_设置_图

问题:我无法ping6 2001::1从 macOS 中访问。但是,我可以访问ping6 2002::2。我尝试过 VMware 的“与我的 Mac 共享”、“自动检测”以及“Mac 专用”设置。

答案1

通过 vmnet1 路由 2001::/64 是不够的;您还必须指定哪个网关在 vmnet1 上,在这种情况下,数据包应该被发送到 – 2002::2。

如果没有网关规范,源将尝试使用 ARP(用于 IPv4)或 NDP(ICMPv6 邻居发现)直接解析目标。但是,IPv6 通常将地址视为属于各个接口或链接,而不是整个主机 - 因此,如果邻居发现请求通过未分配该地址的接口到达,IPv6 主机通常会忽略该请求。(这与 Linux 中 IPv4 的 arp_ignore=1 类似。)

因此,Ubuntu 系统不会响应通过 eth0 到达的 2001::1 的 NDP 查询,因为 eth0 上没有这样的地址 - 它只在 tun0 上分配。但是,它会响应 2002::2 的 NDP 查询,因此您的路由应如下所示:

route add -inet6 2001::/64 2002::2

(也就是说,一旦数据包通过 L2 成功路由到正确的 MAC 地址,Ubuntu 系统将要接受并识别 IP 标头 (L3) 中的 2001::1,因为该地址在其路由表中被标记为本地。)

相关内容