【计算机网络】:一次性理清Virtualbox虚拟机网络模型

  • 平时我们基于VirtualBox或者VMware软件可以随意创建虚拟机

  • 虚拟机的网络模型有多种,不理清它们之间的区别很容易出现网络不通的头痛问题

  • 通过分析各种虚拟网络模型,解决虚拟机平台和物理机的网络连接问题

image.png

1.VirrtualBox和VMware简单对比

两者都是优秀的虚拟机平台,我们可以通过它们创建虚拟机来安装不同环境的操作系统

主要区别对比:

  1. VirtualBox是开源免费软件,下载和安装比较方便,VMware功能更加强大,但是需要注册码

  2. VirtualBox相对于VMware安装和配置更加简单,运行内存占用也比较小

  3. VirtualBox由于是开源免费,社区相对更加活跃,但总体两者出现问题都能找到解决方案

综上,本次主要采用VirtualBox来创建虚拟机进行演示,安装的操作系统镜像是Linux CentOS8.2版本

2.常见的网络模型

主要有下面四种网络模型

  • 桥接(Bridge Adapter)
  • NAT
  • 主机网络(Host-only Adapter)
  • 内部网络(Internal)

VirtualBox包含了以上的四种网络模型,VMware只有前三种

3.桥接网络

3.1 主要原理

桥接网络模型依赖虚拟交换机(Linux bridge)将虚拟机和物理机连接起来,它们之间处在同一个二层网络

虚拟机和物理机的ip处在相同网段之下,举例,比如都处在192.168.100.x的网段之下,物理机ip为192.168.100.10,虚拟机ip为192.168.100.20

桥接网络的网络连通总结:

  • 虚拟机之间彼此互通

  • 虚拟机和物理机彼此互通

  • 只要物理机能上外网,虚拟机也能上外网

3.2 网络原理图

image.png

如上图所示,物理主机内创建了三台虚拟机,然后通过bridge虚拟设备将物理网卡和虚拟网卡进行连接,虚拟机和物理机的ip都处在同一网段(192.168.100.x)之内

虚拟机借助物理机网卡实现外网的访问,物理机也可以ping通虚拟机,并且虚拟机之间网络是连通的,彼此之间可以进行访问

3.3 配置方式

image.png

找到创建好的虚拟机,【设置】-【网络】,连接方式选择“桥接网卡”,界面名称选择正确的外网网卡,然后勾选“启动网络连接”即可

外网网卡名称可以在网络适配器查看是否匹配对应,例如就需要选择这个无线网卡虚拟机才能上外网

image.png

验证网络连通情况

  • 启动CentOS系统的虚拟机,输入ip addr查看网络设备地址,我这里虚拟网卡分配到的地址是192.168.123.21

image.png

查看本地的网卡地址是否也是属于192.168.123.x的网段下,打开cmd输入ipconfig命令查看,物理网卡的地址为192.168.123.67,符合理论

image.png

通过ping命令验证物理机和虚拟机彼此之间互ping的情况,结果是双方都可以ping通

image.png

插入一个问题:可能会出现虚拟机ping主机不通的情况,一般是因为防火墙的问题,比如我物理机是win10的系统,就出现防火墙设置问题,问题主要是因为win10的防火墙没有打开ICMPv4-In这个规则,解决如下:

1.依次打开【控制面板】-【Windows Definder防火墙】-【高级设置】-【入站规则】-【按配置文件筛选】-【按公有配置文件筛选】

2.找到并启用文件类型为“公用”的“文件和打印共享(回显请求 – ICMPv4-In)”规则,此时就可以ping通了

image.png

3.最后是验证虚拟机之间是否可以彼此互ping,另起一台虚拟机,同样的方式设置为桥接模式,我这里分配到为192.168.123.52,如下所示,彼此之间也能ping通

image.png

4.NAT模式

4.1 主要原理

NAT网络模型基于NAT协议(Network Address Translation,网络地址转换),主要功能是能将IP数据报头中的IP地址转换为另一个IP地址的过程。

在实际应用中,NAT主要用于实现私有网络访问公共网络的功能。

NAT网络模型使得虚拟机的私有ip可以通过虚拟NAT设备转化为物理主机的ip,然后通过物理网卡实现外网的访问

需要注意的是Virtualbox中的NAT网络模型分为了NATNAT网络,两者的区别主要有:

  • NAT下的虚拟机之间是互相隔离的,彼此之间不能进行通信,也就是不能彼此互ping,因为它们各自分配着独立的虚拟NAT设备

  • NAT网络下的虚拟机之间因为共享同一台虚拟NAT设备,彼此互通

再回过来总结下NAT网络模型和物理主机的连通情况:

  • 虚拟机可以ping通物理机,但是物理主机无法ping通虚拟机

  • 如果物理主机可以上外网,那么虚拟机就可以上外网

VirtualBox的NAT模型下,主机ping不通虚拟机,但是VMware经过实验验证是可以ping通的,既然无法ping通,那不是代表无法使主机ssh连接到虚拟机吗?在Virtualbox下有什么方法解决吗?方法还是有的:

方法一:端口映射

虚拟机采用NAT网络配置,虚拟机的ip相对于宿主机是隐藏的。想要使得宿主机对虚拟机进行访问,需要配置端口映射

通过将宿主机的一个端口(localhost:port)与虚拟机的ssh端口进行连接,宿主机通过访问宿主机端口(localhost:port)实现对虚拟机ssh端口(ip:22)的访问

选择NAT网络模式,然后打开virtualbox的【全局设定】-【网络】,添加新的NAT网络,然后点击【端口映射】,然后新增端口映射的配置

image.png

例如,这里我添加10.0.2.622端口映射到本地的5666端口,10.0.2.1522端口映射到本地的5667端口

image.png

确认好配置后,记得勾选NAT网络的启动网络选项,然后就可以实现主机ssh连接到虚拟机了

image.png

方法二:新建主机网络

通过给虚拟机添加新的网卡,然后选择模式为主机网络(Host-only Adapter),因为它能实现物理主机对虚拟机的访问,留在后面介绍。

4.2 网络原理图

4.2.1 NAT

image.png

如上图,每台虚拟机都连接着独立的虚拟NAT设备,虚拟机之间彼此都是独立的,彼此之间不能进行通信

唯一的通信道路就是借着NAT设备和利用物理网卡来实现对外网的访问,也就是只要物理机能够上外网,那么虚拟机也就能上外网

4.2.2 NAT网络

image.png

如上图,NAT网络模式下虚拟机之间共享同一台虚拟NAT设备,也就是彼此之间都连接在同一网段下,彼此之间是可以实现通信的

与物理主机的通信方式就和NAT是一样的,通过物理网卡来实现对外网的通信

4.3 配置方式

4.3.1 NAT

NAT模式的配置还是比较简单的,只需要启动网卡并选择模式为NAT即可,启动后会发现已经给虚拟机分配好ip

image.png

查看ip,并尝试ping物理主机和外网,观察网络连通情况,如图

image.png

另起一台虚拟机,新增网卡并配置为NAT模式,尝试两台虚拟机进行互ping,结果是彼此之间都无法ping通

image.png

4.3.2 NAT网络

由上面的原理可知,NAT网络模式下是共享同一台虚拟NAT设备,所以需要新建一台共享的NAT设备,【全局设定】-【网络】-【添加新的NAT网络】

然后创建虚拟机的时候,新增网卡并选择NAT网络模式,界面名称选择刚才新建的NatNetWork即可

image.png

网络情况基本上跟上面保持一致,ping主机和外网都没问题

image.png

唯一的区别,另起一台虚拟机,同样模型选NAT网络,然后彼此之间这一次是可以ping通的

image.png

5.主机网络

5.1 主要原理

主机网络(Host-only Adapter)是指只限于主机内部访问的网络,虚拟机之间彼此互通,虚拟机与主机之间彼此互通。但是默认情况下虚拟机不能访问外网

主机网络模型会在主机中模拟出一块虚拟网卡供虚拟机使用,然后基于该网络下的所有虚拟机都会连接到这块网卡上

这块网卡可以在网络适配器中查看,具体的ip和网关可以在上面进行自定义设置

image.png

主机网络的网卡是支持随意增删的,打开virtualbox的【管理】——【主机网络管理器】创建新的网卡如下,相应会在本地的网络设配器中新增对应的网卡

需要注意的是对应的ip段需要关注,新建的虚拟机需要处在同一网段下才能进行网络通信

image.png

总结一下,主机网络的网络连通情况

  • 主机和虚拟主机彼此可以实现互通

  • 虚拟机之间彼此互通

  • 通过进一步配置,只要主机能上网,虚拟机也能上网

5.2 网络原理图

image.png

  • 主机网络下的虚拟机都会连接在全局虚拟网卡,然后它们的ip地址属于同一网段下,虚拟机借助物理网卡可以实现外网的访问

5.3 配置方式

新建虚拟机,新增网卡并选择【仅主机(Host-Only网络)】,界面名称选择对应的虚拟网卡,然后记住该网卡分配的ip段,比如我这里的虚拟网卡ip段是192.168.137.1/24

image.png

启动虚拟机后查看虚拟机分配到的ip地址是192.168.137.56,尝试虚拟机和物理机主彼此互ping,都能ping成功,如果出现了主机能ping虚拟机,但是虚拟机无法ping主机的问题,还是跟上面桥接网络一样关闭windows的防火墙来解决

image.png

需要注意的是,上面虚拟机ping外网也成功,但是你可能会遇到无法ping通外网的问题,如何解决呢?

主机网络如何配置可以让虚拟机访问外网?

打开【网络连接】,然后找到物理主机的上网网卡,右键属性,再选【共享】,勾选允许其他网络用户连接,然后【家庭网络连接】项目,选择共享的网卡为上面配置的主机网络的网卡,最后确定和重启虚拟机就可以实现外网的访问

image.png

6.内部网络

  • 内部网络模式是相对比较简单的一种,虚拟机与外部环境完全断开,一般是用来做内部环境搭建测试

  • 通过配置相同网段,允许虚拟机之间互相访问,如果彼此之间的网段并不一致,是无法互相访问的

  • 在后面,会再输出一篇关于利用bridge虚拟设备实现虚拟机通信的文章,到时候就会用到该模式的网卡搭建实验环境

image.png

这里你可能有一个问题,主机无法访问内部网络,那有没有方法实现主机对虚拟机进行ssh,因为如果在内部网络下有多台虚拟机,操作起来实在不够方便

  • 很简单,虚拟机是支持配置多网卡的,可以新增一张网卡,然后使用上面其他任意一种方式来实现物理主机对虚拟机的访问,那么不就可以实现ssh连接了吗?

【计算机网络】:一次性理清Virtualbox虚拟机网络模型
https://littlejoyo.github.io/2021/03/13/network/virtoolbox-network/
作者
Joyo
发布于
2021年3月13日
许可协议