背景

之前在 MacBook Pro 上使用 Parallels Desktop(一款付费的基于 iOS 的虚拟化软件),创建centos 7 虚拟机用来安装容器部署 OpenStack ,但对于大部分开发人员还是使用 windows 操作系统,所以选择了 VirtualBox 用来建立虚拟机,发现其网络配置上还是种类较多,而且 OpenStack 对于网络配置还是有一定的要求,因此整理了相关资料,供大家参考。
以下的内容是基于 VirtualBox 5.1.26 ,可在其官网上下载。

VirtualBox 网络配置

VirtualBox 共有六种网络模式。

未指定

选择此配置,只是给虚拟机配置了一块网卡,但是不能和宿主机或者其他任何主机通讯,只能自己访问自己。

网络地址转换(NAT)

使用此网络配置的虚拟机,并不真实存在于网络中,而且同一宿主机上的每个使用这种配置的虚拟机内部查看都是同一个IP,所以说这些虚拟机之间是无法访问的,宿主机和宿主机网络中的任何主机也都不能直接访问虚拟主机。虚拟机能访问宿主机,也能够访问宿主机所能访问的任何主机。虚拟机访问网络是先通过 VirtualBox 转换后再发送出去的,数据接收也是先由 VirtualBox 接收后再转换转发到虚拟主机。
如果需要外部主机或者宿主机访问虚拟机的话,只能在此基础上设置端口转发,设置步骤如下:

  1. 在虚拟机的“网络”配置窗口中,选择连接方式“网络地址转换(NAT)”,然后选择高级——>勾选“接入网线”——>点击“端口转发”;
  2. 新增一条记录:其中,名称随便填,协议支持TCP或者UDP,主机(宿主机)IP和子系统(虚拟机)IP都可以不填,主机端口填(需要暴露的端口),子系统端口填(虚拟机的端口);
  3. 通过访问宿主机IP加主机端口的方式,就可以转换访问到虚拟机的端口;

NAT 网络

这种模式是“网络地址转换NAT”和“内部网络”的组合体。
虚拟机可以访问外部网络,以及访问本宿主机上的其他虚拟机,而且可以直接连接主机可访问的所有资源。使用此模式必须先配置 VirtualBox 的全局设置,步骤如下:
1.选择“管理”——>“全局设定”——>“网络”,点击“NAT 网络”;
2.新增一条记录,建立一个NAT网络配置,比如默认10.0.2.0/24,选择开启DHCP;
3.使用 VirtualBox 创建虚拟机,设置该虚拟机的网络配置,在选择了“NAT 网络”配置后,再选择“界面名称”,这个就是上一步配置好的全局 NAT 网络配置,所有选择此配置的虚拟机启动后就会从 DHCP 服务器获得一个类似10.0.2.x的IP;
此模式下宿主机是不能主动访问虚拟机的,需要在全局网络配置中针对该NAT网络设置端口转发,主机与虚拟机才能有限度的互访,配置方式如下:
1.选择“管理”——>“全局设定”——>“网络”,点击“NAT 网络”;
2.选择之前你的虚拟机在设置NAT网络时选择的“界面名称”,点击编辑;
3.点击“端口转发”,填写内容和方式与之前的网络地址转换(NAT)中的配置相似,不再复述;

桥接网卡

虚拟机通过此配置,桥接到宿主机的一个网卡中,就像真实存在于宿主机网络中的一台主机一样,虚拟机可通过这个网卡收发数据,这个网卡所能访问到的资源,虚拟机都能访问。虚拟主机能与宿主机和宿主机网络中的主机完美互通。被桥接的网卡会开启混杂模式,混杂模式分为以下三种:
1.拒绝:虚拟机和主机都仅接收目的地址是自己的数据。
2.全部允许:所有数据(不论其目的地址是否是自己)都分别发送到虚拟机和主机。
3.允许虚拟电脑:所有数据(不论其目的地址是否是自己)仅发送到虚拟机。

提示:如果宿主机在一个受限制的网络,虚拟主机是不能访问互联网的,如:宿主机使用ADSL、使用代理或VPN、宿主机网关做了MAC地址限制等等。

内部网络

虚拟机与宿主机完全分开,虚拟机与宿主机网络不能互通,只有配置了同一“界面名称”的内部网络模式的虚拟机之间才能互相访问,与“NAT 网络”中可以配置DHCP不同,我们必须自己在这些虚拟机中手工配置他们的IP,保证他们的IP在同一网段中;

仅主机(Host-Only)网络

VirtualBox 在宿主机中虚拟一个 host-only 网卡,然后把虚拟主机桥接到 host-only 网卡上,我们可以通过设置 host-only 网卡(共享、桥接)来实现网络连接。系统并不为虚拟机提供任何路由服务,因此虚拟机只能和宿主机进行通信,而不能连接到实际网络上。
此模式必须先配置 VirtualBox 的全局设置,步骤如下:
1.选择“管理”——>“全局设定”——>“网络”,点击“仅主机(Host-Only)网络”;
2.新增一条记录,建立一个配置,可指定宿主机在这个内部网的IP,以及是否启用DHCP,有点类似IaaS平台上设置VPC;
再配置虚拟机的网络设置,选择此网络模式,然后选择“界面名称”为之前全局设置,虚拟机就会根据此配置,自动获取ip,所有选择此配置的虚拟机都在一个网段内,可相互访问,可以通过设置的宿主机内部IP访问宿主机,他们也可以利用主机internet连接外网,但是如果配置了多个全局“仅主机(Host-Only)网络”,属于不同两个网络的虚拟机之间是无法访问的。这个配置是最灵活的,但需要有基本的网络配置知识。

对比分析

上面写了一大堆,看文字确实很累,把这些模式整理了一张表格,希望能够一目了然:

访问路径 未指定 网络地址转换(NAT) NAT 网络 桥接网卡 内部网络 仅主机(Host-Only)网络
虚拟机->宿主机 无法访问 可以访问 可以访问 可以访问 无法访问 可以访问
宿主机->虚拟机 无法访问 需配置端口转发 需配置端口转发 可以访问 无法访问 可以访问
同一宿主机的虚拟机之间 无法访问 无法访问 可以访问 可以访问 需同一界面名称 需同一界面名称
虚拟机->其他主机 无法访问 可以访问 可以访问 可以访问 无法访问 无法访问
其他主机->虚拟机 无法访问 需配置端口转发 需配置端口转发 可以访问 无法访问 无法访问