VMware 虚拟机使用技巧

警告
本文最后更新于 2019-11-17,文中内容可能已过时。

双系统时常折腾容易坏电脑,因此一般是在虚拟机中使用 Linux 系统,常用的虚拟机为 VMware,本文对 VMware 的相关知识以及使用过程中的一些问题做介绍。

VMware 有三种网络模式,分别是桥接模式、NAT 模式和主机模式

在桥接模式下,VMware 虚拟出来的操作系统就像是局域网中的一独立的主机,它可以访问网内任何一台机器。不过你需要空闲的 IP 地址,并且需要手工为虚拟系统配置 IP 地址、子网掩码,而且还要和宿主机器处于同一网段,这样虚拟系统才能和宿主机器进行通信。

如果你想利用 VMware 在局域网内新建一个虚拟服务器,为局域网用户提供网络服务,就应该选择桥接模式。

桥接模式

使用 NAT 模式,就是让虚拟系统借助 NAT (网络地址转换) 功能,通过宿主机器所在的网络来访问公网。也就是说,使用 NAT 模式可以实现在虚拟系统里访问互联网。NAT 模式下的虚拟系统的 TCP/IP 配置信息是由 VMnet8 (NAT) 虚拟网络的 DHCP 服务器提供的,无法进行手工修改,因此虚拟系统也就无法和本局域网中的其他真实主机进行通讯。采用 NAT 模式最大的优势是虚拟系统接入互联网非常简单,你不需要进行任何其他的配置,只需要宿主机器能访问互联网即可。

如果你想利用 VMware 安装一个新的虚拟系统,在虚拟系统中不用进行任何手工配置就能直接访问互联网,建议你采用 NAT 模式。(也可以配置静态 IP,后面会介绍)

NAT模式

在某些特殊的网络调试环境中,要求将真实环境和虚拟环境隔离开,这时你就可采用 Host-only 模式。

在 Host-only 模式中,所有的虚拟系统是可以相互通信的,但虚拟系统和真实的网络是被隔离开的。可以利用 Windows XP 里面自带的 Internet 连接共享 (实际上是一个简单的路由 NAT) 来让虚拟机 通过主机真实的网卡进行外网的访问。虚拟系统的 TCP/IP 配置信息 (如 IP 地址、网关地址、DNS 服务器等),都是由 VMnet1 (Host-only) 虚拟网络的 DHCP 服务器来动态分配的。如果你想利用 VMware 创建一个与网内其他机器相隔离的虚拟系统,进行某些特殊的网络调试工作,可以选择 Host-only 模式。

主机模式

虚拟机中安装的是 Ubuntu18.04,因项目需要对其进行静态 IP 设置

首先查看虚拟机网络配置信息,选择菜单栏编辑—>虚拟网络编辑器,在三个网络中选择 VMnet0,桥接模式中选择网卡,我选择了有线网卡,可以根据需要选择无线网卡。

虚拟网络编辑器

其次编辑虚拟机网络模式,点击编辑虚拟机设置,选择网络适配器,在网络连接部分选择桥接模式

虚拟机网络设置

### 2. NAT 模式

首先依然是查看虚拟机网络配置信息,选择菜单栏编辑—>虚拟网络编辑器,在三个网络中选择 VMnet8,点击 NAT设置,查看并记录子网 ip 和网关。虚拟网络编辑器中的使用本地DHCP服务将IP地址分配给虚拟机选项不要取消勾选,因为看到很多教程说要取消勾选,实际上取消掉之后就没网了。

注:这一步是查看,没有需要更改的内容。

虚拟网络编辑器

然后编辑虚拟机网络模式。查看完配置信息后,在要设置静态 ip 的虚拟机界面下,点击编辑虚拟机设置,进入后选择网络适配器,在网络连接部分从 NAT模式切换到自定义特点虚拟网络,并选择 VMnet8(NAT模式)。点击确定后退出。

注:这一步需要在关闭虚拟机的状态下进行,挂起状态无法设置

虚拟机网络适配器设置

Ubuntu18.04 的静态 ip 设置是通用的,不因使用虚拟机不同。官方对静态 ip 设置的说明位于 Network Configuration,步骤如下:

  1. 使用 ifconfig 可以查看当前 ip 和网关地址和网卡名,若有必要可以自己测试一下网络是否畅通。

  2. /etc/netplan 目录下创建配置文件 02_config.yaml,因为该目录下已有 01 开头的文件。

    1
    
    $ sudo nano /etc/netplan/02_config.yaml
  3. 在配置文件中添加如下信息

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    
    network:
      version: 2
      renderer: networkd
      ethernets:
        ens33:
          addresses:
            - 192.168.191.4/24
          gateway4: 192.168.191.1
          nameservers:
              search: [mydomain, otherdomain]
              addresses: [1.1.1.1, 8.8.8.8]

    ens33 是网卡名,即之前使用 ifconfig 命令查到的 ip 最前面的字段。addresses 下的 ip 是自定义的静态 ip,根据子网 ip 自己选择设置即可,掩码是 24 位的。gateway4 就是之前在 NAT设置中看到的网关地址。nameservers 下的 addresses 是域名服务器地址,这里写的两个是常用的。

    静态ip设置

  4. 保存退出,使用 netplan 启用配置

    1
    
    $ sudo netplan apply

    再次查询即可看到新的 ip 地址,为我们设置的静态 ip,最后可以 ping 一下 8.8.8.8 和百度测一下网络是否可用。

联网试验期间突然有设备连不上了,经查发现使用 netplan 编辑启用的静态 ip 已变更,但这种情况只发生在虚拟机中。使用 sudo netplan apply 命令重新启用,但一段时间后会再次变为其它 ip。是虚拟机桥接模式的设置问题,还是 Ubuntu18.04 本身设置静态 Ip 的方式问题,暂时不清楚。

桥接模式存在 “复制物理网络连接状态” 的选项,用于笔记本电脑在有线和无线网络之间切换时的 ip 地址续订。未确认是否对 ip 地址变动有影响,鉴于连接无线网络不做变动,已取消勾选。

官方解释 - 为现有虚拟机配置桥接模式网络连接

您可以为现有虚拟机配置桥接模式网络连接。

要为新虚拟机配置桥接模式网络连接,请在运行新建虚拟机向导时选择自定义硬件

过程

  1. 选择虚拟机,然后选择虚拟机 > 设置

  2. 硬件选项卡中,选择网络适配器

  3. 选择桥接模式:直接连接物理网络

  4. 如果在笔记本电脑或其他移动设备上使用虚拟机,请选择复制物理网络连接状态

当您在有线或无线网络之间进行移动时,该设置会导致 IP 地址续订。

  1. 单击确定保存所做的更改。

第一种解决思路是虚拟机直接连接无线网络,但囿于笔记本的虚拟机无法检测到无线网卡,作罢,同时也不知道最后是否真的能起作用

目前打算直接从路由器后台针对 MAC 地址设置静态 ip,虚拟机的 MAC 地址可以使用 ifconfig 命令查看,虽然网上都称应查看 HWaddr 后的地址,但并没有这个标识,只在 ens33 的描述信息中存在如下描述,ether 后的地址为 MAC 地址

1
ether 00:0c:29:5d:1f:a1  txqueuelen 1000  (Ethernet)

也可以从虚拟机设置—>网络适配器—>高级查看 MAC 地址,两者应是一致的。

然后在路由器后台选择 IP与MAC绑定—>静态ARP绑定设置,绑定设备 MAC 和要使用的静态 IP 即可。这里使用的路由器是水星 MW306R。

主机和树莓派都接入了路由器开启的 WiFi 网络,树莓派之间相互 ping 没有问题,但当树莓派 ping 虚拟机的系统,或者虚拟机的系统 ping 任何一个网址,返回的数据包都会出现 DUP!错误。网上的解决办法是禁用然后重新启用 VMnet8,但并没有起作用。

经测试,有线网卡和无线网卡都接入了路由器的网络,虚拟机桥接到了无线网卡上,可能因此造成了环路(并不确定)。当我将虚拟机直接桥接到有线网卡上,再次发起 ping 命令,并断开了无线网卡的连接,DUP! 错误就消失了。没有明白原理,但确实解决了错误。

虚拟机重启后有时候窗口会变得只有中间一小块且没法放大,虽然可以通过重新安装 vm-tools 来修复,但经常重装也太麻烦了。实际上这种故障是由于 vm-tools 的服务没有正常启动造成的,可以通过执行下面的命令解决。

1
$ sudo systemctl restart opoen-vm-tools

github 上 open-vm-tools 项目的#253#303 两个 issue 都是讨论这个问题的。

[1] 陆小呆 - 虚拟机网络 NAT 模式配置静态 IP

支付宝
微信
0%