路由器究竟如何知道,要访问虚拟机,它必须先访问我的计算机?VirtualBox 会更改本地网络 ARP 吗?

有人说你需要设置混杂模式才能使桥接工作,这样它就可以捕获带有虚拟机 MAC 地址的数据包,但是如果所有流量都直接发往目标机器,而虚拟机无法像在 Wi-Fi 上那样进行嗅探,那么如何使用以太网来实现这一点呢?

2

  • 1
    这可能会有帮助:


    – 

  • 我会尝试回答,但从之前的帖子来看,感觉你缺少了一些理解答案所必需的基本知识…不要再将桥接视为虚拟机特有的东西,重新审视以太网交换机的工作原理 – 例如路由器内置的交换机如何工作 – 因为它与虚拟机主机完全相同。


    – 



最佳答案
2

路由器究竟如何知道,要访问虚拟机,它必须先访问我的计算机?VirtualBox 会更改本地网络 ARP 吗?

  • 在以太网上:路由器不需要知道。网桥是透明的——数据包不会专门发送到网桥的 MAC 地址;它们可以直接发送到目标系统的 MAC 地址,如果中间恰好有任何网桥,它们的工作就是通过正确的端口转发数据包。

    因此,当路由器首次对虚拟机的 IP 地址进行 ARP 查询时,主机的 VirtualBox 桥接器会将其不加修改地转发,并让虚拟机使用其自己的 MAC 地址进行回复。

    这一切的工作原理就和你有一个带有多个设备的以太网交换机一样。

  • 在 Wi-Fi 上:VirtualBox 桥接器会重写所有数据包,使它们看起来好像来自主机的 MAC 地址。(也就是说,它对 MAC 地址进行 NAT。)

有人说你需要设置混杂模式才能使桥接工作,这样它就可以捕获带有虚拟机 MAC 地址的数据包,但是如果所有流量都直接发往目标机器,而虚拟机无法像在 Wi-Fi 上那样进行嗅探,那么如何使用以太网来实现这一点呢?

首先考虑一下是什么流量直接到达目标机器。网桥通过从机器本身生成的流量中学习 MAC 地址位置来工作 – 例如,当交换机通过端口 3 收到来自源 Y 的数据包时,它会了解到目的地 Y 的数据包也应该通过端口 3 发送。

因此,当您的虚拟机从其自己的 MAC 地址生成流量时,沿途的所有以太网桥都将了解其位置,并且虚拟机 MAC 地址的流量将自动通过相同路径定向回来 – 无需“嗅探”任何东西,因为数据包将直接在主机的以太网接口上传送。

1

  • 非常好,谢谢大家


    – 

通过将物理网卡置于混杂模式,虚拟机能够接收针对其 IP 地址的 ARP 请求,并使用其虚拟 MAC 地址进行回复。因此,路由器的 ARP 表包含虚拟机 IP 地址的条目,该条目映射到虚拟机的虚拟 MAC 地址,就像在任何其他计算机上的裸机上运行的操作系统一样。

任何中间交换机都将看到来自 VM 的虚拟 MAC 地址的流量,并了解该 MAC 地址可通过该交换机端口访问,并相应地更新交换机的 CAM 表(哪个 MAC 地址通过哪个端口的桥接表)。