不知道是VMware有bug还是Windows有bug还是我这台电脑有问题,VMware的桥接模式无法联网,网上很多解决方案都试了没有用,之前我使用的电脑安装VMware虚拟机都可以正常使用桥接模式,在桥接模式下,虚拟机和宿主计算机处于同一个网段,虚拟机也能从宿主计算机存在的局域网中的路由器申请一个IP地址。无奈这台电脑用不了桥接模式,换了VMware版本和Ubuntu版本都没用,感觉是Windows的问题。无奈只能使用NAT网络模式,NAT模式其实是VMware在宿主计算机内部创建了一个局域网,参考一张图片(图中有一点错误,交换机是工作在数据链路层的,没有IP地址,将交换机改成路由器即可):

借用这张图片说一个问题,在上图这个系统中有一个问题,假设和宿主计算机存在于同一个物理局域网内的计算机X是无法访问到宿主计算机内部的虚拟机CentOS的,但是虚拟机CentOS是可以访问到计算机X。由于计算机X和虚拟机CentOS处于不同的网段,这时候如果计算机X访问虚拟机CentOS的IP时,网络数据会被计算机X所在局域网的的路由器(网关地址)转发到外层网络而不会发给宿主计算机,所以会导致访问不通。 但是虚拟机CentOS访问计算机X的IP的时候,同样由于网段不同,数据会被网关转发,而且宿主计算机的虚拟网卡VMnet8的IP地址被设置虚拟网络的网关地址,也就是宿主计算机就是网关,所以数据会被VMnet8转发,在Windows内部完成转发至宿主计算机的物理网卡,然后通过路由器发送给了计算机X,使得虚拟机CentOS可以访问到计算机X(这也是为什么NAT模式下,虚拟机可以访问物联网的原理)。

由于这个问题的存在,上诉的计算机X无法PING通虚拟机CentOS,而虚拟机CentOS可以访问到计算机X。有人可能会有疑问,既然虚拟机CentOS可以访问到计算机X,说明计算机X可以应答虚拟机CentOS,这不还是说明计算机X可以访问到虚拟机CentOS么?其实这里就是一个“打洞”的操作,虚拟机CentOS访问计算机X的时候,在两个网络之间打通了一个通道,这个时候计算机X其实是将数据发送给了宿主计算机的物理网卡,然后宿主计算机在内部将数据转发给了虚拟机的网络,为什么计算机X是将数据发送给了宿主计算机而不是转发到外层网络呢?因为虚拟机CentOS发送过来的数据是由宿主计算机转发的,转发过来的数据中的源IP地址已经是宿主计算机的IP而不是虚拟机CentOS的IP了,那么计算机X返回应答数据时的目的主机IP就是宿主计算机IP了,而宿主计算机和计算机X处于同一个网段,所以相当于是宿主计算机在和计算机X在通讯,不用向外层网络转发数据,然后宿主计算机会将计算机X发来的数据转发给虚拟机CentOS。这其实就是在宿主计算机就是一个路由器,物理网卡就是WAN口,而虚拟网络就是LAN(Local Area Network),这就相当于两级路由的结构,这时候虚拟网络是内网,宿主计算机所在的局域网相当于是外网(相对而言)。想一想,为什么我们能访问百度,而百度不能主动访问我们,这里百度相当于计算机X,我们的电脑相当于虚拟机CentOS所以......不能再说了,停不下来了。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐