-1

在 Windows 上使用 VMware 来托管运行 iptables 的虚拟 linux 机器是否有问题?我有一个似乎可以在物理硬件上运行但在 VMware 下不稳定的配置。

我正在使用 VMware 在 Windows 2003 Server 主机上运行虚拟 linux 2.6.24 机器。linux 应用程序本质上是一个运行iptables. 表中的规则nat包括:

Chain foo_pre
 target     prot opt in  out  source      destination
 LOG        all  --  *   *    0.0.0.0/0   0.0.0.0/0     [options here]
 LOG        all  --  *   *    0.0.0.0/0   10.10.1.33    [options here]
 DNAT       all  --  *   *    0.0.0.0/0   10.10.1.33    tcp dpt:80 to:192.168.0.33:8080

Chain PREROUTING
 target     prot opt in  out  source      destination
 foo_pre    all  --  *   *    0.0.0.0/0   0.0.0.0/0

我看到使用 10.10.1.33:80 的传入数据包tcpdump,第一个LOG生成消息,但是DNAT第二个或第二个都没有LOG显示在其数据包计数器上注册的数据包,第二个LOG不生成任何消息,并且tcpdump不显示数据包192.168.0.33。

适配器位于eth010.10.0.0/16 网络上,默认网关为 10.10.1.1;它的辅助地址为 10.10.1.33/32。 /proc/sys/net/ipv4/config/eth0/forwarding设置为 1。

VMware 是罪魁祸首,还是我遗漏了什么?谢谢!


更新:我们简化了测试环境。根本没有 NAT 规则,只是在 Win2k3 服务器主机下运行的 linux VM。测试步骤:

  1. VM 桥接到主机 NIC。虚拟机和主机在同一个子网中,具有与上述相同的默认网关。

  2. VM 与其子网内外的设备进行通信:ICMP、TCP、UDP。通信是双向的:由哪个设备发起并不重要。

  3. 工程师在检查系统时重启了默认网关。

  4. VM 现在与其子网上的设备通信。从第 2 步开始通过网关与同一设备进行通信的任何尝试都无法将数据包放在网络上。 VM 上 eth0 上的 tcpdump 显示没有响应的传出数据包;主机上的 WireShark 在物理网卡上没有显示任何内容。

  5. 停止和重新启动 VM 不会改变其行为。停止 VM 并将其替换为具有适当 IP 地址等的不同VM不会改变行为。

  6. Win2k3 主机在其子网内外继续正常通信。

我只能由此得出结论,虚拟机和主机之间“发生了一些事情”:在 VMware 驱动程序中,或者在主机的网络堆栈中。我又要去上网了……很难想象我们是第一个观察到这一点的人。

他们来时更新。感谢您的想法和讨论。

4

2 回答 2

1

您的第二条日志行正在尝试匹配发送到 10.10.1.33 的数据包,但您在其上方的行中将目标地址更改为 192.168.0.33。

我不确定为什么您还没有在 tcpdump 中看到传出的数据包。我假设您在 linux VM 本身上运行 tcpdump。虚拟机是在它接收的同一个接口上发送数据包,还是有第二个虚拟以太网适配器?分配给哪些机器的各种 IP 地址(10.10.1.33 除外)。

关于更新:我猜你没有使用 DHCP(人们在使用静态 IP 地址时通常不会打扰)。此外,听起来网关看到一个 NIC 使用两个 IP 地址。通常这应该没问题,但它总是让你得到细节。

网关是否有可能只为 NIC 分配一个 IP 地址而忽略来自 VM 的流量?

于 2008-11-10T21:33:42.607 回答
0

编辑后,我建议做一个实验:在您的物理机上,配置您的 NIC 以禁用所有硬件加速。

于 2008-11-11T04:45:02.907 回答