Skip to content

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

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.2NAT 网关VMware NAT 服务(vmnet-natd)监听的地址,负责转发流量到外网
192.168.101.128/129虚拟机 IPDHCP 分配给虚拟机的地址

所以:

  • 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

避坑指南

正确做法
网卡名写 eth0Ubuntu 22.04 实际网卡名是 ens33
网关写 192.168.101.1先用 ip route show 查看 DHCP 获取的真实网关
网关注释写 gateway4Ubuntu 22.04 已弃用 gateway4,需使用 routes
没有禁用 cloud-init每次重启配置会被覆盖,需添加 99-disable-network-config.cfg

总结

核心教训: 配置静态 IP 时,不要凭想象写网关地址。正确的做法是:

  1. 先用 DHCP 模式启动
  2. 执行 ip route show | grep default 获取真实网关
  3. 用这个网关配置静态 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

最后更新2026/08/20 15:16
如果你觉得这篇文章有帮助,或者想聊聊技术、工作,欢迎通过下面方式联系我:
contact fishfinal