由于虚拟机具有 vCenter Server 生成的重复 MAC 地址,因此您会遇到数据包和连接丢失的情况。

问题

同一广播域或 IP 子网中虚拟机的 MAC 地址存在冲突,或者 vCenter Server 为新创建的虚拟机生成重复的 MAC 地址。

某台虚拟机可以打开电源并正常工作,但与另一台虚拟机共享一个 MAC 地址。这种情况可能会导致数据包丢失及其他问题。

原因

虚拟机可能由于多种原因而具有重复的 MAC 地址。

  • 具有相同 ID 的两个 vCenter Server 实例为虚拟机网络适配器生成重叠的 MAC 地址。

    每个 vCenter Server 实例都具有一个在安装时随机生成的介于 0 和 63 之间的 ID,安装完成后可以重新配置此 ID。vCenter Server 使用实例 ID 为虚拟机的网络适配器生成 MAC 地址。

  • 某台虚拟机已在关闭电源状态下从同一网络中的一个 vCenter Server 实例传输到另一个实例(例如,通过使用共享存储),并且第一个 vCenter Server 上的新虚拟机网络适配器收到释放的 MAC 地址。

解决方案

  • 手动更改虚拟机网络适配器的 MAC 地址。
    如果您的现有虚拟机具有冲突的 MAC 地址,则必须在 虚拟硬件设置中提供一个唯一的 MAC 地址。
    • 关闭虚拟机的电源,将适配器配置为使用手动型 MAC 地址,然后键入新地址。
    • 如果无法关闭虚拟机的电源以便进行配置,请重新创建一个与已启用的手动型 MAC 地址分配冲突的网络适配器,然后键入新地址。在客户机操作系统中,将重新添加的适配器的静态 IP 地址设置为与以前相同。

    有关配置虚拟机网络适配器的信息,请参见vSphere 网络连接vSphere 虚拟机管理文档。

  • 如果 vCenter Server 实例根据默认分配 VMware OUI 生成虚拟机的 MAC 地址,则请更改 vCenter Server 实例 ID 或使用其他分配方法以解决冲突。
    注: 更改 vCenter Server 实例 ID 或切换到其他分配方案不会解决现有虚拟机中的 MAC 地址冲突问题。根据新方案,只有更改后创建的虚拟机或添加的网络适配器能收到地址。

    有关 MAC 地址分配方案和设置的信息,请参见vSphere 网络连接文档。

    解决方案 描述
    更改 vCenter Server ID

    如果您的部署中包含少量 vCenter Server 实例,则可以继续使用 VMware OUI 分配方案。根据此方案,MAC 地址将具有以下格式:

    00:50:56:XX:YY:ZZ

    其中 00:50:56 表示 VMware OUI,XX 的计算方式为 (80 + vCenter Server ID),YY:ZZ 是一个随机数。

    要更改 vCenter Server 的 ID,请配置 vCenter Server 实例的常规设置的运行时设置部分中的 vCenter Server 的唯一 ID 选项,然后重新启动 vCenter Server。

    VMware OUI 分配最多支持 64 个 vCenter Server 实例,适用于小规模部署。

    切换到基于前缀的分配

    可以使用自定义 OUI。例如,对于 02:12:34 本地管理的地址范围,MAC 地址的格式将为 02:12:34:XX:YY:ZZ。可以使用第四个八位字节 XXvCenter Server 实例之间分发 OUI 地址空间。此结构将导致生成 255 个地址集群,其中每个集群由一个 vCenter Server 实例管理,并导致每个 vCenter Server 大约有 65000 个 MAC 地址。例如,02:12:34:01:YY:ZZ 与 vCenter Server A 相对应,02:12:34:02:YY:ZZ 与 vCenter Server B 相对应,依此类推。

    基于前缀的分配适用于较大规模的部署。

    对于全局唯一 MAC 地址,OUI 必须在 IEEE 中注册。

    1. 配置 MAC 地址分配。
    2. 虚拟硬件设置中的现有虚拟机应用新 MAC 地址分配方案。
      • 关闭虚拟机的电源,将适配器配置为使用手动型 MAC 地址,恢复为自动型 MAC 地址分配,然后打开虚拟机的电源。
      • 如果虚拟机处于生产模式,您无法关闭其电源以便进行配置,请在更改 vCenter Server ID 或地址分配方案后,重新创建与已启用的自动型 MAC 地址分配冲突的网络适配器。在客户机操作系统中,将重新添加的适配器的静态 IP 地址设置为与以前相同。
  • vCenter Server 实例之间传输虚拟机时,使用数据存储中的虚拟机文件强制重新生成 MAC 地址。
    1. 关闭虚拟机的电源,将其从清单中移除,然后在其配置文件 (.vmx) 中将 ethernetX.addressType 参数设置为 generated
      ethernet 旁边的 X 表示虚拟机中虚拟网卡的序列号。
    2. 通过将数据存储中的虚拟机注册到目标 vCenter Server,将虚拟机从一个 vCenter Server 系统导入到另一个系统中。
      虚拟机文件可以驻留在两个 vCenter Server 实例之间共享的数据存储中,或者可以上载到只能从目标 vCenter Server 系统访问的数据存储中。

      有关注册数据存储中的虚拟机的信息,请参见《vSphere 虚拟机管理》。

    3. 首次打开虚拟机的电源。
      虚拟机启动过程中, vSphere Web Client 中的虚拟机上将显示一个信息图标。
    4. 右键单击虚拟机,然后选择客户机操作系统 > 回答问题
    5. 选择我已复制选项。
    目标 vCenter Server 将重新生成虚拟机的 MAC 地址。新 MAC 地址将以 VMware OUI 00:0c:29 开头,并基于虚拟机的 BIOS UUID。虚拟机的 BIOS UUID 根据主机的 BIOS UUID 计算而得。
  • 如果 vCenter Server 和主机的版本为 6.0 或更高版本,并且 vCenter Server 实例在增强链接模式下连接,请使用 vMotion 在 vCenter Server 系统之间迁移虚拟机。
    vCenter Server 系统之间迁移虚拟机时,源 vCenter Server 会将虚拟机的 MAC 地址添加到拒绝列表,但不将其分配给其他虚拟机。