0 遇到问题阐述
在执行Linux下面的安装命令
yum install ipset ipvsadmin -y
出现报错 One of the configured repositories failed (未知)
推断:虚拟机无法访问互联网,ping了一下baidu.com,ping不同,推测DNS配置错了,又ping了一下百度服务器的IP,还是ping不通,所以推断出虚拟机无法链接外网是虚拟机网络NAT配置问题。
1 想要达成的效果
主机和虚拟机之间,可以互相ping通,若主机可以上网,则虚拟机亦可以正常连接网络。
注: 与当前主机处于同一个局域网的其他主机是不能访问当前主机上的虚拟机的。
2 准备工作
2.1 开启ping回应
win10默认是不开启ping回应的,要设置为开启状态。
步骤:控制面板-Windows Defender防火墙-左侧的 高级设置-入站规则,在列表中搜索:
在这两项上,右键-启用规则,之后一路确定。
2.2 主机IP
在主机上,win+r,打开运行,输入cmd,打开命令行,输入ipconfig,显示如下:
我主机是笔记本,连接的是无线网,因此选择无线局域网适配器,如果连接的是有线网,就选择以太网适配器。
记住主机IP地址,以我为例,是 192.168.31.134。
3 安装VMware,安装操作系统
网上有现成的安装教程:
4 原理
在实现之前,得先说一下NAT的网络地址转换类似于家庭路由器的方式工作。使用NAT模式,就是让虚拟系统借助NAT(网路地址转换)功能,通过宿主机器所在的网络来访问公网。
其实就是虚拟机的网卡连接到宿主的VMnet8虚拟机交换机上,VMnet8充当了路由器的作用,负责将虚拟机转发到VMnet8的包进行地址转换之后发送到实际的网络中,再降实际网络上返回的包进行地址转换后通过VMnet8发送给虚拟机。
VMVare的VMnet8使用的网关都是X.X.X.2,例如192.168.80.2
先记住这个拓扑图,后面的设置都是按照这个图来的。
其实相比Host-only模式只不过增加一层路由功能。(讲解在下面)
虚拟机的IP都是由虚拟交换机决定的,由虚拟NAT负责连接外网,而虚拟网卡VMware Network Adapter Vmnet8只是负责主机与虚拟机之间的通信。
科普:虚拟机网络配置另两种配置:桥接和仅主机
一 Bridged 桥接模式
1.1 特点
虚拟机和主机是处于同等地位的机器,所以网络功能也无异于主机。并且和主机处于同一网段。
1.2 原理
桥接模式,使用的是VMnet0虚拟网卡。 vmnet0实际上就是一个虚拟的网桥(2层交换机),这个网桥有若干个接口,一个端口用于连接你的Host主机,其余端口可以用于连接虚拟机,他们的位置是对等的,谁也不是谁的网关。所以桥接模式下,虚拟机和Host主机是同等地位的主机。
二 Host-only仅主机模式
2.1 特点
只能和主机相互通信,不能上网,也不能访问其他主机,用于建立与外部隔离的网络环境
2.2 原理
Host-only模式使用的是VMnet1网卡。 这种方式下,虚拟机连接到VMnet1上,但系统并不为其提供任何路由服务,因此虚拟机只能和宿主机进行通信,而不能连接到真正的网络上。
5 NAT网络配置
打开VMware Workstation Pro,选择虚拟机的网络连接类型,新建虚拟机,一般默认就是NAT模式,之后确定,返回主页面:
选择编辑-虚拟网络编辑器,单击更改设置:
按照箭头指向,勾选对应内容:
注意下面的子网IP,前两部分必须和主机IP的前两部分一样,即192.168,第三部分得不一样,不能是31,这里填80,第四部分补0。子网掩码都是255.255.255.0,填写完毕后,点击 NAT设置:
填入网关IP,前三部分,即网段必须是192.168.80,和前面保持一致,第四部分随意,这里填2,网关IP整体就是192.168.80.2,图1中的虚拟交换机IP就是这里的网关IP,点击确定后返回,再点击 DHCP设置:
注意起始和结束的IP网段也必须是192.168.80,这个范围不要包括网关IP:192.168.80.2,图1中的虚拟DHCP服务器设置完成,之后一路确定,NAT网络设置结束。(如果NAT模式下,有很多台虚拟机,就把这个范围扩大)
6 测试
开启虚拟机,Ubuntu默认的IP设置是自动获取,不需要更改,当然设置静态IP也是可以的,参照图1即可。此时Ubuntu是可以正常连接外网的。
接下来测试图1中的虚拟网卡作用,在主机上,win+q,打开搜索框,输入 网络连接,回车,打开网络连接面板:
这里的VMware Network Adapter Vmnet8就是图1中的虚拟网卡,另外三个分别是主机的无线网卡、主机的有线网卡、VMware仅主机模式的虚拟网卡。右击Vmnet8,选择属性:
选择IPV4,点击属性:
可以选择自动获取,也可以手动设置,注意,手动的话,IP不能和虚拟网关IP一样,即不能是192.168.80.2,之后一路确定,设置完成。
在Ubuntu终端和win10命令行中,互相ping各自的IP地址,然后在虚拟网卡Vmnet8,右键-禁用,在互相ping各自的IP地址,体会前后的区别。
7 总结
自己动手设置几次,配合图1的拓扑结构图,真正的理解了。
VMware Network Adapter Vmnet8的作用是联通主机与虚拟机,有心的话,当在主机上ssh虚拟机时,会发现虚拟机上显示的IP来源(W命令),就是VMware Network Adapter Vmnet8的地址,而不是主机上的(有线网卡、无线网卡)地址。
8 问题
遇到的其余问题:
1 有的教程提到,需要把主机的正在使用的网卡,与VMnet8共享,经过测试,在NAT模式下,这是多余的。
2 有时候,本来可以互相ping通的,突然间主机ping不通虚拟机了,而虚拟机可以正常联网,可以ping主机,这时候,问题就出在 VMware Network Adapter Vmnet8了,默认是自动获取IP地址,右键禁用后,再启用,一般就可以解决问题。如果还不行的话,就设置 VMware Network Adapter Vmnet8的静态IP,与虚拟机同网段,问题就解决了。
- 注1:
只要虚拟机可以正常上外网,VMware和虚拟机的网络设置就没有问题。
- 注2:
在实际情况中,第二个问题极其常见,经常是虚拟机一段时间不用了,再打开,主机就ping不通虚拟机,也ssh连接不上,这种情况99%都是VMware Network Adapter Vmnet8的IP和虚拟机IP不在同一个网段导致的;
VMware Network Adapter Vmnet8的IP如果没有设置静态IP的话,其IP地址随着主机开关机是会变化的。当虚拟机启动后,禁用,然后在启用,就会自动设置同网段IP了。
- 注3:
如果设置VMware Network Adapter Vmnet8的静态IP,注意一下网段,要是和主机网卡的IP段一样,比如无线,会导致网络连接不上。(本人教训啊,手机连接wifi没有问题,笔记本就是连不上,折腾了好长时间,才想起来设置的静态IP,冲突)
9 新bug
NAT模式下,虚拟机能ping通主机,主机不能ping通虚拟机。
开始我很疑惑,后来重启网卡多次未果。查看了一下网卡配置问题出错
给大家提供一个标准的配置文件参考:(本次我的prefix配置成了32,所以出现了此问题)
文献参考: