【问题标题】:VMware and iptablesVMware 和 iptables
【发布时间】:2008-11-09 00:44:31
【问题描述】:

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

我正在使用 VMware 在 Windows 2003 Server 主机上运行虚拟 linux 2.6.24 机器。 linux 应用程序本质上是一个运行iptables 的NATting 路由器。 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

我看到使用tcpdump 到10.10.1.33:80 的传入数据包,第一个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。测试步骤:

  1. VM 已桥接到主机 NIC。虚拟机和主机在同一个子网上,默认网关和上面一样。

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

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

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

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

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

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

及时更新。感谢您的想法和讨论。

【问题讨论】:

    标签: windows linux vmware iptables nat


    【解决方案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 的流量?

    【讨论】:

    • 抱歉,帖子中的错字,不是实际代码。我已经纠正了。在上面的编辑中添加信息。感谢您的关注!
    【解决方案2】:

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

    【讨论】:

    • 不确定我是否关注。你的意思是阻止它卸载校验和,还是其他什么?你想测试的怀疑是什么?谢谢!
    • 硬件可能太聪明了,可能会为物理主机和网关之间的通信重新创建一些设置,并假设它已经完成。如果硬件被告知什么都不做,那么物理机和客户机中的驱动程序可能都可以控制它。
    • 如果校验和是唯一可用的硬件优化,那么这可能不是问题,我的实验毫无用处。
    猜你喜欢
    • 2013-06-27
    • 2010-10-24
    • 1970-01-01
    • 2014-10-29
    • 2010-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多