这几天为了确认笔记本电脑的ssd磁盘型号,拆开电脑查看了一下,并且拔出来又装回去了,就是这个插拔的动作,导致原本能好好运行的虚拟机,突然启动报错启动不起来了。看了启动日志,显示启动的时候磁盘数据校验出错。折腾了好久没解决,也不知道具体是什么原因。我的虚拟机是 virtualbox + centos7 的组合模式,没办法,只能重新去下载了一个centos7的镜像重新安装。
安装是很顺利,但是安装完成后,发现VirtalBox的网络配置有点糊里糊涂,整了半天新起的linux虚拟机也没连上网,网上的教程只是依样画葫芦,没有说是啥原理,于是重新认真研究了一下VirtualBox的各种网络配置,在此记录一下,以备日后可以查阅,也希望可以帮到遇到同样问题的童鞋。
之前用的是Vmvare虚拟机,的确好用多了,没那么多复杂的配置,但是Vmvare人家是要收费的。相对来说,VirtualBox的配置要比Vmvare复杂些,需要知道一些网络知识比如交换机和网络地址映射(NAT)的概念才能很好的理解这些配置的意义。
我们在windows上使用linux虚拟机,一般网络需要两个要求:1、虚拟机里面要能访问到外网(互联网) 2、能从宿主机连接进入到虚拟机 在virtalbox的设计看来,这两个需求是独立的,因此就设计了不同的网络连接方式。最常用的是 网络地址转换(NAT)和 仅主机(Host-Only)网络。其中网络地址转换(NAT)是为了使虚拟机能通过虚拟的 NAT设备接入外网,而仅主机(Host-Only)网络就是为了能从宿主机能访问到虚拟机。因此,我们首先可以使用第一种配置方式 NAT + Host-Only方式达到目的
首先,你可能需要了解一下VirtualBox各种网络网络配置具体的意义,可以参考这篇文章:
搞懂虚拟机VirtualBox网络配置 - 知乎 在了解这些不同的网络连接方式之后,我们可以继续往下看
为了达到我们的两个目的【1、虚拟机里面要能访问到外网(互联网) 2、能从宿主机连接进入到虚拟机】,我们可以有如下几种配置方式:
配置了网络地址转换(NAT)的连接方式,VirtualBox就会为我们的虚拟机虚拟出一个NAT设备,并且给我们的虚拟机配置一块专用的网卡,分配一个单独的ip,网络名称一般为。我们l虚拟机发送给互联网的数据,都通过这个虚拟的NAT设备转发。这个虚拟的NAT设备就类似于我们通常用的路由器,我们上网的时候都需要从路由器接一条网线出来,连接我们的电脑,我们电脑(虚拟机)里面的数据都通过路由器(NAT设备)发送和接收。我们都知道,我们的机器用NAT方式上网的话,我们机器能访问(主动发起连接)到外网的ip,但是外网的机器是访问(主动发起连接)不到我们的机器的,因为我们的机器ip其实对外网的机器是不可见的,外网的机器只知道路由器(NAT设备)的地址。如果想要外网机器能访问到我们的机器,需要在NAT设备上做端口映射,我们在后面会提到。
为了让我们能从宿主机直接访问到虚拟机进行操作,仅配置网络地址转换(NAT)的连接方式是不行的,前面的配置仅解决了【虚拟机里面要能访问到外网(互联网)】这个需求。我们还需要使用其他手段。VirtualBox提供了仅主机(Host-Only)网络连接方式,顾名思义,就是只能通过宿主机访问的方式。当配置了这个方式,VirtualBox同样给我们的虚拟机配置一个网卡和一个单独的ip,网卡的名称一般为enp0s8。下面是配置教程:
(1)配置 网络地址转换(NAT) 网卡
在左侧点击需要更改的虚拟机,右键 设置->网络,有4个网卡,可以在任意一个网卡进行配置,如下:
需要注意的是 控制芯片 这个选项,一定要选 Intel PRO/1000 MT 服务器 (xxx),我开始的时候以为这个不重要,然后直接用默认值 xxx MT 桌面 xxx,发现DHCP老是获取不到ip,连接不了外网,后来改了之后才可以。这个问题不知道是不是个例,有兴趣可以自己去查阅资料证实
一般来说,如果你不需要从除宿主机外的机器访问虚拟机,是不需要给这个网卡配置静态ip的,直接用动态ip就可以,如果要配置静态ip,你还需要费心去查找网关ip和DNS ip地址,对于新手来说这也要费一番功夫。
(2)配置 仅主机(Host-Only)网络 网卡
在左侧点击需要更改的虚拟机,右键 设置->网络,有4个网卡,可以在任意一个网卡进行配置,连接方式选 仅主机(Host-Only)网络 ,如下:
这个网卡的配置,控制芯片就可以是默认值,没问题。但是 混杂模式要选 全部允许 ,这个是照着别人的教程来的,我也没有深究是为啥。
配置完之后启动,可以用命令查看一下网络配置。如果是最小化安装,是没有ifconfig命令的,只有ip命令,用ip addr 查看:
lo网卡是回环网卡,不用管,enp0s8就是我们配置的仅主机(Host-Only)网络 网卡,enp0s17就是我们配置的 网络地址转换(NAT) 网卡。你可能会有疑问,我是怎么知道的?其实在配置仅主机(Host-Only)网络 网卡的时候,我们有个参数叫"界面名称",我们只有一个选项,就是“VirtualBox Host-Only Ethernet Adapter”,这个其实是一个这个网卡的一些参数配置,应该是VirtalBox安装完成后就自动生成的,我们也可以新增其他新的配置,在下面的路径查看及修改:左上角点击 管理->主机网络管理器(H) 如下:
因此,我们用这个“VirtualBox Host-Only Ethernet Adapter”配置生成的 Host-Only网卡,ip范围就是从192.168.56.101~192.168.56.254。因此enp0s8就是我们配置的仅主机(Host-Only)网络 网卡。那么另一个就是enp0s17就是我们配置的 网络地址转换(NAT) 网卡。那由此看来,网络地址转换(NAT) 网卡的DHCP ip地址范围默认就是10.0.2.x
检验:
外网访问就是命令:ping www.baidu.com
然后我们根据ip addr查看的结果,我们要从宿主机用xshell连接虚拟机,就是用这个ip:192.168.56.102去连接,端口22,能连上说明就配置成功了。
另外,因为目前配置的仅主机(Host-Only)网络 网卡ip是自动获取的,每次重启就有可能变更,是否可以配置成静态ip?答案是可以的,这个是linux的网络配置范畴,可以参考我的另一篇文章进行配置:虚拟机里的 centos 使用静态ip地址-CSDN博客
从前文提到的 网络地址转换(NAT) + 仅主机(Host-Only)网络 配置方式我们知道,网络地址转换(NAT)的配置实现了我们虚拟机访问外网的目的,既然VirtualBox实现了虚拟NAT设备的功能,那我们是否可以直接用该虚拟NAT设备做端口映射,从而达到我们通过宿主机访问虚拟机的目的?答案是肯定的。
前面配置 网络地址转换(NAT) 网卡的时候,点击高级箭头,下面有个"端口转发"的按钮,就可以配置端口映射,下面配置样例:
点击右边的加号按钮就可以增加端口映射,上面的配置是指,当访问宿主机任意网卡(ip)的1222端口的时候,会把请求转发到ip192.168.56.102的22端口上,这个ip是我们linux虚拟机的ip,并且不管是哪个网卡的ip都可以,同样可以是10.0.2.15这个ip。VirtalBox做了处理,没有网段的区分。
然后访问的时候,可以用宿主机的ip+1222端口去连接,就能连接上我们的虚拟机,比如我直接在宿主机上用xshell连接127.0.0.1 的1222端口,也可在其他能访问到宿主机的机器上访问虚拟机,比如宿主机有一个外网的ip 10.33.2.10,那么也可以在其他机器上用10.33.2.10+1222端口访问到我们的虚拟机
到这里你可以看出来,网络地址转换(NAT) + 端口映射的配置方式,只需要配置一块网卡,就能达到我们的两个目标。并且不仅限于宿主机访问,其他机器也一样可以访问到我们的虚拟机。
NAT网络 和 网络地址转换(NAT)这两种网卡的配置方式,其实是一回事。原理都一样,区别在于:
1、网络地址转换(NAT)具有默认的DHCP ip分配范围(固定),而 NAT网络 可以自己配置
2、NAT网络是全局配置可以多台虚拟机共用,而网络地址转换(NAT) 是仅针对一台虚拟机的配置
NAT网络配置如下:
(1)首先新建Natnetwork
坐上角 管理->全局设定->网络 ,点右边加号新建Nat网络,然后双击新建的Nat网络
然后做点击端口转发,配置端口转发,然后保存
虚拟机ip也可以填任意网卡的ip
(2)配置虚拟机的 NAT网络 网卡
在左侧点击需要更改的虚拟机,右键 设置->网络,有4个网卡,可以在任意一个网卡进行配置,连接方式选 NAT网络 ,如下:
选择 NAT网络,界面名称选你刚才新建的,混杂模式这个在此次似乎不用管。然后保存,启动虚拟机然后用ip addr查看,发现也会新增一个网卡,如下:
这个方式相当于虚拟机和宿主机是同等的地位,需要分配在同一个网段,即对外部看来,宿主机跟虚拟机是两台机器,虚拟机需要占用一个外网ip。这种方式目前对我不适用,但是配置起来应该是同样的道理,有兴趣的可以自己去实践,这里不做赘述
总体说来,VirtualBox的网络配置方式十分丰富,但是要理解了才能配置好
参考文章:
virtualBox虚拟机网络配置(nat网络和桥接网卡两种模式)详解_vboxnetnat.exe-CSDN博客
virtualbox中网络地址转换和NAT网络的区别-CSDN博客