我的网络比较简单:局域网中的所有 PC(Ubuntu 台式机、Win7 台式机、XP 上网本)都连接到 dlink 家用路由器,该路由器连接到 ISP 的电缆调制解调器。局域网的 IP 子网为 10.10.10.0/24,网关(dlink 路由器)为 10.10.10.1,PC 为 10.10.10.100-120,通过 DHCP。PC 之间共享文件夹(基本操作是右键单击 -> 共享,这是 samba,对吧?)。到目前为止,一切顺利。
现在 Ubuntu 桌面有 VirtualBox。我计划安装沙盒虚拟机来测试恶意软件(并监控它们“呼叫”的方式)。所以我安装了一台 Ubuntu VM,网络设置为NAT模式(默认模式,子网我猜是 10.0.2.0/24)。
因此我在虚拟机中打开 Nautilus,转到“网络”,令我惊讶的是......虚拟机是能够看到所有共享文件夹主机的 LAN!!!
怎么会这样?“共享文件夹”不是只能在 LAN 上使用吗?位于另一个子网中的虚拟机怎么可以访问 Win7 计算机中的共享文件夹?它们不在同一个 LAN 中!(那应该是 Virtualbox 的“桥接”模式,对吗?)。不,我不是指 VirtualBox 的“共享文件夹”功能(将主机驱动器作为网络共享映射到客户机),我没有使用它。
因此,我显然缺乏一些有关共享文件夹和 NAT 工作原理的基本知识。我以为 NAT 会将虚拟机与我的 LAN 隔离,同时仍能浏览互联网。我很惊讶它能够看到我的 LAN 的工作组,即使它们位于不同的子网中。
那么,问题是:这怎么可能呢?VirtualBox、共享文件夹和 NAT 之间的关系如何运作?如何设置虚拟机,使其无法看到客户的 LAN,但仍能浏览互联网?
答案1
对于主机上的应用程序或与主机位于同一网络上的另一台计算机,数据似乎是由主机上的 VirtualBox 应用程序使用属于主机的 IP 地址发送的。VirtualBox 会监听对所发送数据包的回复,然后重新打包并重新发送到其专用网络上的客户机。
VirtualBox 中的网络(Oracle 博客):
每个虚拟机都认为自己处于自己的隔离网络中。当它们通过网关 (10.0.2.2) 发送流量时,VirtualBox 会重写数据包,使它们看起来好像来自主机,而不是来自客户机(在主机内运行)。
就像在物理主机上一样,NAT 会阻止远程连接,但允许传出连接。我认为没有一种网络模式可以区分您的 LAN 和 Internet 的其余部分。
答案2
只是瞎猜,你确实说过 ubuntu 客户端是 10.0.2.0/24。24 会将它们放在同一个子网中,不是吗?255.255.255.0