需要一个独立于外部物理环境的、稳定的“宿主机-虚拟机”通信网络。
当你从固定网络环境切换到移动办公环境时,桥接模式 (Bridged Mode) 就会成为最大的痛点,因为它完全依赖外部的物理网络。
🏆 使用 NAT 模式
方案:将所有虚拟机的网络模式从“桥接”改为“NAT”。
NAT 模式的工作原理
-
创建私有网络: VMware会创建一个虚拟的、私有的局域网(例如
192.168.37.0/24)。 -
宿主机网卡: 你的Windows宿主机上会有一个虚拟网卡(通常叫 VMnet8)连接到这个私有网络,它会有一个固定的IP(例如
192.168.37.1)。 -
虚拟机IP: 你的所有Linux虚拟机都会从VMware的内置DHCP服务获取这个私有网络中的IP(例如
192.168.37.128、192.168.37.129...)。 -
宿主机访问: 你的Windows宿主机可以通过这些固定不变的私有IP(
192.168.37.x)随时访问虚拟机。 -
虚拟机上网: 当你的Windows笔记本连接到外网(无论是6网段、31网段还是手机热点)时,VMware会充当“NAT路由器”,自动将虚拟机的网络请求“翻译”并通过你笔记本的物理网络连接发送出去。虚拟机可以正常上网,但它们的IP保持不变。
-
(环境变动): 无论你的笔记本电脑连接到哪个Wi-Fi(6网段、31网段或1网段),虚拟机的IP(
192.168.37.x)永远不会改变。 -
(没有网络): 即使你断开所有Wi-Fi和网线,这个由VMnet8和虚拟机组成的内部私有网络依然存在且正常工作。你的Windows宿主机仍然可以通过
192.168.37.x访问虚拟机。
NAT下的虚拟机如何访问互联网?
-
工作原理: 虚拟机(例如
192.168.37.100)会把它的所有网络请求(比如ssh或访问google.com)发送给 VMware 的虚拟NAT路由器(通常是192.168.37.2)。 -
地址转换 (NAT): VMware 收到请求后,会把这个请求的“源IP”从虚拟机的私有IP(
192.168.37.100)“翻译”成你宿主机(Windows)在外部局域网的IP(例如192.168.6.197)。 -
对外访问: 对外部网络来说,所有请求都像是你的 Windows 笔记本发出的。当数据返回时,VMware 会再把它“翻译”回来,发给正确的虚拟机。
总结: 只要你的 Windows 宿主机能上网(无论连的是 6 网段、31 网段还是手机热点),你所有的 NAT 模式虚拟机就都能上网。
局域网内其他电脑如何访问虚拟机?
“NAT会和宿主机共用同一个ip,这样的话就会访问宿主机的ip,就会导致默认失败。”
因为 NAT 模式的本质是隐藏。它把你所有的虚拟机都藏在了你的 Windows 笔记本“后面”。局域网里的其他电脑(比如你同事的电脑 192.168.6.150)只看得到你的 Windows 笔记本(192.168.6.197),完全不知道你电脑里还“藏”着一个 192.168.37.0/24 的网络。
解决方案:端口转发 (Port Forwarding)
操作:从桥接切换到 NAT
配置虚拟机为NAT模式
-
关闭虚拟机: 先将你所有的Linux虚拟机正常关机。
-
修改虚拟机设置:
-
右键点击虚拟机 > "设置" (Settings)。
-
选择 "网络适配器" (Network Adapter)。
-
在右侧的 "网络连接" (Network connection) 部分,将 "桥接模式" (Bridged) 改为 "NAT"。
-
对你需要访问的所有虚拟机重复此操作。
-
到这一步,所有虚拟机都已经连接NAT网卡,但是地址是DHCP的,每次都需要查询。
设置静态IP
- 为了访问更方便(例如
192.168.37.100而不是DHCP随机分配的192.168.37.131),可以在VMware中配置DHCP静态分配(比较麻烦,需要修改配置文件,容易出错导致所有崩溃),或者直接在Ubuntu系统内部设置静态IP。
查看VMware中地址IP范围:
-
打开 VMware > "编辑" (Edit) > "虚拟网络编辑器" (Virtual Network Editor)。
-
选择 VMnet8 (NAT)。
-
查看底部的 "子网IP" (Subnet IP),这就是你的NAT网络范围(例如
192.168.37.0)。 -
点击 "DHCP设置",你可以看到IP的分配范围。
-
点击 "NAT设置",你可以看到网关IP(通常是
.2,例如192.168.37.2)。


然后开启Ubuntu虚拟机,重启Ubuntu虚拟机,这时候可以分配到NATDHCP服务的ip:
通过ssh工具连接。
Ubuntu内配置静态ip:
- 缺点: 你必须确保你指定的这个 IP 地址(
192.168.37.100)没有在 VMware 的 DHCP 地址池范围(128到254)内,否则未来可能会有 IP 冲突。
操作步骤(以Ubuntu Netplan为例):
-
获取网络信息: 去 "虚拟网络编辑器" > "VMnet8" > "NAT 设置" 查到网关 (Gateway) IP(例如
192.168.37.2)和子网IP(例如192.168.37.0)。 -
编辑配置: 在 Ubuntu 中,编辑
netplan配置文件(通常在/etc/netplan/目录下)。
sudo vim /etc/netplan/50-cloud-init.yaml
修改内容:
默认内容
network:version: 2ethernets:ens33:dhcp4: true
修改为:
network:ethernets:ens33: # 你的网卡名dhcp4: noaddresses:- 192.168.37.100/24 # 你的静态IProutes:- to: defaultvia: 192.168.37.2 # 你的网关地址nameservers:addresses: [192.168.37.2, 223.5.5.5] # DNS服务器version: 2
网关 (Gateway) 设置为你在 "NAT设置" 中看到的IP(例如 192.168.37.2)。
- DNS可以设置为网关地址或公共DNS(如
223.5.5.5)。
在执行之前,请最后确认两件事:
-
IP 地址池: 你要设置的
192.168.37.128这个 IP,没有在 "虚拟网络编辑器" > "VMnet8" > "DHCP 设置" 的“起始 IP”和“结束 IP”范围之内。-
如果 VMware 默认的 DHCP 范围是
192.168.37.128到192.168.37.254,那么你的静态 IP...128就会和 DHCP 分配的第一个 IP 冲突。 -
安全的做法是,把静态 IP 设置在 DHCP 范围之外,比如
192.168.37.100。
-
-
网卡名称: 在你的 Ubuntu 虚拟机中运行
ip a命令,确认你的网卡名称确实是ens33。如果不是(比如是ens32或eth0),请把配置文件中的ens33:改成你实际的名称。
应用配置: sudo netplan apply
-
启动虚拟机: 重新启动虚拟机。
-
访问测试:
-
在Windows的
cmd中,使用ipconfig查找 VMnet8 适配器的IP(例如192.168.37.1)。 -
在Ubuntu中,使用
ip a查找新获取的IP(例如192.168.37.100)。 -
现在,你永远都可以通过
ssh user@192.168.37.100来访问它了。
-
端口转发
优点:
-
对你而言 (宿主机):你访问虚拟机的IP永远不变(例如
192.168.37.100),这解决了你的核心痛点。 -
对别人而言 (局域网):他们访问的IP地址从“虚拟机的IP”变成了“你宿主机的IP”。当你切换网络环境时(例如从 6 网段换到 31 网段),你只需要告诉他们你宿主机的新IP(例如
192.168.31.50:8081)即可,而你虚拟机里的所有配置完全不需要改动。
需要手动在 VMware 中配置一个规则,告诉它:
“当有网络请求访问我宿主机(Windows)的
X端口时,请自动把这个请求转发给我虚拟机(Linux)的Y端口。”
配置端口转发
示例:导航网页(192.168.6.197:8081)
假设:
-
你的 Windows 宿主机IP:
192.168.6.197(由外部路由器分配) -
你的 Linux 虚拟机IP:
192.168.37.100(由 VMnet8 分配,你最好设为静态) -
你的导航网页服务运行在 Linux 的
8081端口上。
你需要这样设置:
-
打开虚拟网络编辑器: 在 VMware Workstation 中,点击 "编辑" (Edit) > "虚拟网络编辑器" (Virtual Network Editor)。
-
选择 NAT (VMnet8): 选中列表中的
VMnet8 (NAT)。 -
打开 NAT 设置: 点击 "NAT 设置" (NAT Settings...) 按钮。
-
添加端口转发规则: 在 "端口转发" (Port Forwarding) 区域,点击 "添加" (Add)。
-
填写规则:
-
宿主机端口 (Host Port):
8081(这是别人访问你 Windows 电脑时用的端口) -
类型 (Type): TCP
-
虚拟机 IP 地址 (Virtual machine IP address):
192.168.37.100(你 Linux 的内部 IP) -
虚拟机端口 (Virtual machine port):
8081(你 Linux 内部的服务端口)
-
-
保存: 一路点击 "确定" (OK) 保存所有设置。
配置完成后的效果:
-
你的访问(宿主机): 你自己(Windows)访问虚拟机不受影响,你仍然可以通过
ssh user@192.168.37.100和http://192.168.37.100:8081访问。 -
别人的访问(局域网): 你局域网的同事现在可以通过访问你宿主机的 IP + 转发端口来访问你的服务,即访问:
http://192.168.6.197:8081。 -
Windows 防火墙: 你必须确保你的 Windows 宿主机防火墙允许入站 (Inbound) 流量通过
TCP 8081端口。否则,VMware 连转发请求的机会都没有。
原理分析
1为什么你(宿主机)可以访问?
因为你的 Windows 宿主机现在是“跨网络”的。它同时属于两个网络:
-
物理网络(
192.168.109.x):-
网卡: 你的物理网卡(Wi-Fi 或有线网卡)。
-
IP:
192.168.109.63(由外部路由器分配)。 -
用途: 用来和“别人”以及互联网通信。
-
-
VMware 虚拟网络(
192.168.37.x):-
网卡: 一个叫
VMnet8的虚拟网卡(你可以在 Windows 的cmd中输入ipconfig看到它)。 -
IP:
192.168.37.1(这是 VMware 分配给宿主机的、在这个虚拟网络里的 IP)。 -
用途: 专门用来和你的虚拟机通信。
-
当你(宿主机)访问 http://192.168.37.100:9000 时,你的 Windows 路由表会说:
“哦,
192.168.37.100?我知道这个地址!它和我的VMnet8网卡(192.168.37.1)在同一个网段。我直接通过VMnet8把它发过去就行了。”
所以,你的宿主机和你的虚拟机是在一个私有的、虚拟的局域网内直接对话。
为什么别人(局域网)不能访问?
正如你所说,因为他们的路由表中没有你的虚拟机 IP。
-
别人的状态:
-
网卡: 只有一张物理网卡。
-
IP: 比如
192.168.109.50。 -
路由表: 他们的路由表只知道
192.168.109.x这个网络。
-
-
访问过程:
-
当你的同事(
192.168.109.50)试图访问http://192.168.37.100:9000时,他的电脑会查看自己的路由表。 -
电脑发现
192.168.37.100并不在本地的109.x网段内。 -
于是,电脑会将这个请求发给它的默认网关(也就是办公室的路由器
192.168.109.1)。 -
办公室路由器收到后,也不知道
192.168.37.x在哪里,它会把请求转发给上级 ISP,最终数据包在公网上被丢弃(因为192.168.x.x是私有地址)。
-
一句话总结:192.168.37.0/24 这个网络是一个“黑盒子”,它完全存在于你的笔记本电脑内部。局域网里的任何其他人都不知道它的存在。