这更像是一个试验台设置问题。
我想使用 VMware 调试虚拟机中 Linux 内核中的一些网络代码。我的虚拟机有两个网络接口。我想要做的是在主机中重放捕获文件并在虚拟机中接收数据包。我的问题是我在虚拟机中看不到重放的数据包。
- 我在主机上以 sudo 身份运行 VMware 和 tcpreplay。因此我认为访问设备文件应该不会有任何问题。
- 我正在运行 VMware 工作站 7.0
a. 我首先从自定义网络开始,因为它提供了创建自己的虚拟网络名称的选项。我分别为两个接口写了 /dev/vmnet3 和 /dev/vmnet4。然而,在启动客户机后,我没有看到主机上创建任何这些接口或设备文件(在 /dev 中)。
b. 然后我尝试了“仅主机”,但它并没有显示与接口关联的桥接器/设备文件。
c. 最后我尝试了桥接网络模式。
我在主机上看到 vmnet1、vmnet8 和 vboxnet0。对于上述三种情况,我已在每个接口上对捕获文件进行了 tcpreplay。我尝试使用“tcpdump -i any”在虚拟机中捕获数据包。但是,我没有看到任何数据包。
有什么想法/指示吗?
答案1
我最近没有在 VMware Workstation 中尝试过这个,但通常这是以下情况之一的结果:
您尝试捕获的 VM 没有将 NIC 置于混杂模式,因此看不到未发往该 VM 的数据包。您可以通过在 VM 中以 root 身份运行 tcpdump 或更改 tcpreplay 以使用 VM 的 MAC 地址作为其发送的数据包的目标地址来解决此问题(tcpreplay 附带 tcprewrite,这使得此类更改变得容易)。或者,您可以将重放的数据包的目标 MAC 地址设为广播地址,ff:ff:ff:ff:ff:ff(警告:非常危险。除非您真正了解自己在做什么,否则我建议在执行此操作之前断开物理网络的连接)。
主机不允许虚拟机将接口置于混杂模式。我不确定如何在 VMware Workstation 中调整这一点,但在 ESX[i] 中,vSwitch 上有一个“允许混杂模式”选项。您也可以通过更改 tcpreplay 流的目标 MAC 地址来解决此问题,如 1 中所述。
主机中 vmnet 上的权限不正确,无法允许混杂模式工作(假设您使用 Linux 作为主机操作系统)。有很多关于此问题的 VMware KB 文章,并且解决此问题的方法充其量是不一致的。您可能能够通过将 /dev/vmnetX 接口 chmodding 为 777 来实现此目的,但如果其他答案之一不能首先解决问题,您可能最好只让重放流量发往虚拟机的 MAC。
祝你好运,
--杰德
答案2
如果您重放的捕获中的目标 MAC 地址不是 VM 内部接口上的 MAC,并且同一 VLAN 中存在具有该 MAC 的主机,则您将看不到任何流量,因为虚拟交换机将在与该 MAC 关联的端口上转发帧。
尝试列出桥接转发表并搜索您的目标 mac。