笔者安装并运行成功过的环境:

  • VMware:
    • VMware Workstation Pro 17
    • VMware Workstation Pro 16
  • 宿主机:
    • Windows 10 教育版
  • 虚拟机:
    • Windows:
      • Windows 10
    • Linux:
      • CentOS:
        • CentOS 8 x86_64
        • CentOS 7 x86_64
      • CentOS Stream:
        • CentOS Stream 9 x86_64
        • CentOS Stream 8 x86_64
      • Red Hat Enterprise Linux:
        • Red Hat Enterprise Linux 9.2 x86_64

名词解释

  • 宿主机:指的是安装运行 VMware Workstation 的计算机。在本文,为 Windows 10。

  • 虚拟机:指的是在 VMware Workstation 中安装运行的虚拟机。虚拟机的操作系统不限。

事先准备

  需要安装好 VMware Workstation。关于这方面的内容,可见笔者的另一篇博客:

  VMware Workstation Pro 16 安装教程:
https://blog.csdn.net/wangpaiblog/article/details/112152218

安装 VMware Tools

  VMware Workstation Pro 中的很多功能都需要借助于 VMware Tools 才能实现。VMware Tools 的安装方法如下。

  1. 触发在 VMware Workstation 中的虚拟机中安装 VMware Tools。

    在这里插入图片描述

    在这里插入图片描述

  2. 在虚拟机中安装 VMware Tools。

    在这里插入图片描述

    在这里插入图片描述

  3. 重启虚拟机。

将鼠标焦点从虚拟机中退出

  将鼠标焦点从虚拟机中退出至宿主机的方法是,在虚拟机中使用快捷键 Ctrl + Alt。如果安装了 VMware Tools,也可以无需借助快捷键。

共享剪切板

  先按照上面的方法安装 VMware Tools,然后重启虚拟机。重启之后,虚拟机应该可以与宿主机共享剪切板了。

共享文件(夹)

虚拟机为 Windows

  Windows 没有提供 SSH 协议的端口 22,因此无法使用 XShell 来直接进行远程连接。不过,Windows 提供了内置的途径。

  1. 先按照上面的方法安装 VMware Tools,然后重启虚拟机。

  2. 在宿主机中开启共享权限。

    在这里插入图片描述

    在这里插入图片描述

  3. 按照自己主机的实际情况,打开共享。

    在这里插入图片描述

  4. 在虚拟机中也开启共享权限。此步骤和在宿主机中是一样,不再赘述。

  5. 在 VMware Workstation 中指定宿主机需要共享的文件夹。

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

  6. 添加成功后,应该能在 VMware Workstation 中看到效果。

    在这里插入图片描述

  7. 虚拟机中添加刚刚在 VMware Workstation 中指定的共享文件夹。此文件夹将作为虚拟机中的一个驱动器的提供访问。

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

虚拟机为 Linux

  这需要先构建宿主机-虚拟机局域网,在宿主机可以连接虚拟机之后,使用一种文件传输工具(如 Xftp 来完成)。关于这方面的详细内容,请参考本文 构建宿主机-虚拟机局域网 一节。

虚拟机快照的创建与加载

创建虚拟机快照

  虚拟机快照保存了当前虚拟机的状态,可用于以后将虚拟机恢复到当前的状态。创建的方法如下图所示。

在这里插入图片描述

在这里插入图片描述

加载虚拟机快照

  加载虚拟机快照的方法如下图所示。不过要注意的是,加载虚拟机快照会使用虚拟机当前的状态丢失,为了以防万一,可以在加载虚拟机快照之前,先保存当前虚拟机的快照。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

克隆虚拟机

  克隆虚拟机是创建一个一模一样的虚拟机。克隆的方法如下图所示。

  1. 克隆虚拟机。

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

  2. 克隆完成之后,可在 VMware Workstation 虚拟机列表中观察到克隆的虚拟机。

    在这里插入图片描述

  3. 克隆完成之后,可在本地文件目录中观察到克隆的虚拟机。

    在这里插入图片描述

构建宿主机-虚拟机局域网

  构建宿主机-虚拟机局域网是为了令宿主机与虚拟机、虚拟机与虚拟机之间可以通信。

通信原理

  构建宿主机-虚拟机局域网的通信原理是,首先,在 VMware Workstation 上开启 NAT 模式,这样 VMware Workstation 会在宿主机上构建一个虚拟的局域网,如 以太网适配器 VMware Network Adapter VMnet8。然后 VMware Workstation 会在这个虚拟的局域网上构建这个局域网的网关,这是宿主机与虚拟机、虚拟机与虚拟机之间通信的关键。最后,在将虚拟机中将 IP 设置为静态的,并手动设置一个其在此虚拟的局域网的静态 IP,这样一来,宿主机与虚拟机、虚拟机与虚拟机之间通信即可实现。


【提示】

  使用 VMware Workstation 的 NAT 模式 建立的局域网只对宿主机与所有的虚拟机之间是互相可见的,但对宿主机所在的局域网是不可见的。也就是说,NAT 模式 只是在宿主机内部开设了一个局域网,但该网络与宿主机所在的局域网不是同一个局域网,而宿主机同时是这两个局域网的成员。

  举个例子,假设主机 A 与主机 B 处于同一个局域网中,主机 A 内部开设了若干个虚拟机 a1、a2、a3、...、ai、...、an,主机 B 内部开设了若干个虚拟机 b1、b2、b3、...、bi、...、bn。那么,A 与 B 是可以互相感知的,A 与 ai 是可以互相感知的,ai 之间是可以互相感知的,B 与 bi 是可以互相感知的,bi 之间是可以互相感知的。但 A 与 bi 无法相互感知,B 与 ai 无法相互感知,ai 与 bi 更是无法相互感知。

  (为什么笔者在这里使用 感知,而不是通俗易懂的 访问 一词呢?这里感知指的是访问的必要条件,而访问是一种很强的条件,其含义也会因上下文而变化。如果两台主机位于同一个局域网,那么它们可以是互相感知的,但如果有一方使用防火墙进行了拦截,那么仍然是不能相互访问的。另外,协议、端口号等因素都有可能导致可感知但不能访问)

  有读者可能想问,一个宿主机位于两个局域网中,那如何分清一个局域网 IP 属于哪个局域网呢?原因就在于子网掩码。一个 16 位子网掩码的局域网最多可以分为 256 个 24 位子网掩码的局域网。一个 24 位子网掩码的局域网最多可以有 256 台主机。读者下面就可以看到,VMware Workstation 建立的局域网,其子网掩码是 24 位的。而宿主机所在的局域网,其子网掩码也是 24 位的。因此,宿主机所在的局域网与 VMware Workstation 建立的局域网,它们的 IP 前 24 位前缀是不同的,所以这不会发生混淆。


在宿主机上构建虚拟局域网

  1. 检查 VMware Workstation 是否已为宿主机上构建了一个虚拟的局域网。检查的方法是在宿主机(这里为 Windows 10)的命令行中如下命令。

    ipconfig

    在这里插入图片描述

    此处对于笔者的环境来说,可以通过 IP 地址与子网掩码看出,笔者此处的虚拟局域网为 192.168.191.XXX

  2. 在虚拟机中检查是否曾经已经设置过此虚拟机的 IP。如果之前没有设置过,那么在虚拟机的终端中输入如下命令,应该可以看到与笔者类型的输出。

    ifconfig

    [XXX@localhost ~]$ ifconfig
    ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            ether 00:0c:29:c1:c4:c6  txqueuelen 1000  (Ethernet)
            RX packets 193  bytes 12435 (12.1 KiB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 0  bytes 0 (0.0 B)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
            inet 127.0.0.1  netmask 255.0.0.0
            inet6 ::1  prefixlen 128  scopeid 0x10<host>
            loop  txqueuelen 1000  (Local Loopback)
            RX packets 2092  bytes 181912 (177.6 KiB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 2092  bytes 181912 (177.6 KiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    virbr0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
            inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255
            ether 52:54:00:86:d9:8e  txqueuelen 1000  (Ethernet)
            RX packets 0  bytes 0 (0.0 B)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 0  bytes 0 (0.0 B)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    

    可以看出,上面字段 ens33 中并没有字段 inet,这说明本机还没有此虚拟的局域网的 IP。

  3. 如果没有在虚拟机中设置过 IP,则设置 IP 的方法如下。

    首先,在 VMware Workstation 中设置此虚拟的局域网的网关。

    在这里插入图片描述

    当第一次开启时,需要使用管理员权限开启 更改设置

    在这里插入图片描述

    在这里插入图片描述

  4. 设置网关。此网关的 IP 只能为一种专用 IP(一般的格式为 192.168.XXX.XXX),需读者按照自身的实际情况自行设置。网关不能与已有的 IP 重复。

    前面有言,笔者此处的虚拟局域网为 192.168.191.XXX,所以笔者此处设置的网关需要以 192.168.191 开头。

    在这里插入图片描述

虚拟机为 Linux

  1. 若虚拟机为 Linux,在 Linux 的终端中输入如下命令切换到用户 root,因为之后的操作需要 root 权限。

    su root

  2. 在虚拟机的终端中输入如下命令编辑虚拟机的网卡配置文件 ifcfg-ens33

    vi /etc/sysconfig/network-scripts/ifcfg-ens33


    【提示】

      使用 Linux 的 vi 编程器时,在打开文件后,输入按键 i 后才能进行文本输入。输入完成之后依次输入 【ESC】:wq!ENTER 之后才能保存修改。


    【注意】

      如果读者虚拟机安装的是 Red Hat Enterprise Linux 9,将会找不到上述的 ifcfg-xxx 文件。解决办法可见笔者的另一篇博客:

      如何在 Linux 中将本地网络 IP 设置为静态的:
    https://blog.csdn.net/wangpaiblog/article/details/131565897


  3. 初始时,笔者的文件 ifcfg-ens33 的内容如下。

    TYPE=Ethernet
    PROXY_METHOD=none
    BROWSER_ONLY=no
    BOOTPROTO=dhcp
    DEFROUTE=yes
    IPV4_FAILURE_FATAL=no
    IPV6INIT=yes
    IPV6_AUTOCONF=yes
    IPV6_DEFROUTE=yes
    IPV6_FAILURE_FATAL=no
    NAME=ens33
    UUID=201bcfa6-0892-44ce-b573-c43ca742585b
    DEVICE=ens33
    ONBOOT=no
    
  4. 在文件 ifcfg-ens33 修改或增加如下内容。

    BOOTPROTO=static           # 将 IP 设置为静态的
    IPADDR=192.168.191.11      # 静态 IP
    NETMASK=255.255.255.0      # 子网掩码
    GATEWAY=192.168.191.2      # 网关地址
    
  5. 在笔者的虚拟机中,修改之后的内容如下。

    TYPE=Ethernet
    PROXY_METHOD=none
    BROWSER_ONLY=no
    BOOTPROTO=static
    DEFROUTE=yes
    IPV4_FAILURE_FATAL=no
    IPV6INIT=yes
    IPV6_AUTOCONF=yes
    IPV6_DEFROUTE=yes
    IPV6_FAILURE_FATAL=no
    NAME=ens33
    UUID=201bcfa6-0892-44ce-b573-c43ca742585b
    DEVICE=ens33
    ONBOOT=yes
    IPADDR=192.168.191.11
    NETMASK=255.255.255.0
    GATEWAY=192.168.191.2
    
  6. 现在,应该就可以在宿主机中使用 Xshell 访问虚拟机了。

    关于如何在 Xshell 远程访问 Linux,可见笔者的另一篇博客:

    如何在 Windows 主机上访问本地局域网中的 Linux 主机:
    https://blog.csdn.net/wangpaiblog/article/details/120052152

    在这里插入图片描述

将虚拟机加入宿主机的局域网

  将虚拟机加入宿主机的局域网指的是让虚拟机成为宿主机的局域网的成员。这样,对于不在宿主机内部的其它与宿主机平行的主机,也可以直接像访问宿主机那样访问宿主机内部的虚拟机。

通信原理

  将虚拟机加入宿主机的局域网需要使用 桥接模式。桥接模式与前面的 NAT 模式 有什么不同呢?对于 NAT 模式,宿主机会在其内部构建一个虚拟的局域网,然后让宿主机和其下虚拟机的都成为这个虚拟局域网的成员。而桥接模式则不同,桥接模式并没有为虚拟机构建一个单独的局域网,而是让虚拟机直接加入宿主机的局域网。

  因此,桥接模式直接可以让与宿主机平行的主机访问宿主机下的虚拟机,而 NAT 模式不能直接支持这一点。根本原因就在于,桥接模式下,与宿主机平行的主机与宿主机下的虚拟机属于同一个局域网,与 NAT 模式下则是两个不同的局域网。在计算机网络中,位于不同的局域网的主机是无法直接通信的,除非借助同时位于这些局域网的主机作为代理中介来转发它们之间的消息。


【提示】

  NAT 模式并不是不能实现与宿主机平行的主机访问宿主机下的虚拟机,只不过这样有些麻烦,所以这里从略。因为宿主机同时位于宿主机的局域网和宿主机下的虚拟局域网,所以只要借助宿主机来进行消息转发,就可以实现上述的通信。但这样做需要手动一个一个配置消息转发的端口映射。由于桥接模式已经实现了上述的通信功能,所以这里没有提及在 NAT 模式下的实现。

  使用 NAT 模式来实现上述通信并不是没有好处。由于 NAT 模式严格管控了端口映射,所以 NAT 模式比桥接模式安全很多,但代价就是步骤比较繁琐。


在虚拟机上开启桥接模式

  1. 在宿主机中如下命令查看宿主机所在的局域网信息。

    ipconfig/all

    在这里插入图片描述

    可以看出,对于笔者的局域网,关键信息如下:

    • 网关:192.168.0.1

    • 子网掩码:255.255.255.0

    • DNS 服务器:192.168.1.1

    • 虚拟机的 IP 应设置为:192.168.0.XXX


    【踩坑提醒】

      读者输入上述命令时可能会在宿主机发现很多个网,这是正常现象。读者需要识别出虚拟机需要接入的宿主机的网。对于不同的需求,此处的选择也不同。如果像笔者此处这样,接入的是宿主机连入本地路由器的有线网(这种网往往命名为 以太网),就可以参考上图中的信息。如果需要接入的是宿主机的 WIFI 连入的网络,就可能需要选择 无线局域网。如果有其它需求,也需要自行判断。


  2. 在虚拟机中开启桥接模式。

    在这里插入图片描述

    在这里插入图片描述

    设置完成之后,效果应该会显示出来。

    在这里插入图片描述

虚拟机为 Linux

  1. 若虚拟机为 Linux,根据上面的宿主机网络信息,在虚拟机中设置静态 IP。关于这方面的内容,可见笔者的另一篇博客:

    如何在 Linux 中将本地网络 IP 设置为静态的:
    https://blog.csdn.net/wangpaiblog/article/details/131565897


    【踩坑提醒】

      虚拟机中的静态 IP 需要与宿主机位于同一网络。根据上面的宿主机网络信息,笔者此处设置的虚拟机中的静态 IP 需要以 192.168.0.XXX 开头,且不能与已有的重复。


  2. 宿主机中如下命令尝试连接此虚拟机。这里,笔者的虚拟机中的静态 IP 设置为 192.168.0.128

    ping 192.168.0.128

    在这里插入图片描述

    如果此处访问不成功,这说明读者前面的设置虚拟机静态 IP 步骤有问题。

  3. 如果宿主机是可以连接互联网的,那么此时虚拟机应该也是可以连接互联网的。可以在虚拟机中尝试使用如下命令进行测试。

    ping www.baidu.com

    在这里插入图片描述

    如果此处访问不成功,这说明读者前面的设置虚拟机静态 IP 步骤有问题。

  4. 测试其它与宿主机平行的主机是否可访问宿主机下的虚拟机。这需要读者自备一个其它的主机(也可以是手机),并连入宿主机的局域网。之后,可以使用如下命令进行测试。

    ping 192.168.0.128

    在这里插入图片描述

    可以看出,笔者在手机上对虚拟机的访问也成功了。

  5. 现在,应该就可以在同一局域网下任意主机中使用 Xshell 访问虚拟机了。

    关于如何在 Xshell 远程访问 Linux,可见笔者的另一篇博客:

    如何在 Windows 主机上访问本地局域网中的 Linux 主机:
    https://blog.csdn.net/wangpaiblog/article/details/120052152

    在这里插入图片描述

重置虚拟机的网络

当在虚拟机中运行高性能的程序时,就有可能会使虚拟机的网络出现未知故障,尤其是在宿主机的性能不太好时。这种故障可以是多样的,如:

  • 有些域名无法访问,但有些可以。但直接在宿主机上进行这种操作却没问题。
  • 有些网络协议的通信成功,有些会失败。但直接在宿主机上进行这种操作却没问题。
  • 一些涉及网络协议的软件的部分功能失效,但此软件直接在宿主机上运行却没问题。
  • 虚拟机上未显示任何网络。但宿主机上的网络却是可以正常的,可以自由浏览网页。

有时候上述故障不是自己的配置有问题导致的,确实是 VMware 自己的问题。这个时候就需要重置 VMware 的网络来解决此问题。重置的方法如下。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

更改宿主机的 USB 连接导向

  当设备插入宿主机的 USB 接口时,究竟是宿主机还是虚拟机响应这个连接,这是一个问题。好在 VMware Workstation 提供了选择空间。

  默认情况下,VMware Workstation 会先接管 USB 连接,然后令用户在 VMware Workstation 中选择。不过,可以在 VMware Workstation 预先设定 USB 连接的导向。如下图所示。

在这里插入图片描述

在这里插入图片描述

Logo

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

更多推荐