在 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。
适配器位于eth0
10.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。测试步骤:
VM 桥接到主机 NIC。虚拟机和主机在同一个子网中,具有与上述相同的默认网关。
VM 与其子网内外的设备进行通信:ICMP、TCP、UDP。通信是双向的:由哪个设备发起并不重要。
工程师在检查系统时重启了默认网关。
VM 现在仅与其子网上的设备通信。从第 2 步开始通过网关与同一设备进行通信的任何尝试都无法将数据包放在网络上。 VM 上 eth0 上的 tcpdump 显示没有响应的传出数据包;主机上的 WireShark 在物理网卡上没有显示任何内容。
停止和重新启动 VM 不会改变其行为。停止 VM 并将其替换为具有适当 IP 地址等的不同VM不会改变行为。
Win2k3 主机在其子网内外继续正常通信。
我只能由此得出结论,虚拟机和主机之间“发生了一些事情”:在 VMware 驱动程序中,或者在主机的网络堆栈中。我又要去上网了……很难想象我们是第一个观察到这一点的人。
他们来时更新。感谢您的想法和讨论。