在使用 VMware 虚拟机搭建 Ubuntu 开发环境时,不少人会遇到这样的困扰:Windows 想通过 SSH 连接虚拟机中的 Ubuntu,却始终 ping 不通,Xshell 提示 “Connection failed”。

即使查阅全网,排查一般性的防火墙、ssh未开启等常见问题,依然未解决

排查后发现,Windows 的 VMnet8 虚拟网卡获取到的是169.254.x.x这类 “异常 IP”—— 这正是导致 SSH 连接失败的核心原因。本文结合实际操作场景,详细拆解问题根源、解决方案和避坑要点,适合开发新手快速上手。

一、问题复现:典型故障现象

1. 环境配置

  • 虚拟机:VMware + Ubuntu 20.04(NAT 网络模式,ifconfig 显示 IP 为 192.168.200.128)
  • 物理机:Windows 10/11(通过 WiFi 联网,IP 为 10.41.245.139)
  • 目标:通过 Xshell SSH 连接 Ubuntu(端口 22),用于 ESP32 开发、Linux 编程等场景

2. 故障表现

  • Windows 终端 ping Ubuntu IP(192.168.200.128):100% 丢失,提示 “请求超时”;
  • 查看 Windows 网络连接:VMware Network Adapter VMnet8 的 IPv4 地址为169.254.85.127(子网掩码 255.255.0.0);
  • Xshell 直接连接 Ubuntu IP + 端口 22:提示 “Could not connect to 'ubuntu' (port 22): Connection failed”;
  • 排查确认:Ubuntu 的 SSH 服务已正常运行(systemctl status ssh显示 active running),防火墙已开放 22 端口。

二、根源剖析:169.254.x.x 到底是什么?

169.254.x.x并非 “错误 IP”,而是Windows 的自动私有地址(APIPA) —— 当网卡开启 “自动获取 IP(DHCP)”,但无法从 DHCP 服务器拿到有效 IP 时,系统会自动分配该网段 IP,用于临时局域网通信。

在 VMware NAT 模式下,VMnet8 虚拟网卡的 IP 本应由 VMware 自带的虚拟 DHCP 服务分配(正常应为192.168.200.x网段,与 Ubuntu 同网段),但出现以下情况时会获取 APIPA 地址:

1. 核心原因:VMware DHCP/NAT 服务未启动(最常见)

VMware 需依赖两个关键服务实现网络通信:

  • VMware DHCP Service:为 VMnet8 网卡和 Ubuntu 虚拟机分配同网段 IP;
  • VMware NAT Service:提供虚拟机外网访问能力。

若这两个服务未运行(如系统重启后未自动启动、被安全软件禁用、进程崩溃),VMnet8 无法通过 DHCP 获取正常 IP,只能 fallback 到 APIPA 地址。

2. 次要原因:VMnet8 配置被破坏

  • 手动修改过 VMware “虚拟网络编辑器” 的 VMnet8 配置(如误删 DHCP 地址池、修改子网 IP 后未同步);
  • VMware 安装目录下的配置文件(如vmnetdhcp.conf)损坏(常见于卸载重装、磁盘错误);
  • 多虚拟机软件冲突(如同时装 VMware 和 VirtualBox,虚拟网卡配置互相覆盖)。

3. 其他原因:防火墙拦截或驱动异常

  • Windows 防火墙 / 第三方安全软件拦截了 VMware DHCP 的广播包(DHCP 分配 IP 依赖广播通信);
  • VMnet8 虚拟网卡驱动损坏 / 过时(VMware 驱动与系统更新不兼容)。

三、3 种解决方案:从快速解决到彻底修复

方案 1:快速生效 —— 手动设置 VMnet8 固定 IP(适合紧急开发)

无需修复 DHCP 服务,直接给 VMnet8 分配与 Ubuntu 同网段的固定 IP,快速打通网络:

  1. 查看 Ubuntu 网络信息(终端输入ifconfig):
    • 记录 IP(如 192.168.200.128)、子网掩码(255.255.255.0);
  2. 配置 Windows VMnet8 网卡:
    • Windows 搜索 “网络连接”→ 找到 “VMware Network Adapter VMnet8”→ 右键 “属性”;
    • 双击 “Internet 协议版本 4(TCP/IPv4)”→ 选择 “使用下面的 IP 地址”:
      • IP 地址:192.168.200.10(最后一段 1-254,不与 Ubuntu 的 128 冲突);
      • 子网掩码:255.255.255.0(与 Ubuntu 一致);
      • 默认网关:192.168.200.2(VMware NAT 默认网关,可在 “虚拟网络编辑器→VMnet8→NAT 设置” 中查看);
      • DNS 服务器:8.8.8.8 或 114.114.114.114;
  3. 测试连通性:
    • Windows 终端 ping 192.168.200.128,显示 “来自 xxx 的回复” 即成功;
    • Xshell 直接连接 Ubuntu IP(192.168.200.128)+ 端口 22,输入用户名密码即可登录。

方案 2:推荐方案 ——NAT 模式 + 端口转发(稳定无冲突)

无需修改网卡 IP,通过端口转发绕开网段隔离,兼顾外网访问和 SSH 连接,适合长期使用:

  1. 配置 VMware 端口转发规则:
    • 关闭 Ubuntu 虚拟机→VMware 顶部菜单 “编辑→虚拟网络编辑器”;
    • 选中 “VMnet8”→ 点击 “更改设置”(管理员权限)→ “NAT 设置→端口转发→添加”;
    • 填写规则:
      • 描述:Ubuntu-SSH;
      • 主机端口:2222(避免与 Windows 22 端口冲突);
      • 虚拟机 IP:192.168.200.128(Ubuntu 当前 NAT IP);
      • 虚拟机端口:22(SSH 默认端口);
  2. 启动 Ubuntu,确认 SSH 服务运行;
  3. Xshell 连接配置:
    • 主机:127.0.0.1(Windows 本地回环地址);
    • 端口:2222(步骤 1 设置的主机端口);
    • 输入 Ubuntu 用户名密码,即可成功连接。

方案 3:彻底修复 —— 恢复 VMware DHCP 服务(根治问题)

若想让 VMnet8 自动获取正常 IP,需修复 VMware 的 DHCP/NAT 服务:

  1. 启动 VMware 关键服务:
    • Windows 搜索 “服务”→ 找到 “VMware DHCP Service” 和 “VMware NAT Service”;
    • 若状态为 “已停止”,右键 “启动”,并将 “启动类型” 改为 “自动”(避免重启后失效);
  2. 还原 VMnet8 默认配置:
    • VMware “虚拟网络编辑器”→ 选中 “VMnet8”→ 点击 “还原默认设置”(清除损坏配置);
  3. 重启 VMware 和 Ubuntu:
    • 启动 Ubuntu 后,ifconfig 确认 IP 仍为 192.168.200.x 网段;
    • Windows 查看 VMnet8 IP,已自动获取同网段地址(如 192.168.200.1),ping Ubuntu 正常。

四、常见问题排查(避坑指南)

  1. 启动 VMware 服务时提示 “启动失败”?
    • 原因:服务依赖缺失或权限不足;
    • 解决:以管理员身份运行 VMware,或在 “服务” 中右键服务→“属性→登录”,选择 “本地系统账户”。
  2. 还原 VMnet8 配置后仍获取 169.254.x.x?
    • 检查 Windows 防火墙:临时关闭防火墙,或允许 “VMware DHCP Service” 和 “VMnetdhcp.exe” 进程的网络访问;
    • 卸载第三方虚拟机软件:若同时安装了 VirtualBox,先卸载后重启 VMware。
  3. 手动设置固定 IP 后仍 ping 不通?
    • 确认 Ubuntu 防火墙已开放 22 端口(sudo ufw allow 22);
    • 检查 VMware 网络模式是否为 NAT(避免误设为 “仅主机模式”)。

五、总结

Windows 通过 VMnet8 连接 Ubuntu SSH 失败的核心,是 VMnet8 获取了 169.254.x.x 的 APIPA 地址,本质是 VMware DHCP 服务异常或配置错乱。

  • 紧急开发场景:优先选择「方案 1(手动设置固定 IP)」,5 分钟快速打通;
  • 长期稳定使用:推荐「方案 2(NAT + 端口转发)」,不受网段和联网方式影响;
  • 根治问题需求:选择「方案 3(修复 DHCP 服务)」,恢复 VMware 默认网络功能。

按照以上步骤操作,即可顺利解决 SSH 连接问题,专注于后续的开发工作(如 ESP32 固件编译、Linux 环境下的 Python/OpenCV 开发等)。如果遇到其他特殊情况,欢迎在评论区留言交流!

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐