路由器究竟如何知道,要访问虚拟机,它必须先访问我的计算机?VirtualBox 会更改本地网络 ARP 吗?
有人说你需要设置混杂模式才能使桥接工作,这样它就可以捕获带有虚拟机 MAC 地址的数据包,但是如果所有流量都直接发往目标机器,而虚拟机无法像在 Wi-Fi 上那样进行嗅探,那么如何使用以太网来实现这一点呢?
路由器究竟如何知道,要访问虚拟机,它必须先访问我的计算机?VirtualBox 会更改本地网络 ARP 吗?
有人说你需要设置混杂模式才能使桥接工作,这样它就可以捕获带有虚拟机 MAC 地址的数据包,但是如果所有流量都直接发往目标机器,而虚拟机无法像在 Wi-Fi 上那样进行嗅探,那么如何使用以太网来实现这一点呢?
在以太网上:路由器不需要知道。网桥是透明的——数据包不会专门发送到网桥的 MAC 地址;它们可以直接发送到目标系统的 MAC 地址,如果中间恰好有任何网桥,它们的工作就是通过正确的端口转发数据包。
因此,当路由器首次对虚拟机的 IP 地址进行 ARP 查询时,主机的 VirtualBox 桥接器会将其不加修改地转发,并让虚拟机使用其自己的 MAC 地址进行回复。
这一切的工作原理与您拥有一个带有多个设备的以太网交换机完全相同。
在 Wi-Fi 上:VirtualBox 桥接器会重写所有数据包,使它们看起来好像来自主机的 MAC 地址。(也就是说,它对 MAC 地址进行 NAT。)
首先考虑一下是什么让流量直接到达目标机器。网桥通过从机器本身生成的流量中学习 MAC 地址位置来工作 - 例如,当交换机通过端口 3 收到来自源 Y 的数据包时,它会了解到目的地 Y 的数据包也应该通过端口 3 发送。
因此,当您的虚拟机从其自己的 MAC 地址生成流量时,沿途的所有以太网桥都将了解其位置,并且到虚拟机 MAC 地址的流量将自动通过相同路径定向回来 - 无需“嗅探”任何东西,因为数据包将直接在主机的以太网接口上传送。
通过将物理网卡置于混杂模式,虚拟机能够接收针对其 IP 地址的 ARP 请求,并使用其虚拟 MAC 地址进行回复。因此,路由器的 ARP 表包含虚拟机 IP 地址的条目,该条目映射到虚拟机的虚拟 MAC 地址,就像在任何其他计算机上的裸机上运行的操作系统一样。
任何中间交换机都将看到来自 VM 的虚拟 MAC 地址的流量,并了解该 MAC 地址可通过该交换机端口访问,并相应地更新交换机的 CAM 表(哪个 MAC 地址通过哪个端口的桥接表)。