Windows小技巧8--VMware workstation虚拟机网络通信
VMware Workstation(中文名“威睿工作站”)是一款功能强大的桌面虚拟计算机软件,提供用户可在单一的桌面上同时运行不同的操作系统,和进行开发、测试 、部署新的应用程序的最佳解决方案。其使用过程中的网络连接是一个比较重要的问题,笔者本文针对VM的网络通信的几种不同情况加以说明。
1、三种通信模式简介
打开VMware的虚拟网络编辑器,可以发现有三种网络连接类型,别为桥接模式,仅主机模式,NAT模式,其对应的名称依次为VMnet0,VMnet1,VMnet8,如下图所示。
从图中可以看到桥接对外通过本机网卡Realtec***可以实现外网访问,主机模式外部连接为 - 不能实现外网访问 ,NAT模式可以通过NAT来实现外网访问。
笔者台式机A通过静态ip和本地局域网连接,虚拟机B通过仅主机模式进行网络连接,虚拟机C通过NAT方式进行网络连接,各系统间网络连接和通信情况如下表所示:
序号 | 主机名称 | 连接方式 | 互ping状态 | 外网访问 |
1 | A | 台式机静态IP | 可ping通B和C | 正常 |
2 | B | 虚拟机主机模式 | 可ping通A和C | 无法访问 |
3 | C | 虚拟机NAT模式 | 不能ping用户A和B | 正常 |
当A为静态时候,若存在D为桥接模式,那么网络启动会失败(通常表现为2、常见问题中的1)),导致无法虚拟机分配IPv4网络,从而D无法访问外网,也无法和上述ABC通信,由于没有IPv4导致ABC也无法和D通信。
以下1)、2)、3)内容来源于博文 Linux虚拟机的三种网络连接方式,该文总结的比较到位,笔者就不画蛇添足了。
1)桥接:
桥接网络是指本地物理网卡和虚拟网卡通过VMnet0虚拟交换机进行桥接,物理网卡和虚拟网卡在拓扑图上处于同等地位,那么物理网卡和虚拟网卡就相当于处于同一个网段,虚拟交换机就相当于一台现实网络中的交换机,所以两个网卡的IP地址也要设置为同一网段。所以当我们要在局域网使用虚拟机,对局域网其他pc提供服务时,例如提供ftp,提供ssh,提供http服务,那么就要选择桥接模式。
2)NAT模式
NAT模式中,就是让虚拟机借助NAT(网络地址转换)功能,通过宿主机器所在的网络来访问公网。NAT模式中,虚拟机的网卡和物理网卡的网络,不在同一个网络,虚拟机的网卡,是在vmware提供的一个虚拟网络。
NAT和桥接的比较:
(1) NAT模式和桥接模式虚拟机都可以上外网。
(2) 由于NAT的网络在vmware提供的一个虚拟网络里,所以局域网其他主机是无法访问虚拟机的,而宿主机可以访问虚拟机,虚拟机可以访问局域网的所有主机,因为真实的局域网相对于NAT的虚拟网络,就是NAT的虚拟网络的外网,不懂的人可以查查NAT的相关知识。
(3) 桥接模式下,多个虚拟机之间可以互相访问;NAT模式下,多个虚拟机之间也可以相互访问。
如果你建一个虚拟机,只是给自己用,不需要给局域网其他人用,那么可以选择NAT,毕竟NAT模式下的虚拟系统的TCP/IP配置信息是由VMnet8(NAT)虚拟网络的DHCP服务器提供的,只要虚拟机的网路配置是DHCP,那么你不需要进行任何其他的配置,只需要宿主机器能访问互联网即可,就可以让虚拟机联网了。
3)仅主机模式
在Host-Only模式下,虚拟网络是一个全封闭的网络,它唯一能够访问的就是主机。其实Host-Only网络和NAT网络很相似,不同的地方就是Host-Only网络没有NAT服务,所以虚拟网络不能连接到Internet。主机和虚拟机之间的通信是通过VMware Network Adepter VMnet1虚拟网卡来实现的。Host-Only的宗旨就是建立一个与外界隔绝的内部网络,来提高内网的安全性。这个功能或许对普通用户来说没有多大意义,但大型服务商会常常利用这个功能
2、常见问题
该章节主要记录笔者使用时候遇见的一些问题,以及解决方案,后续遇到新问题都会在此处续更。
1)登录Ubuntu系统时候出现A start job is running for Raise network interfaces(xxs /5min xxs)
如下图所示出现该问题后,系统需要等待5min 3s后才能进入系统中,进入后也无法上网且没有分配ipv4地址,该问题产生的原因为网络服务服务没有正常启动,直到网络启动最大时间到达后才启动系统,系统启动后也无法正常分配ipv4地址,导致无法联网,也无法和局域网内机器互ping。
其解决方法为:将本机电脑连接到某个局域网或者路由器,然后本机使用动态分配ip的方法即可正常给虚拟机分配ip,重启虚拟机就不会出现该问题;若本机必须使用静态ip连接到外部网络中,则可以使用nat的方法进行网络连接,也可解决该问题其正常访问网络。
注:笔者在网上看到有相当一部分博文介绍修改参数使Raise network interfaces最长时间缩短,使用参数修改的方法笔者试了一下没有成功,且修改参数也没有解决后续无ipv4的问题,治标不治本,笔者几次尝试后发现该方法可以解决上述问题。若有更好的方法还请留言,以便于相互学习。
2)桥接模式无法上网排查方法
首先查看service中的dhcp、nat等服务是否开启,若未开启则手动开启;其次查看本机是否为静态ip,若本机为静态ip则使用nat方式连接外网。
3)本机没有任何外网连接的情况下建立主机和虚拟机之间的网络通信方法
该情况下无法正常桥接,需要使用host only方法,可为虚拟机建立静态ip,具体方法如下:
当电脑无任何网络的连接的时候,使用nat启动时候也会出现A start job is running for Raise network interfaces(xmin xs / 5min xs)的异常,登录后发现ens33无ipv4网络,此时可以通过配置host only实现网络访问,并且可以使用shell登录主机。
其设置方法为:修改/etc/network/interfaces 配置文件
auto ens33
#iface ens33 inet dhcp #将此处屏蔽,笔者服务器默认网络没春节后为ens33,其它版本系统可能不完全相同,但是只需要更改其对应的内容即可
iface ens33 inet static #新添加内容
address 169.254.78.152 #新添加内容
修改后重启虚拟机,ens33就可以正常分配ip了,windows下可以通过ssh等工具访问虚拟机了,下图左边为windows下cmd的ipconfig网络信息,右图为host only模式下ifconfig的网络信息。
需要注意的是此处address必须和windows下ipconfig中VMnet8(host only)的网段相同,否则无法访问。
4)VMware DHCP Service和VMware NAT Service的服务项找不到
出现该问题后,不论net还是桥接都无法动态分配ip,即都无法正常通信,此时只需要恢复虚拟机默认的VMnet配置即可,方法如下:vmware菜单栏——编辑——虚拟网络设置——(左下角)还原默认配置,还原后正常情况下vmnet0-1-8都会重新配置,如果没哟重新配置就重启电脑,重启不成功的话就只有重装下VM了;笔者在win10+vm12pro上亲测可用。
5)在实体机器T1将A虚拟机拷贝到其它机器T2后为虚拟机BCD,发现在局域网内T1机器无法访问BCD
笔者将机器A机器拷贝到另外一台机器上,生成BCD三台虚拟机,设置好其静态ip后,发现T1上无法通过shell访问BCD,而经过排查后发先BCD和A的mac地址一模一样,导致网络上无法识别,从而无法通过shell访问,因此分别在/etc/network/interfaces中设BCD的mac为不同的值之后,重启就可以正常访问BCD了,且ABCD之间可以互通。
auto ens33
iface ens33 inet static
address 192.168.1.21 #21|22|23
netmask 255.255.255.0
gateway 192.168.1.1
hwaddress 00:0c:29:40:81:22 #21|22|23
此时ABCD机器可以相互ping同,也可以ping同局域网内任何机器,但ping baidu.com任然报错ping: unknown host baidu.com,随后查看虚拟机DNS发现为空,因此添加了个8.8.8.8就可以上网了,但是8.8.8.8访问会有较大延时,因此查看本机的DNS后将其设置为T2的DNS(T2的DNS就为路由器的ip,192.168.1.1),因此在/etc/resolv.conf中添加nameserver 192.168.1.1和nameserver 8.8.8.8(第二个可以不要) 两个DNS,添加后可以正常访问外部网络。
注意:由于/etc/resolv.conf在启动时候会自动生成,因此需要持久该配置, 方法如下
vim /etc/resolvconf/resolv.conf.d/base
nameserver 192.168.2.2
nameserver 8.8.8.8
保存后重启机器就会生效
或者 在 /etc/network/interfaces 中加入如下内容,然后重启网络即可
dns-nameservers 192.168.2.2
dns-nameservers 8.8.8.8
6) ubuntu 18.04版本后使用netplan设置静态ip
1804版本后使用/etc/netplan/50-cloud-init.yaml文件配置网络,一下笔者配置的一个案例,内容如下:
$ cat /etc/netplan/50-cloud-init.yaml
# This file is generated from information provided by
# the datasource. Changes to it will not persist across an instance.
# To disable cloud-init's network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
network:
ethernets:
ens33:
dhcp4: false
addresses: [192.168.190.22/24]
gateway4: 192.168.190.2
macaddress: 00:0c:29:02:00:22
nameservers:
addresses: [192.168.190.2,8.8.8.8]
version: 2
更多配置可参考 cloud-atlas.readthedocs.io-netplan网络配置
netplan.readthedocs.io 官方文档
3、说明
vm版本为:VMware® Workstation 15 Pro
虚拟机为:Ubuntu 16.04 LTS
参考文献:
Linux虚拟机的三种网络连接方式:Linux虚拟机的三种网络连接方式_清风lsq的博客-CSDN博客
实例讲解虚拟机3种网络模式(桥接、nat、Host-only):实例讲解虚拟机3种网络模式(桥接、nat、Host-only) - ggjucheng - 博客园