我们主要以 VirtualBox 和 VMwareWorkstation 这两款目前最主流的桌面虚拟化软件作为例。
总的来说,目前有四种常见的网络模型:
- 桥接(Bridge Adapter)
- NAT
- 主机(Host-only Adapter)
- 内部网络(Internal)
VirtualBox 支持的四种模型,对于 VMware,则只有前三种
VirtualBox 支持的几种网络模型:
VMware 支持的几种网络模型:
桥接模式(Bridge Adapter)
使用虚拟交换机(Linux Bridge)将虚拟机和物理机连接起来,它们处于同一个网段。
如下图所示:
在这种网络模型下,虚拟机和物理机都处在一个二层网络里面,所以有:
- 虚拟机之间彼此互通
- 虚拟机与物理机彼此可以互通
- 只要物理机可以上网,那么虚拟机也可以
优点:简单方便
缺点:一旦虚拟机太多,广播就会很严重
桥接网络一般也只适用于桌面虚拟机或者小规模网络这种简单的形式
NAT模式
NAT,即网络地址转换(Network Address Translatation)。严格来讲又分为 NAT 和 NAT网络两种。
根据 NAT 的原理,虚拟机所在的网络和物理机所在的网络不在同一个网段,虚拟机要访问物理所在网络必须经过一个地址转换的过程,也就是说在虚拟机网络内部需要内置一个虚拟的 NAT 设备来做这件事
但其中 NAT 和 NAT网络 两者还有些许的不同:
- NAT:主机上的虚拟机之间是互相隔离的,彼此不能通信(它们有独立的网络栈,独立的虚拟 NAT 设备)
- NAT网络:虚拟机之间共享虚拟 NAT 设备,彼此互通。
下图展示了两者细微的差别:
PS:NAT 网络模式中一般还会内置一个虚拟的 DHCP 服务器来进行 IP 地址的管理。
下面我们通过实验来验证一下两种模式的区别,首先是 NAT 模式:
访问外网没问题:
访问其他虚拟机:
可以看到,两个虚拟机由于有隔离的网络栈,所以它们的 IP 地址并不在一个网段,所以 ping 不通。
再来看 NAT网络,访问外网同样没问题,我们来看下 VM 之间的互通:
可以看到,差别体现出来了, NAT网络 虚拟机之间共享网络栈,它们的 IP 地址处于同一个网段,所以彼此是互通的。
总结一下,以上两种 NAT 模式,如果不做其他配置,那么有:
- 虚拟机可以访问主机,反之不行
- 如果主机可以上外网,那么虚拟机也可以
- 对于 NAT,同主机上的虚拟机之间不能互通
- 对于 NAT网络,虚拟机之间可以互通
PS:如果做了端口映射配置,那么主机也可以访问虚拟机。
主机网络模式(Host-only Adapter)
只限于主机内部访问的网络,虚拟机之间彼此互通,虚拟机与主机之间彼此互通。但是默认情况下虚拟机不能访问外网
主机网络看似简单,其实它的网络模型是相对比较复杂的,可以说前面几种模式实现的功能,在这种模式下,都可以通过虚拟机和网卡的配置来实现,这得益于它特殊的网络模型。
主机网络模型会在主机中模拟出一块虚拟网卡供虚拟机使用,所有虚拟机都连接到这块网卡上,这块网卡默认会使用网段 192.168.56.x(在主机的网络配置界面可以看到这块网卡),如下是基本的拓扑图示:
默认情况下,虚拟机之间可以互通,虚拟机只能和主机上的虚拟网卡互通,不能和不同网段的网卡互通,更不能访问外网,如果想做到这样,那么需要如图中红虚线所示,将物理网卡和虚拟网卡桥接或共享。在主机上做如下设置即可:
通过以上配置,我们来验证一下,虚拟机可以访问主机物理网卡和外网了:
内部网络模型(internal)
虚拟机与外部环境完全断开,只允许虚拟机之间互相访问
总结
下面以一张表来描述它们之间的通信行为:
参考资料