上周我在 E5 主机上用 VMware 同时开了 3 台 CentOS 虚拟机,准备搭一套分布式测试环境。结果头天晚上还好好的,第二天开机:虚拟机直接上不了网,我 Windows 宿主机 SSH 过去,报"连接超时"。就这么一个破事,我折腾了整整 3 个晚上。
第一晚:虚拟机拿了个 169.254.x.x 的 IP
我打开虚拟机 ip a,一眼看到地址是 169.254.10.23。懂行的兄弟一看就笑了:这是 DHCP 请求失败、系统自动分配的"私搭乱建"地址,根本上不了网。
后来查 VMware 的"编辑→虚拟网络编辑器",我才发现:VMnet8(NAT 模式用的虚拟网卡)在 Windows 宿主机那边,也拿到了 169.254.x.x。问题不在虚拟机里,在宿主机的 VMware DHCP 服务根本没起来。
解决:Win+R 输入 services.msc,找到 VMware DHCP Service 和 VMware NAT Service,两个都右键→启动,并改成"自动"。
第二晚:桥接模式突然连不上
第二天我把其中一台虚拟机改成桥接模式,想让它直接拿到家里路由器的 IP。结果更离谱:宿主机能上网,虚拟机桥接后 ping 网关都不通。我才反应过来:另一个网口的驱动被 Windows 自动更新换了。
解决:设备管理器→卸载那个网口驱动,重装主板官网旧版驱动,别用 Win10 自动更的。
第三晚:三种模式到底什么时候用
NAT 模式(VMnet8)——虚拟机共用宿主机的 IP 上网,外部设备看不到虚拟机。适合:跑后端服务、编译、测试。
桥接模式——虚拟机直接从家里路由器拿 IP,和宿主机平级。手机、其他电脑可以直接访问虚拟机。适合:跑 Web 服务要给手机测、跑游戏服务器。
仅主机模式(VMnet1)——完全孤岛,只有宿主机能连虚拟机,虚拟机上不了外网。适合:搭隔离的实验环境。
我之前最大的错误就是:明明要让手机访问虚拟机里的 Web 服务,却用了 NAT。NAT 下你还得在宿主机配端口转发,配错一次断一次,纯粹自虐。