我的背景是:
一台装有 Windows 10 的物理机(PC_Physcial_01),承载 2 个 VirtualBox Linux VM(PC_VM_01 和 PC_VM_02)
另一台专用于嗅探网络流量的物理机(PC_Physcial_03),安装了原生 Linux 和 tcpdump(以及 wireshark)
最后一台装有 Windows 10 的物理机(PC_Physcial_02),承载 2 个 VirtualBox Linux VM PC_VM_03 和 PC_VM_04)
以下是配置方案:
体验
在 PC_VM_01 上启动 netcat 作为服务器
在 PC_VM_02 上启动 netcat 作为客户端,连接到 PC_VM_01
=> 我无法嗅探这些机器之间的流量,因为 virtualbox 不使用客户的 NIC,所以网络流量不是由所有物理机器发送/接收的
为了暂时解决我的问题,我使用 PC_VM_03 作为“路由器”。事实上:
在 PC_VM_01 上启动 netcat 作为服务器
在 PC_VM_03 上启动 netcat 作为服务器
在 PC_VM_02 上启动 netcat 作为客户端,然后连接到 PC_VM_03
在 PC_VM_03 上启动 netcat 作为客户端,连接到 PC_VM_01
所以我使用 PC_VM_03 强制将流量发送到物理网络上。然后机器 PC_Physcial_03 可以嗅探它。
问题
我的问题是使用 tcpdump(或 wireshark)从另一台物理机器嗅探部署在同一主机上的两台 virtualbox linux 机器之间的网络流量(这里 PC_Physcial_03 应该嗅探 PC_VM_01 和 PC_VM_02 之间的流量)。
但是无法看到这种流量,因为看起来 VirtualBox 不使用主机 NIC 进行虚拟机间(同一主机上)网络流量。我从 VirtualBox 指南和论坛确认了这种行为(也许 VMware 有同样的行为)。
这是为了避免无用流量(是的,我同意)和黑客风险(我也同意)。在我的特定情况下,这是针对未暴露网络上的特定用途,因此暴露整体流量或增加网络流量负载不是问题。但就我而言,我想强制这样做,也许可以进行配置以避免我的“路由器”解决方案。
我的 VirtualBox 版本是 v6.1 (v6.1.16),具有以太网桥接口配置。这是 NIC 配置的屏幕截图:
答案1
但是无法看到这种流量,因为 VirtualBox 似乎不使用主机 NIC 进行虚拟机间(在同一主机上)网络流量。我从 VirtualBox 指南和论坛中确认了这种行为
“使用主机网卡”并不是可以无论如何都要这样做,因为通过主机 NIC 发送的任何数据包都只会出去,它们不会被反射回来。无论如何,虚拟机之间的流量都必须在内部转发。
更重要的是如何VirtualBox 执行内部转发。VirtualBox 不会将每个数据包广播到所有虚拟机,而是在主机和连接到接口的所有“桥接”虚拟机之间内部实现学习桥(即虚拟交换机)。
VM 配置中的“混杂模式”选项控制是否允许特定 VM 查看此虚拟交换机上的所有数据包,或者是否仅限于查看其自己的数据包。