VMWare提供了三种工作模式,它们是bridged(桥接模式)、NAT(网络地址转换模式)和host-only(主机模式)。
Bridged 模式:
在桥接模式下,VMware虚拟机里的系统就像是 局域网 中的一台 独立 的主机,它可以访问同一个网段内任何一台机器,即可以相互ping通。
在桥接模式下,你需要手工为 虚拟系统配置IP地址、子网掩码,而且还要和宿主机器处于同一网段,这样虚拟系统才能和宿主机器进行通信。同时,由于这个虚拟系统是局域网中的一个独立的主机系统,就可以手工配置它的IP,DNS服务器,网关等信息,以实现通过局域网的网关或通过交换机访问外网。
连接方式拓扑图(相同颜色的表示能互相通信):
图中的局域网,可能由路由器或者交换机建立。
本地物理网卡和虚拟网卡通过虚拟交换机进行桥接,物理网卡和虚拟网卡在拓扑图上处于同等地位。
Vmware默认给虚拟系统提供了一个虚拟网卡(linux下默认为eth0设备),虚拟系统通过该网卡与外部通信。图中虚拟交换机由vmware 提供,其默认设备名为 VMnet0。
NAT 模式:
NAT 即 Network Address Translation 缩写,即网络地址转换,由 NAT服务完成,在vmware里默认为VMnet8虚拟交换机,它将虚拟系统的IP地址转换成宿主机的IP地址,从而借用宿主机访问其他主机。使用NAT模式,也可以让虚拟系统通过宿主机器所在的网络来访问公网。
在这种模式下,虚拟系统是不能被LAN内其他PC访问的(宿主机可以,稍后讲),只能虚拟机以宿主机的名义访问LAN内的计算机。默认情况下NAT模式的虚拟系统的TCP/IP配置信息由VMnet8(NAT)虚拟网络的DHCP服务器提供,因此采用NAT模式最大的优势是虚拟系统接入互联网非常简单,你不需要进行任何其他的配置,只需要宿主机器能访问互联网即可。使用NAT方式时,宿主机(Windows)网络管理里会多出一块虚拟网卡,
名为VMware Network Adepter VMnet8 如下图:
(VMware Networl Adapter VMnet1是host only模式通信用网卡)
这块网卡是VMware虚拟提供的仅用来与虚拟系统通信的网卡,在windows下被直接连接到VMnet8虚拟交换机上 与 虚拟系统的网卡 进行通信。也就是说虚拟系统与宿主机的通信用到这块网卡,而 虚拟系统的上网功能,直接由NAT服务器提供,不经过这块网卡。
连接方式拓扑图(相同颜色的表示能互相通信):
图中的局域网,可能由路由器或者交换机建立。
实际上,VMware Network Adepter VMnet8虚拟网卡的作用就是为主机和虚拟机的通信提供一个接口,即使主机关闭该网卡,虚拟机仍然可以连接到Internet,但是主机和虚拟机之间就不能互访了,还有访问局域网内的其他计算机,也是通过NAT服务实现。
host-only 模式:
在Host-Only模式下,虚拟系统所在的虚拟网络是一个全封闭的网络,它唯一能够访问的就是宿主机。其实Host-Only网络和NAT网络很相似,不同的地方就是Host-Only网络没有NAT服务,所以虚拟网络不能连接到Internet,即虚拟系统无法上网。在host-only模式中,所有(Vmware创建的多个虚拟系统)的虚拟系统是可以相互通信的,当然在NAT模式下也可以,但虚拟系统和真实的网络是被隔离开的,主机和虚拟机之间的通信是通过VMware Network Adepter VMnet1虚拟网卡来实现的。
连接的网络拓扑图(相同颜色的表示能互相通信):
图中的局域网,可能由路由器或者交换机建立。
小结:
在VMware的3种网络模式中,NAT模式是最简单的,基本不需要手动配置IP地址等相关参数。至于桥接模式则需要额外的公网IP地址,ISP一般是不会这么大方,所以在局域网内很适用。
如果虚拟机想成为LAN中的成员,访问其他内网设备,比如其他计算机,嵌入式开发板等,那么虚拟机的模式应该选择Bridged 模式。
如果虚拟机想成为公网中的成员,即访问Internet,那么虚拟机的模式应该选择Bridged模式,但是需要网络服务商提供一个额外的IP(服务商不是SB)或者用路由器给虚拟机分配IP,
或者 直接选用NAT模式,必要时配置虚拟系统的IP,网关和DNS信息(一般默认既可)。
如果虚拟机想与LAN隔离,那么虚拟机的模式应该选择Host-only模式。
由于host-only 模式与NAT方式很相似,对一般用户来说也用不到,而且笔者也从未尝试使用host-only模式,就不在这里介绍了,虚拟系统以Ubuntu10.04-LTS 为例,Vmware以 workstation 7.1为例,宿主机以windows7为例,并且假设系统已经装好。其他系统可以参考。
Bridge 模式:
打开 VMware 软件,在 Ubuntu 标签栏里找到"Devices"标签,然后双击
"Network Adapter" 如下图
在弹出的对话框里选择 " bridged :connected directory to the physical network "
点击 " OK " , 自动退回到 第一个界面。
点击 " edit " ---- " Virtual Network Editor "
点击 最上面窗口的 " VMnet0 " 条目,在下面VMnet Information 里选 Bridged(默认),
点击 " Bridged to "下拉框,选择一个合适的网卡,这里我用 有线网卡 作为bridge 对象。
这里说明一下,如果刚才在 上一步 的设置选中了replicate phycial connection state,这里可以选择
默认的 Automatic , 至于效果怎么样,没试过,可以尝试一下。
点击 " OK " 保存设置。
启动 虚拟机,运行 Ubuntu 系统。
为了虚拟系统 和 windows 通信 、访问其他LAN 设备乃至访问 Internet,需要配置windows 和Ubuntu的网络。
在windows下,需要修改有线网卡的IP地址(如果您刚才选择的是无线网卡或者其他网卡,那请对应修改。
Windows网络设置:
开始 -- 控制面板 --- 网络和Internet ---- 网络连接 (或者其他方式都可以),在本地连接图标上 点击 右键--属性,在 Internet 协议版本 4(TCP/IP)上双击,选择 使用下面的IP地址,填写合适的IP,具体值跟您的网络环境有关,比如我就设置跟我的路由器同一个网段,IP 地址为 192.168.1.95 ,网关为192.168.1.1。
如果上不了网,就手动设置DNS服务器地址,配置如图
点击 " 确定 " 保存设置。
Ubuntu 网络设置 :
现在来配置Ubuntu的网络,默认情况下,Ubuntu的IP和DNS是自动获取的。
这里改为静态,因为VMnet0并不提供DHCP服务。
打开终端
输入: sudo gedit /etc/network/interfaces
在 文件里 找到
auto eth0
iface eth0 inet dhcp
//这两句,用#注释掉,没有就掠过
在下面有空的位置加入这几句:
auto eth0
iface eth0 inet static
address 192.168.1.96
netmask 255.255.255.0
gateway 192.168.1.1
意思就是使用静态IP地址,address为IP 地址,IP地址要与windows同一个网段,
这里假设为 192.168.1.96,windows的为192.168.1.95。
gateway 是网关地址,根据具体网络设置,这里设置为路由器的IP地址 192.168.1.1
修改完成后点击保存,关闭gedit 。
在终端
输入 : sudo /etc/init.d/networking restart
输入 : ifconfig eth0
命令含义:
//重新启动网络,使配置生效
//查看网卡信息,如果显示地址为刚才配置 的地址,则说明配置成功,否则重试。
如果主机能上网,虚拟系统不能,则需要修改DNS
终端输入:
sudo gedit /etc/resolv.conf
添加一条 nameserver 并输入与windows下 的DNS地址, 该地址可以在路由器中查到
示例:
nameserver 60.191.134.36
nameserver 60.191.134.37
保存后 重启 网络既可。
/******************************************************************************************/
测试网络:
在 ubuntu 终端输入 ping windows主机IP
例如出现这样: ping 192.168.1.95
64 bytes from 192.168.1.95: icmp_seq=1 ttl=64 time=4.75 ms
64 bytes from 192.168.1.95: icmp_seq=2 ttl=64 time=0.291 ms
64 bytes from 192.168.1.95: icmp_seq=3 ttl=64 time=0.251 ms
在windows下输入 ping UbuntuIP
例如出现这样 : ping 192.168.1.96
来自 192.168.1.96 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.1.96 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.1.96 的回复: 字节=32 时间<1ms TTL=64
既可表示 虚拟系统 与 宿主机 windows 通信正常。如果有路由,此时虚拟系统也应该能够ping通路由器上其他LAN设备,其他设备也能访问虚拟系统.
NAT 模式:( 默认就行,这里介绍如何在这种模式下使用静态IP )
打开 VMware 软件,在 Ubuntu 标签栏里找到"Devices"标签,然后
双击 "Network Adapter" 如下图:
选择 NAT : use to share host's IP
点击 '" OK " 保存 退出。
以上是默认的设置,如果以前没有配置过的话理论上虚拟系统就可以直接上网了。
此时Ubuntu 的网卡应该是 自动获取 IP 和 DNS 模式。
在 终端里输入:
ifconfig eth0
既可查看到当前 IP,给windows的有线物理网卡设置一个IP值,比如 192.168.1.95 ,假设查到的Ubuntu IP 是192.168.183.116(每次登陆都会变),则应该可以互相ping通,方法在bridge模式里介绍过了。
由于 虚拟系统 默认是自动获取IP地址的,这就给虚拟机与主机通信带来了不小的麻烦,每次重启,都需要先查询一下Ubuntu当前的IP值,这是一件非常糟糕的事情,下面的方法将IP设置为 静态 。
在Vmware 主界面上 菜单栏 点击 " edit " ---- " Virtual Network Editor "
在中间的框里 点击 " VMnet8 " 条目,在下面VMnet Information 里选 NAT 方式。
把 " Use local DHCP service to distribute IP address to VMs " 前面的钩钩去掉,即不用DHCP服务器,手动配置IP。
然后 点击 " NAT Setings " , 查看当前 gateway 信息,并记录一下,然后关闭窗口
其中 我的 Gateway IP 192.168.183.2 也就是 Ubuntu 虚拟系统上网的 网关地址。
启动Ubuntu,然后
打开终端
输入: sudo gedit /etc/network/interfaces
在 文件里 找到
auto eth0
iface eth0 inet dhcp
//这两句,用#注释掉,没有就掠过
在下面有空的位置加入这几句:
auto eth0
iface eth0 inet static
address 192.168.183.91
netmask 255.255.255.0
gateway 192.168.183.2
address 的地址要与 虚拟交换机VMnet8的IP在一个网段,比如前面 已经得到 VMnet8的地址是192.168.183.0,所以设置Ubuntu 的IP地址 为 192.168.183.x,这里示例为91。
gateway 是网关地址,设置为 刚才查到并记录的网关地址,这里为192.168.183.2
修改完成后点击保存,关闭gedit 。
在终端
输入: sudo gedit /etc/resolv.conf
添加一条 nameserver 并输入与windows下 的DNS相同的地址, 该地址可以用dos命令
ipconfig /all 查到。
示例:
nameserver 60.134.192.36
nameserver 60.134.192.37
在终端
输入 : sudo /etc/init.d/networking restart
输入 : ifconfig eth0 //查看网卡信息,如果显示地址为刚才配置 的地址,则说明配置成功。
/******************************************************************************************/
测试网络:
打开 ubuntu 下的浏览器,能上网即表示Internet正常,或者用ping 命令 ping公网 地址。
测试通信:
在 ubuntu 终端输入 ping windows主机IP
例如出现这样: ping 192.168.1.95
64 bytes from 192.168.1.95: icmp_seq=1 ttl=64 time=4.75 ms
64 bytes from 192.168.1.95: icmp_seq=2 ttl=64 time=0.291 ms
64 bytes from 192.168.1.95: icmp_seq=3 ttl=64 time=0.251 ms
在windows下输入 ping UbuntuIP
例如出现这样 : ping 192.168.183.91
来自 192.168.183.91 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.183.91 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.183.91 的回复: 字节=32 时间<1ms TTL=64
既可认为通信成功。