vmware虚拟机三种网络模式详解

6,649 阅读7分钟

写这篇的原因是这个问题出现了好几次,每次都要耽误很久去重新查资料解决,所以决定记下来。

问题描述:

由于公司服务器重启导致出现过以下几种情况:

1.在Xshell里连接虚拟机映射时连接失败

2.能够连接上虚拟机的映射地址,但git pull时报错无法解析hostname

因为之前出现过1、2这两种情况,在找了一天方法未果之后咨询了大神朋友才解决,也因为不是自己解决的,所以对这个过程包括虚拟机的使用都并不清楚,这次重新出现问题2,又重新查了一遍资料,才算是对虚拟机有了一点点了解。因为有之前的问题,所以这次问题出现就想到是虚拟机IP问题。

问题1第一次出现时是因为当时虚拟机IP没有固定,换了一个IP所以连接失败,把本地映射地址改成新IP就好了。

问题2虽然也是IP问题,但是感觉跟问题1不太一样,主要还是虚拟机网络配置问题。

首先去虚拟机查看了IP,然后发现虚拟机没有IP,原来配的IP不见了,所以按照NAT模式重新配了一遍IP,但是也没有用,后来查资料说网关也需要配,都没有什么用,所以还是按照资料的方法重新从网络模式开始配置。

vmware提供了三种网络工作模式:Bridged(桥接模式)、NAT(网络地址转换模式)、Host-Only(仅主机模式),模式配置可以在虚拟机左上角“编辑——虚拟网络编辑器”中设置,如下图:


可以看到三种不同模式对应的状态,其中VMnet1,VMnet8的IP都是随机分配的,如果想要重新设置,或者在主机上看不到对应的VMnet1,VMnet8虚拟网卡,只需要点击左下角的恢复默认设置,即可看到虚拟机中这两个方式IP变了的同时,主机上的虚拟网卡也更新了。主机查看虚拟网卡设置可以到网络中心设置:


从上面可以看出,主机是没有桥接模式对应的VMnet0虚拟网卡的,下面介绍三种方式的区别:

一、Bridged(桥接模式)

桥接模式就是将主机网卡与虚拟机虚拟的网卡利用虚拟网桥进行通信。在桥接的作用下,类似于把物理主机虚拟为一个交换机,所有桥接设置的虚拟机连接到这个交换机的一个接口上,物理主机也同样插在这个交换机当中,所以所有桥接下的网卡与网卡都是交换模式的,相互可以访问而不干扰。在桥接模式下,虚拟机ip地址需要与主机在同一个网段(即地址前三个数相同),如果需要联网,则网关与DNS需要与主机网卡一致。


先确认一下主机的IP地址,网关以及DNS信息,Window+R输入cmd进入命令窗口,输入命令ipconfig/all即可查看:


也可以到网络中心点击当前连接查看,如果主机的IP是自动获取的,在网络中心看不到,只能用命令行:


在开启虚拟机前先选择连接模式:编辑虚拟机设置——网络适配器——桥接模式


打开虚拟机后开启命令行,输入命令vi /etc/sysconfig/network-scripts/ifcfg-eth0编辑IP配置文件:



此处应将IP地址设置和主机地址在同一网段,网关地址和DNS地址和主机一样,因为我用的是NAT模式,且自动获取IP,所以我的文件没有改,改完保存重启虚拟机或者虚拟网卡(命令:service network restart如果没用可能是权限不够改用sudo service network restart)。然后可以Ping一下主机地址试试能不能通,想要看主机和虚拟机之间是否通信正常,可以在主机新建虚拟机地址的网络映射,在Xshell里看能不能连接成功。

桥接模式配置简单,如果网络环境是ip资源很缺少或对ip管理比较严格的话,不建议使用桥接模式,可以使用NAT模式。

二、NAT(地址转换模式)

NAT模式借助虚拟NAT设备和虚拟DHCP服务器,使得虚拟机可以联网。结构图如下:


虚拟机不占用主机所在局域网的ip,通过使用主机的NAT功能访问局域网和互联网,意味着虚拟机可以访问局域网中的其他电脑,但是其他电脑不知道虚拟机的存在。使用这种模式时,虚拟机不需要设置静态IP,只需要使用DHCP功能自动获取ip即可。这个地方让我耽误了很久,因为一开始想的固定IP比较方便,所以没有设置自动获取,结果不停换IP都不行,后来设置了自动获取所有问题都解决了。

配置过程:首先在虚拟网络编辑器里设置NAT模式里的NAT设置网关地址和DHCP设置虚拟机IP范围,一般默认的设置都不用改,主要为了确保都在同一个网段:



然后设置主机VMnet8虚拟网卡的IPv4设置:


此处要把IP地址设置为虚拟机中NAT模式下设置的网关地址,我设置了自动获取(最好也不要设置自动获取,感觉会出问题),好像也是可以的,同时我的虚拟机地址也是自动获取的(事实证明最好这个不要自动获取,不然三天两头自己换IP又会出问题。。),如果想要固定IP地址,就到虚拟机里设置/etc/sysconfig/network-scripts/ifcfg-eth0文件中的各地址,此时设置的IP要在DHCP设置范围内,网关地址也要跟主机的网关地址一样,我第一次设置了跟虚拟机网关地址一样,第二天就又出问题了,今天改成了主机的网关地址,又好了,所以等如果有问题我再来改。

在这个时候会发现在VMnet8的网络设置里是显示IPv4没有网络访问权限的,也就是说虚拟机不是靠虚拟网卡来连网的,只是用来让主机和虚拟机进行通信的。

三、Host-Only(仅主机模式)

Host-Only模式其实就是NAT模式去除了虚拟NAT设备,然后使用VMware Network Adapter VMnet1虚拟网卡连接VMnet1虚拟交换机来与虚拟机通信的,Host-Only模式将虚拟机与外网隔开,使得虚拟机成为一个独立的系统,只与主机相互通讯。也就是说虚拟机只能和主机通信,不能连网。结构图如下:


步骤基本和NAT一样,设置固定IP时虚拟机IP要和VMnet1在同一网段,网关一致,DNS地址要和主机相同。


在这个过程中我出现的问题:
主机的Xshell连接不到虚拟机:最后发现时VMnet8里我把IP写成了虚拟机的IP,应该写虚拟机的网关地址。


一些网络常识:

1.网络中对电脑的访问是通过ip定位的。
  就好像我们的身份证号,可以唯一辨识一个人。ip是用来区分网络中的电脑的,因此同一网络(准确讲是“网段”)中,ip地址不能相同。如果同一网络中有相同的ip存在,经常发生无法联网或者经常掉线的情况。 

2.网络是分段管理的。
  拿局域网为例,我们通常的网段是192.168.1.xxx。我们的ip地址就是把xxx成1到254的数字。如果多台计算机的ip的前面数字都是192.168.1,那么就叫做属于同一个网段,他们之间是可以互相通信的。如果一台机器的ip是192.168.1.100,另一台机器的ip是192.168.3.100,正常情况下,不能互相通信的(有办法可以搞定,我们不讨论)。所以,在设置虚拟机时要考虑是否同一个网段。

3.怎么知道电脑的ip地址?
  在windows系统下,在命令行中执行ipconfig;在linux系统下,在命令行中执行ifconfig即可,下文会详述。

4.怎么判断是否与对方能够通信?
最简单的方式是执行ping命令。无论是windows还是linux,都可以在命令行中执行“ping 对方ip”