最近又在linux区看到有人问起虚拟机vmware的问题:为什么禁用了vmnet1 vmnet8,虚拟机还能上网呢?
心想有必要写这么篇文章,介绍一下虚拟机vmware网络的构成
其实网上关于这方面的东西不少,但是多数是人云亦云,所谓没有试验就没有真相,正好我最近装了vmware,何不试试呢?
首先说一下,为什么会出现上面这样的问题呢?
我想问:网络中一台路由器连接了2台电脑A和B,实现共享上网,路由器直接连接外网,A和B为对等,禁用了A的网卡,能影响到B么?
可能这里问的很突兀,如果你想到了什么,然后明白了,那么不需要往下看了,如果还不懂,请继续。
概括的讲:真正的原因是vmware并不是通过host主机里的vmnet1或者 vmnet8来实现对外连接的,而是用vmware这个软件内置的功能,通过host的真实物理网卡 本地连接 来对外连接的。而vmnet1和vmnet8本是用于给host真实主机实现和虚拟机通信的。
如果看到这里懂了的话,也不需要往下看了,如果还不懂,请继续
首先谈一下网上的几种言论:
1,host-only模式下虚拟机无法连接外网,只能和host主机通信
错,笔者在通过实验实现了host-only方式下的internet访问
2,NAT映射下,虚拟机能访问host,而反之不能
错,目前笔者就用虚拟机NAT方式架设了samba服务器,且可以正常用host主机访问。
那么回到主题,虚拟机的网络到底是怎么设置的呢?
首先:在我们安装虚拟机软件的时候,vmware会虚拟10个(是的 你没有看错 是10个)虚拟网络,在这10个子网中分别有10个虚拟的路由器,分别是vnet0-vnet10,其中默认vnet0为桥接模式,对应路由器无效,只实现虚拟机通过host主机物理网卡对外连接,默认vnet1为host-only模式,对应的路由器里连接host主机VMnet1,关闭路由,作为交换机使用,默认vnet8为nat模式,对应路由器连接host主机VMnet8,并实现通过host主机的物理网卡对外的NAT转换。其余默认7个均为custom自定义。
其次,虚拟机软件会默认为host安装两块虚拟网卡,就是大家常看到的VMnet1和VMnet8
但是一定要注意一点VMnet1和VMnet8并不是vnet1和vnet8,VMnet1和VMnet8只是虚拟机提供给host主机访问内部虚拟机的接口。
然后,虚拟机会把VMnet1链接到net1中,把VMnet8连接到net8中
当然 这10个子网我们都可以自己配置
当我们在vmware中新建一台虚拟机的时候,网卡的选择就会有3种,如果我们选择了桥接,那么vmware会把这台虚拟机放置到net0子网中,这个子网即你物理网卡所在的子网,这样使得虚拟机完全如同一台和你host主机一摸一样的网内机器,只不过它用了你主机网卡的通路。如果选择host-only,那么vmware会把这台虚拟机防止到net1中,即连接到net1中的那台虚拟的路由器,同理,选择NAT就是net8,差别在于net8中的路由器实现了对外NAT
下图展示了在默认情况下的3中连接方式,分别有3台虚拟机A B C方式分别为桥接 host-only和NAT,即使有更多的虚拟机,无非是增加到对应路由的链接。
笔者的mware net情况
模拟的网络如下: