VMware NAT网络模式切换到桥接模式

187 阅读7分钟

1. NAT模式的工作原理

当您将虚拟机的网络模式设置为NAT时,VMware会在您的Windows宿主机内部创建一个私有的虚拟网络。

  • 虚拟NAT设备:  VMware会创建一个虚拟的NAT设备(可以想象成一个虚拟路由器)。这个设备的一端连接到您的物理网络,另一端连接到这个私有虚拟网络。
  • 虚拟交换机 (VMnet8):  您的Linux虚拟机连接到这个名为VMnet8的虚拟交换机上。
  • 私有IP地址:  在这个私有网络里,您的Linux虚拟机会被分配一个私有的IP地址(无论是通过DHCP动态获取还是您手动设置的静态IP)。这个IP地址只在这个虚拟网络内部有效。
  • 地址转换:  当您的虚拟机需要访问外部网络(例如上网)时,虚拟NAT设备会将虚拟机发出的网络请求的源IP地址(您的虚拟机的私有IP)转换成您宿主机的物理IP地址,然后再发送出去。对于外部网络来说,所有的请求都像是您的Windows电脑发出的。

2. 为什么只有宿主机可以访问?

正是由于上述的NAT工作原理,导致了只有您的Windows宿主机能够直接连接到您的Linux虚拟机:

  • 网络隔离:  您的Linux虚拟机所在的虚拟网络(VMnet8)与您办公室或家庭的局域网是隔离的。局域网内的其他电脑并不知道这个虚拟网络的存在,也不知道如何将数据包路由到您为虚拟机配置的那个静态IP地址。
  • 宿主机的特殊角色:  您的Windows宿主机之所以能访问虚拟机,是因为VMware为其创建了一个特殊的虚拟网卡(VMware Network Adapter VMnet8)。这个虚拟网卡连接到了VMnet8虚拟交换机上,所以宿主机和虚拟机实际上是处于同一个虚拟网络中的,彼此之间当然可以通信。

您可以这样理解:您的Linux虚拟机被藏在了您的Windows电脑“背后”,局域网中的其他电脑只能看到您的Windows电脑,看不到里面的虚拟机。

总结

网络连接是否可以访问虚拟机 (NAT模式)原因
安装VMware的宿主机可以宿主机通过VMware创建的虚拟网卡(VMnet8)直接连接在虚拟网络上。
局域网内的其他电脑不可以其他电脑处于物理网络中,与虚拟机所在的虚拟网络是隔离的,没有路由可以到达虚拟机的私有IP。

如何解决这个问题?

如果您希望局域网内的其他电脑也能访问到您Linux虚拟机上运行的服务(例如网站、数据库等),您有以下两种主要方法:

  1. 使用端口转发 (Port Forwarding)
    这是在NAT模式下让外部设备访问虚拟机的推荐方法。您可以在VMware的“虚拟网络编辑器”中设置端口转发规则。

    • 原理:  将您Windows宿主机的某个端口(例如8080端口)映射到您Linux虚拟机的IP地址和服务的端口(例如80端口)。
    • 访问方式:  之后,其他电脑就可以通过访问 http://<您的Windows主机IP>:8080 来访问到您虚拟机里的网站服务了。
  2. 切换到桥接模式 (Bridged Mode)

    • 原理:  在桥接模式下,VMware会把您的虚拟机直接连接到您所在的物理局域网上。 您的虚拟机将不再隐藏在宿主机后面,而是会像局域网内一台真实的、独立的电脑一样,从您的路由器获取一个IP地址。
    • 优点:  配置简单,虚拟机在网络中是完全可见的,局域网内所有设备都可以直接通过虚拟机的IP地址访问它。
    • 缺点:  虚拟机会占用您局域网内的一个IP地址。

操作步骤:切换到桥接模式

请按照以下步骤操作,让您的Linux虚拟机加入到局 vực网中。

第1步:关闭您的Linux虚拟机

在进行网络模式更改之前,请务必先将虚拟机彻底关机(Shutdown),而不是挂起(Suspend)。

第2步:在VMware中更改网络模式

  1. 打开VMware Workstation。
  2. 在左侧的虚拟机列表中,右键点击您的Linux虚拟机,选择“设置 (Settings)”。
  3. 在弹出的“虚拟机设置”窗口中,选择“网络适配器 (Network Adapter)”。
  4. 在右侧的“网络连接”部分,选择“桥接模式(B): 直接连接到物理网络 (Bridged: Connected directly to the physical network)”。
  5. (可选但推荐)  勾选“复制物理网络连接状态 (Replicate physical network connection state)”。
  6. 点击“确定”保存设置。

第3步:为虚拟机规划一个新的静态IP

这是最关键的一步。之前您设置的静态IP是给NAT模式的虚拟网络用的,现在虚拟机要加入物理局域网,就需要一个与您的物理局域网匹配的IP地址。

  1. 查看您Windows主机的网络信息:

    • 在Windows上,按下 Win + R 键,输入 cmd 并回车,打开命令提示符。

    • 输入命令 ipconfig /all 并回车。

    • 找到您正在使用的物理网卡(通常是“以太网适配器”或“无线局域网适配器”),记下以下信息:

      • IPv4 地址 (IPv4 Address):  例如 192.168.1.100
      • 子网掩码 (Subnet Mask):  例如 255.255.255.0
      • 默认网关 (Default Gateway):  例如 192.168.1.1
      • DNS 服务器 (DNS Servers):  例如 192.168.1.1 或其他地址
  2. 确定给Linux虚拟机的新IP:

    • 您需要为虚拟机选择一个在同一个网段未被其他设备使用的IP地址。
    • 根据上面的例子,您的网络是 192.168.1.x 网段。您可以选择一个比较大的数字,以避免和路由器自动分配的IP冲突,例如 192.168.1.150。
    • 您可以在Windows的命令提示符里用 ping 192.168.1.150 来测试一下这个IP是否已经被占用。如果显示“请求超时”或“目标主机不可达”,则说明该IP很可能是空闲的。

第4步:在Linux系统中配置新的静态IP

  1. 启动您的Linux虚拟机。

  2. 登录系统,修改网络配置文件。这个文件的位置因Linux发行版而异:

    • 对于Ubuntu 18.04及更新版本 (使用netplan):

      • 配置文件通常在 /etc/netplan/ 目录下,文件名可能是 01-netcfg.yaml 或类似的。
      • 使用编辑器打开它:sudo nano /etc/netplan/01-netcfg.yaml
      • 修改内容如下(请根据您第3步记录的信息修改):

      codeYaml

      network:
        ethernets:
          ens33: # 注意:您的网卡名可能是ens33, eth0等,请保持不变
            dhcp4: no
            addresses: [192.168.1.150/24] # 您的新静态IP,/24代表子网掩码255.255.255.0
            gateway4: 192.168.1.1        # 您的网关
            nameservers:
              addresses: [192.168.1.1, 114.114.114.114] # 您的DNS服务器
        version: 2
      
      • 保存文件后,应用配置:sudo netplan apply
    • 对于CentOS/RHEL或旧版Ubuntu (使用ifcfg):

      • 配置文件通常是 /etc/sysconfig/network-scripts/ifcfg-eth0 (或 ifcfg-ens33)。
      • 使用编辑器打开它:sudo vi /etc/sysconfig/network-scripts/ifcfg-eth0
      • 修改或添加以下内容:

      codeCode

      BOOTPROTO="static"
      IPADDR="192.168.1.150"    # 您的新静态IP
      NETMASK="255.255.255.0"   # 您的子网掩码
      GATEWAY="192.168.1.1"     # 您的网关
      DNS1="192.168.1.1"        # 您的DNS
      DNS2="114.114.114.114"
      
      • 保存文件后,重启网络服务:sudo systemctl restart network

第5步:测试连接

  1. 在Linux虚拟机内:

    • 尝试 ping www.baidu.com 看看是否能上网。
    • 尝试 ping <您的网关IP> (例如 ping 192.168.1.1) 看看是否能连接到路由器。
  2. 在局域网的其他电脑上:

    • 打开命令提示符或终端。
    • 尝试 ping <您的Linux虚拟机新IP> (例如 ping 192.168.1.150)。
    • 如果能够ping通,恭喜您!现在局域网内的所有电脑都可以通过 192.168.1.150 这个IP地址来访问您的虚拟机了。