IP 转发在 VirtualBox VM 中不起作用

IP 转发在 VirtualBox VM 中不起作用

我正在尝试使用 VirtualBox 在本地设置网络测试平台。我有两台虚拟机。一台虚拟机 (A) 有两个接口,eth0 和 eth1,另一台机器 (B) 只有一个接口,eth0。它们的设置如下。

eth0 on A is connected to NAT network: 172.31.0.0/16 and has IP 172.31.0.2
eth1 on A is connected to NAT network: 10.0.0.0/8 and has IP 10.0.0.2

eth0 on B is connected to NAT network: 172.31.0.0/16 and has IP 172.31.0.3

A上的路由表如下所示:

default via 10.0.0.1 dev eth1 proto static
172.31.0.0/16 dev eth0 proto kernel scope link src 172.31.0.2
10.0.0.0/8 dev eth1 proto kernel scope link src 10.0.0.2

我可以通过 172.31.0.0/16 网络将流量直接从 B 发送到 A。

我希望能够将数据包从 A 上的 eth0 转发到 eth1。我在 B 上添加了以下路由:

ip route add 10.0.0.0/8 via 172.31.0.2

在 A 上,我使用 sysctl 设置了以下参数:

net.ipv4.ip_forward=1
net.conf.ipv4.all.rp_filter=0

因此我尝试从 B ping 10.0.0.1(10/8 网络的网关)。数据包到达 A,我可以使用 tcpdump 确认,但之后它似乎就消失了。它没有通过其他接口转发,甚至似乎根本没有命中 iptables 上的任何链(我尝试记录它们全部)。

我在 AWS 上重新创建了类似的设置,并且它按预期工作。有人能建议可能发生的情况吗,或者我该如何诊断这个问题?

答案1

感谢我在虚拟盒论坛上收到的一些建议,我发现这个问题是由于虚拟盒中的 NAT 网络模式的限制造成的。

NAT 网络的实现并不能准确模拟真实网络。相反,虚拟机主机应用程序似乎会拦截来自客户网络接口的出站数据包,这些数据包在 NAT 网络子网内没有目标地址。

这意味着你无法真正使用虚拟盒中的 NAT 网络实现我上述期望的场景。

相关内容