虚拟机网络配置问题——SkyForm 应用平台使用过程中的一次排障案例

在客户使用 SkyForm 应用平台的过程中,我们遇到过一个典型的虚拟化网络问题:
一台 Windows 虚拟机通过快照恢复后,用户发现该 VM 无法与集群中的 Linux 虚拟机互通,直接影响了作业提交与任务运行。

 

环境信息

  • Windows 虚拟机 IP 为 10.10.3.190,Linux 虚拟机为 10.10.3.61;
  • 两台机器看似在同一网段,但 ping 不通;
  • Windows VM 的网卡绑定在vmbr0,而 Linux VM 等其他节点绑定在 vmbr1;
  • Windows VM 使用的子网掩码是 /16,Linux VM 使用的是 /24。
     
问题原因分析
1、网桥绑定错误
  • 在 PVE(Proxmox VE)虚拟化环境中,虚拟机要在同一个二层网络中互通,必须接入相同的网桥(vmbr)。
  • Windows VM 快照恢复后仍绑定在 vmbr0,而 Linux VM 在 vmbr1,因此二者物理上不在同一广播域,无法通信。
     
2、子网掩码不一致
  • Linux VM:/24 → 10.10.3.0 – 10.10.3.255
  • Windows VM:/16 → 10.10.0.0 – 10.10.255.255
  • 掩码不一致时,会导致双方对“是否在同一子网”的判断不一致:
  1. 情况 1:地址重叠(如        10.10.3.190 vs 10.10.3.61) → 双方都认为对方在本地子网,可以互通。
  2. 情况 2:地址不重叠(如10.10.4.x vs 10.10.3.61) → Windows 认为在本地,Linux 认为跨网段,回包会走默认网关 → 不通。
 
3、FDB(转发表)缓存延迟
  • 即便把 Windows VM 改到 vmbr1,一开始仍然不通。
  • 这是因为:
  1. PVE 网桥 vmbr1 的 FDB(Forwarding Database)里还没学习到新的 MAC–端口映射,仍然认为该 VM 的 MAC 属于 vmbr0。
  2. Linux VM 10.10.3.61 的 ARP 缓存里也可能还留着旧的 MAC 映射。
  • 只有当 Windows 重新发 ARP 请求(或 FDB aging 超时,默认 300 秒),PVE 才更新映射,通信才能恢复。
     
解决方法
通过在pve及目标linux进行抓包tcpdump上来判断,发现pve FDB未更新
在技术支持人员的指导下,用户做了如下调整:
  • 将 Windows VM 网卡从 vmbr0 改为 vmbr1,与 Linux VM 接入同一桥接网络;
  • 将 Windows VM 的子网掩码改为 /24,与 Linux VM 保持一致;
  • 清理 ARP/FDB 缓存或等待刷新,确保映射正确更新。
     
    完成以上步骤后,虚拟机间的通信恢复正常,SkyForm平台上的作业提交流程也随之恢复。
     
关键点
  • Windows 已经接到 vmbr1,但 PVE 的转发表(FDB)可能还认为这个 MAC 在 vmbr0。
  • 结果:包被转发到错误的桥接口 → Linux 收不到。
  • 一旦触发新的 ARP/FDB 更新 → 正确映射 → 双向通信恢复。
     
总结
  • 发包:主机先判断目标是否在本地子网 → 决定直连还是发给网关。
  • 收包:目标主机根据自身掩码判断源地址是否同子网 → 决定是否直连回包。
  • 回包:通信能否成功取决于双方判断是否一致,并且 PVE 的 FDB 映射是否正确。
     

本案例再次证明,深入理解发包、收包、回包机制以及虚拟化平台的FDB缓存机制,是快速定位并解决网络问题的关键。

如在SkyForm应用平台使用过程中遇到问题,或有定制化需求,可通过联系我们的技术团队获取支持。

推荐阅读 

在线咨询 MESSAGE

姓名 *

电话 *

邮箱 *

咨询意向 *

公司名称

所属行业

需求概述 *