Appearance
macOS VMware Fusion Ubuntu 虚拟机静态 IP 配置踩坑实录

一次因网关地址写错导致的“玄学”网络问题排查全过程
背景
在 macOS 上使用 VMware Fusion 运行 Ubuntu 22.04 虚拟机,配置静态 IP 后网络不通,但 DHCP 模式下却一切正常。
症状
| 现象 | 状态 |
|---|---|
ping 192.168.101.1(宿主机网桥) | 通 |
ping 8.8.8.8(外网 IP) | 不通 |
ping bing.com | 不通(DNS 也无法解析) |
| DHCP 模式 | 完全正常 |
错误配置
yaml
network:
version: 2
ethernets:
ens33:
dhcp4: false
addresses:
- 192.168.101.100/24
routes:
- to: default
via: 192.168.101.1 # 错误!这是宿主机网桥,不是 NAT 网关
nameservers:
addresses:
- 223.5.5.5
- 114.114.114.114排查过程
1. 确认 IP 已生效
bash
ip addr show ens33
# inet 192.168.101.100/24 ... 静态 IP 已生效2. 测试网关连通性
bash
ping 192.168.101.1
# 64 bytes from 192.168.101.1 ... 网关能 ping 通3. 测试外网连通性
bash
ping 8.8.8.8
# 100% packet loss 外网不通4. 检查路由表
bash
ip route show | grep default
# default via 192.168.101.2 dev ens33 proto dhcp src 192.168.101.129 metric 100关键发现: DHCP 模式下获取的网关是 192.168.101.2,而不是 192.168.101.1!
5. 检查宿主机网络接口
bash
ifconfig
# bridge102: inet 192.168.101.1 ← 这是宿主机侧的网桥接口根因分析
在 VMware Fusion 的 NAT 网络中,IP 地址的分配如下:
| IP 地址 | 角色 | 说明 |
|---|---|---|
192.168.101.1 | 宿主机网桥 | macOS 上的 bridge102 接口,用于宿主机与虚拟机通信 |
192.168.101.2 | NAT 网关 | VMware NAT 服务(vmnet-natd)监听的地址,负责转发流量到外网 |
192.168.101.128/129 | 虚拟机 IP | DHCP 分配给虚拟机的地址 |
所以:
192.168.101.1= 宿主机网桥(虚拟机 ↔ 宿主机)192.168.101.2= NAT 网关(虚拟机 ↔ 外网)
把默认路由指向 192.168.101.1,数据包到了宿主机网桥就停了,无法被转发到外网。
正确配置
步骤 1:先用 DHCP 获取正确的网关地址
bash
sudo dhclient -v ens33
ip route show | grep default
# default via 192.168.101.2 dev ens33 ... ← 记下这个网关地址步骤 2:禁用 cloud-init(防止重启后被覆盖)
bash
sudo tee /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg <<EOF
network: {config: disabled}
EOF步骤 3:配置静态 IP
bash
sudo tee /etc/netplan/50-cloud-init.yaml <<'EOF'
network:
version: 2
ethernets:
ens33:
dhcp4: false
addresses:
- 192.168.101.100/24
routes:
- to: default
via: 192.168.101.2 # 关键:使用 DHCP 获取的网关
nameservers:
addresses:
- 223.5.5.5
- 114.114.114.114
EOF步骤 4:应用配置
bash
sudo netplan apply步骤 5:验证
bash
ping 8.8.8.8
ping bing.com避坑指南
| 坑 | 正确做法 |
|---|---|
网卡名写 eth0 | Ubuntu 22.04 实际网卡名是 ens33 |
网关写 192.168.101.1 | 先用 ip route show 查看 DHCP 获取的真实网关 |
网关注释写 gateway4 | Ubuntu 22.04 已弃用 gateway4,需使用 routes |
| 没有禁用 cloud-init | 每次重启配置会被覆盖,需添加 99-disable-network-config.cfg |
总结
核心教训: 配置静态 IP 时,不要凭想象写网关地址。正确的做法是:
- 先用 DHCP 模式启动
- 执行
ip route show | grep default获取真实网关 - 用这个网关配置静态 IP
bash
# 黄金三连
sudo dhclient -v ens33 # 获取 DHCP 分配
ip route show | grep default # 查看真实网关
# 用查到的网关配置静态 IP本文档记录于 2026-08-20,macOS 13.3.1 + VMware Fusion 13.6.3 + Ubuntu 22.04
