VirtualBox 网络模式总结

今天在装MySQL的过程中,突然想尝试一下通过VirtualBox虚拟机模拟远端服务器,为本地win10提供数据服务器访问业务。那问题来了,如何正确配置VirtualBox的网络设置,来实现win10主机与虚拟机互通互联的需求呢?

五种网络模式

首先,让我们来看一下VirtualBox中的5中网络配置模式:

如上图所示,在VirtualBox中我们可能用到的就5种网络模式,下面对它们分别简介如下:

网络模式解释
网络地址转换(NAT)NAT协议通过具有公网ip的host主机作为代理,
实现了无公网ip的guest虚拟机的互联网访问需求
NAT网络本质上也是NAT,不同的是这种模式下不支持
host和guest主机之间的端口转发
桥接网卡桥接有点类似物理设备中的交换机,
通过它,guest虚拟机可以和host主机在链路层互联,构成一个局域网;
这样的话,guest虚拟机由于加入了host主机所在的物理局域网会由DHCP自动分配到一个ip
内部网络在这种模式下,VirtualBox会生成一个虚拟局域网供虚拟机集群使用;
虚拟机间可以相互通信,但host主机无法与虚拟机进行通信
host-only模式guest虚拟机通过host上的虚拟网卡与host主机处于同一局域网中,
guest和host可以相互通信,但guest虚拟机无法访问外网

分类详解

对于上述五种模式(除去内部网络外),我在win10和虚拟机中分别做了ping通测试,现记录如下:

桥接网卡

如上面表格总结的那样,在桥接模式下,guest虚拟机获得了和host一样的,位于同一局域物理网络中的独立的ip地址。

我们此时,可以将其视作一台真实的物理机,它与host地位对等。

在实际的测试过程当中,我发现自己笔记本的无线网卡似乎并不支持桥接模式下的混杂模式,具体表现是:guest虚拟机可以和host机相互ping通,但guest虚拟机却死活也ping不通外网。

通过多方搜索,我总算是在一篇博文中发现了这个问题,特地mark一下。简要步骤是:先在win10的设备管理器中添加一个Microsoft KM-TEST 环回适配器,然后将物理无线网卡的网络共享给该虚拟网络配适器,最后在VirtualBox网络桥接模式配置界面中找到名称选择选项,选择Microsoft KM-TEST 环回适配器就可以了。详情请参考VirtualBox与笔记本无线网卡桥接

NAT网络(不带端口转发)

NAT协议,最初是为了解决公网ip地址有限,但又必须让每台不具有公网ip的计算机实现上网目的这一问题而提出的。实现思路可以大致理解为:位于同一局域网中的无公网ip主机,通过一个具有公网ip的计算机去间接访问所需资源;这个具有公网ip的计算机在这里起到了一个代理的作用(这一点很类似我们今天的海外商品代购中心),它首先将这些无公网ip主机的请求进行转换(主要是将请求中的原ip地址换成自己的公网ip),然后再次转发给互联网中的目的主机;但收到回复后,它再按照NAT转换表进行转发回复,将响应最终发给每一个无公网ip主机。

根据这一思路,VirtualBox中使用NAT网络模式,guest虚拟机所在局域网中必然存在一个具有公网ip的代理主机。为验证这一理论,我在虚拟机中通过路由跟踪命令traceroute,成功发现了这个代理主机的身影,如下所示:

相关主机间的ping图如下:

网络地址转换(NAT 带端口转发)

上面刚介绍了不带端口转发的NAT模式,通过相关的ping图我们不难发现,这种模式存在着很大缺陷:那便是Host主机无法访问Guest虚拟机。这样一来,我们希望的win10主机请求虚拟机中数据库服务器的初衷就泡汤了。

针对这种问题,VirtualBox特地为我们推出了带端口转发的NAT网络模式,相关设置描述如下:

首先我们进入VirtualBox的网络设置界面,如下所示

进入端口转发设置子界面

按照图示指南,完成相应设置后,点击确认即可。

这里,我们再来看看host主机与guest主机之间的相关ping通情况:

host-only模式

这一网络模式下,默认仅允许guest虚拟机之间互相访问,不能连外网,没有配置DNS无法解析域名,无法ping通host主机。但另一方面,它也是VirtualBox网络配置中可玩性最高的一种模式,按理说只要是其他模式能够实现的功能,通过正确的配置,在这种模式下都能实现。

我们可以认为,VirtualBox默认为这一模式虚拟化出了一张网卡,用于连接所有的虚拟主机;我们可以通过对这块虚拟网卡手动设定ip,或者是桥接其他物理网卡、网络共享等操作,来达到我们想要的各种网络需求。

方案确定

通过上述分析,我大致确定了两套可行的方案:

  1. 通过VirtualBox的网桥模式,使guest虚拟机获得与host主机同一局域网下的真实ip,进而达到host主机自由请求guest虚拟机上数据库服务的目的。
  2. 利用NAT端口转发模式,实现guest虚拟机访问外网的目标,同时host主机通过端口映射技术,可以最终请求到guest虚拟机上数据库的相关服务,完成数据库的远程调用。