设置:
- 主机: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,因为该地址在其路由表中被标记为本地。)