Linux虚拟机网络故障排查与解决方案

📋 核心问题总结

最终目标 :用 WindTerm 通过 SSH 连接本机 VMware 虚拟机。

根本卡点:虚拟机网络不通(IP 获取失败 / 路由缺失 / 服务冲突)。

🔥 按场景分类的解决方案

场景一:连接工具选择(最基础)
  • 问题:WindTerm 能不能连本机虚拟机?

  • 答案 :能。只要虚拟机和物理机网络互通,用 SSH 协议(端口 22)即可。

  • 操作:新建 SSH 会话,填入虚拟机 IP、端口、用户名、密码。


场景二:虚拟机网络模式选哪个?(NAT vs 桥接)
  • NAT 模式:虚拟机通过物理机上网,物理机通过 VMnet8 虚拟网卡访问虚拟机(需要 VMnet8 正常工作)。

  • 桥接模式:虚拟机直接接入物理机所在局域网,和物理机"平级"(IP 同网段),最稳定,推荐。

  • 你的情况 :VMnet8 坏掉了(IP 变成 169.254.x.x),所以 改用桥接模式。


场景三:虚拟机内部 IP 配置(静态 vs DHCP)
  • 问题 :虚拟机 IP 总是 192.168.6.100,和物理机不在同一网段。

  • 原因 :虚拟机网卡配置文件(/etc/sysconfig/network-scripts/ifcfg-ens33)写死了静态 IP,未跟随 VMware 网络设置变化。

  • 解决方案:

    • 方案 A(推荐) :改成 DHCP 自动获取,让路由器分配同网段 IP。

      ini

      复制代码
      BOOTPROTO=dhcp
      # 删除 IPADDR、NETMASK、GATEWAY 等静态行
    • 方案 B :手动设置和物理机同网段的静态 IP (如物理机 192.168.228.197,虚拟机设 192.168.228.150)。

      ini

      复制代码
      BOOTPROTO=static
      IPADDR=192.168.228.150
      NETMASK=255.255.255.0
      GATEWAY=192.168.228.1   # 必须是物理网络真实网关
      DNS1=192.168.228.1

场景四:网络管理服务冲突(最折腾的一环)
  • 问题 :systemctl restart network 报错,RTNETLINK answers: File exists 或 No suitable device found。

  • 原因 :NetworkManager 和 network 两个服务抢控制权,且 ens33 被标记为"未托管"。

  • 解决方案:

    1. 禁用 NetworkManager ,只用 network 服务:

      bash

      复制代码
      systemctl stop NetworkManager
      systemctl disable NetworkManager
    2. 在网卡配置文件中明确声明:

      ini

      复制代码
      NM_CONTROLLED=no   # 告诉 NetworkManager 别管这块网卡
    3. 重启 network 服务:

      bash

      复制代码
      systemctl restart network

场景五:路由表缺失(导致"网络不可达")
  • 问题 :ip route show 只有 169.254.0.0/16,没有默认网关,ping 192.168.228.1 提示"网络不可达"。

  • 原因:系统没有识别到直连网络,也没有默认路由。

  • 解决方案(手工修复):

    bash

    复制代码
    # 1. 添加直连网络
    ip route add 192.168.228.0/24 dev ens33
    # 2. 添加默认网关
    ip route add default via 192.168.228.1
  • 永久固化 :确保 ifcfg-ens33 中 GATEWAY=正确的网关地址,重启 network 服务后自动生效。


场景六:防火墙阻挡(ping 不通,但 IP 已配好)
  • 问题:虚拟机 IP 配置正确,路由表正常,但物理机 ping 虚拟机超时或"无法访问目标主机"。

  • 原因 :虚拟机防火墙(firewalld)默认禁止 ICMP(ping)。

  • 解决方案:

    • 临时关闭防火墙测试:

      bash

      复制代码
      systemctl stop firewalld
    • 若通,则永久开放 SSH 和 ping:

      bash

      复制代码
      firewall-cmd --add-service=ssh --permanent
      firewall-cmd --add-rich-rule='rule protocol value=icmp accept' --permanent
      firewall-cmd --reload

场景七:更换 Wi-Fi 或重启后 IP 丢失
  • 问题:物理机换 Wi-Fi 后,虚拟机桥接 IP 无法自动适应。

  • 解决方案:

    • 若用 DHCP:换网后自动获取新 IP(但需确保 DHCP 服务正常)。

    • 若用静态 IP :必须手动修改 IPADDR 为新网段的地址,并更新 GATEWAY。

  • 根治 :使用静态 IP + 固定网段 (如家庭网络常用 192.168.1.x),或启用 NetworkManager 的自动重连功能。


🧠 最终推荐方案(最稳配置)

为了避免以后反复折腾,建议按以下方式固定:

  1. 网络模式 :桥接模式(绑定物理 Wi-Fi/有线网卡)。

  2. IP 获取 :静态 IP ,和物理机同网段(如 192.168.228.150)。

  3. 网络管理 :只用 network 服务 ,禁用 NetworkManager。

  4. 配置文件关键项 (ifcfg-ens33):

    ini

    复制代码
    TYPE=Ethernet
    BOOTPROTO=static
    NAME=ens33
    DEVICE=ens33
    ONBOOT=yes
    NM_CONTROLLED=no
    IPADDR=192.168.228.150
    NETMASK=255.255.255.0
    GATEWAY=192.168.228.1     # 与物理机一致
    DNS1=192.168.228.1
    DNS2=8.8.8.8
  5. 防火墙:开放 SSH 端口,如需 ping 则放行 ICMP。


🎯 一句话终极建议

用桥接模式 + 静态 IP + 禁用 NetworkManager + 配置好网关和路由,之后无论重启还是换 Wi-Fi,只要物理机在该网段,虚拟机就能稳定连接。

以后如果再遇到类似问题,按这个清单逐项排查即可。有需要随时再问我。

相关推荐
Decay__1 小时前
SQL Server 数据库全栈运维实战系列 — 合集索引(24 篇)
运维·数据库·sql·mysql·架构
Decay__9 小时前
12_MySQL InnoDB 内存与锁调优 —— Buffer Pool、redo log、隔离级别与锁等待
运维·数据库·sql·mysql·架构
java_logo12 小时前
Docker 部署 Dify:轻松搭建 LLM 应用开发平台
运维·docker·容器
方便面不加香菜13 小时前
Docker Container -- 综合实战案例详解
运维·docker·容器
海洋之恒14 小时前
GitHub Actions 自动化:5 个真实运维提效案例
运维·自动化·github
迪康coolmu15 小时前
出差终端数据安全落地实战:基于迪康端点安全一体化管理系统的四道防线实践
运维·服务器·经验分享·笔记·其他·安全·php
xiaoye-duck15 小时前
《C++ 项目:手写大模型接入 SDK》Ollama接口设计(上):初始化、全量响应实现和测试
开发语言·网络·c++·语言模型
qq_3718021117 小时前
Ubuntu Linux中安装WorkBuddy
linux·运维·服务器·ubuntu
无足鸟ICT17 小时前
【RHCA+】iptraf-ng(网络监控分析)
linux·网络