为虚拟网卡设置静态 MAC 地址
search cancel

为虚拟网卡设置静态 MAC 地址

book

Article ID: 344056

calendar_today

Updated On:

Products

VMware vSphere ESXi

Issue/Introduction


Symptoms:

免责声明: 本文为 Setting a static MAC address for a virtual NIC (219) 的翻译版本。 尽管我们会不断努力为本文提供最佳翻译版本,但本地化的内容可能会过时。 有关最新内容,请参见英文版本。



我的某个虚拟机上出现 MAC 地址冲突,或者我需要手动为某个虚拟网络适配器设置 MAC 地址。 为什么要执行此操作?如何执行?

注意: 本文中详细介绍的流程适用于 ESX 2.5 及更低版本。 有关在更高版本中生成 MAC 地址的信息,请参见:



Environment

VMware vSphere ESXi 6.0
VMware ESXi 3.5.x Embedded
VMware vSphere ESXi 5.5
VMware vSphere ESXi 5.0
VMware ESX 4.0.x
VMware ESXi 4.0.x Installable
VMware ESX Server 2.0.x
VMware ESX Server 1.5.x
VMware ESXi 4.1.x Embedded
VMware ESX Server 2.5.x
VMware ESXi 4.0.x Embedded
VMware ESXi 4.1.x Installable
VMware ESX 4.1.x
VMware ESX Server 1.x
VMware ESX Server 2.1.x
VMware ESXi 3.5.x Installable
VMware vSphere ESXi 5.1

Resolution

注意: 此信息仅适用于 ESX 2.5 及更低版本</u>,不适用于 ESX 3.0 及更高版本</u>。 有关更高版本中 MAC 地址管理的信息,请参见您所使用的 ESXi/ESX 版本的相关文档。

VMware ESX 2.5 及更低版本中的 MAC 地址管理

VMware ESX Server 自动为每个虚拟机中的虚拟网络适配器生成 MAC 地址。 大多数情况下,这些 MAC 地址均为适当地址。 但是,有时可能需要您手动设置虚拟网络适配器的 MAC 地址。 例如:

  • 您在一个物理服务器上具有超过 256 个虚拟网络适配器。
  • 不同物理服务器上的虚拟网络适配器共享同一个子网并且分配了同一个 MAC 地址,从而导致出现冲突。
  • 您希望确保虚拟网络适配器的 MAC 地址始终相同。
本文档介绍 VMware ESX Server 如何生成 MAC 地址以及如何手动为虚拟网络适配器设置 MAC 地址。


VMware ESX Server 如何生成 MAC 地址

虚拟机中的每个虚拟网络适配器都会获得一个唯一的 MAC 地址。 ESX Server 会尝试确保同一个子网上每个虚拟机的网络适配器都具有唯一 MAC 地址。 ESX Server 使用的算法限制了在给定虚拟机上可以同时运行和挂起的虚拟机数量。 当不同物理机上的虚拟机共享同一个子网时,该算法也不会处理所有地址。

MAC 地址是一个 6 字节的数字。 每个网络适配器制造商都会获取一个名为 OUI 的唯一 3 字节前缀 - 构成唯一标识符 - 可用于生成唯一 MAC 地址。 VMware 有两个 OUI,一个用于自动生成 MAC 地址,另一个用于手动设置地址。

用于自动生成 MAC 地址的 VMware OUI 为 00:0C:29。 因此,为每个虚拟网络适配器自动生成的 MAC 地址的前三个字节包含此值。 然后,ESX Server 使用 MAC 地址生成算法生成其他三个字节。 该算法可保证 MAC 地址在计算机中是唯一的,并尝试在 ESX Server 计算机之间提供唯一的 MAC 地址。

ESX Server 使用的算法如下:

当该算法生成 MAC 地址的最后 24 位时,前 16 位将设置为与控制台操作系统的主 IP 地址的最后 16 位相同的值。

MAC 地址的最后 8 位将基于虚拟机配置文件的名称设置为一个哈希值。

ESX Server 将跟踪所有 MAC 地址,这些地址已分配到给定物理机上正在运行和挂起的虚拟机的网络适配器上。 ESX Server 确保所有这些虚拟机的虚拟网络适配器均具有唯一的 MAC 地址。

系统不会记住已关闭电源的虚拟机的 MAC 地址。 因此,再次打开虚拟机电源时,可以获取另一个不同的 MAC 地址。

例如,如果计算机的 IP 地址为 192.34.14.81(或者用十六进制表示为 0xc0220e51)并且配置文件的哈希值为 95,则 MAC 地址会包含以下值:

00:0C:29:0e:51:95
由于 ESX Server 计算机上的每个 MAC 地址只能在 8 位范围内变化,因此限制了每个 ESX Server 计算机最多只能包含 256 个唯一 MAC 地址, 从而将所有处于打开电源和挂起状态的虚拟机中虚拟网络适配器的总数限制为 256。 若要消除此限制,请参阅下一节“手动设置 MAC 地址”中所介绍的方法。

注意: 尝试将控制台操作系统的部分 IP 地址用作 MAC 地址的一部分可生成在不同 ESX Server 计算机中均唯一的 MAC 地址。 但是,无法保证具有物理网络适配器(共享同一个子网)的不同 ESX 计算机始终生成互相排斥的 MAC 地址。


手动设置 MAC 地址

要临时解决每个物理机中 256 个虚拟网络适配器限制的问题以及虚拟机之间可能出现的 MAC 地址冲突问题,系统管理员可以手动分配 MAC 地址。 VMware 针对手动生成的地址使用另一个 OUI: 00:50:56。 要设置地址,请在文本编辑器中打开虚拟机配置文件 (.vmx)。

注意: 默认位置为 /vmfs/volumes/<datastore_name>/<vm_name>/<vm_name>.vmx

将以下两行添加到虚拟机的配置文件中:
ethernet0.addressType = "static"
ethernet0.address = 00:50:56:XX:YY:ZZ

其中 XX 是介于 00 和 3F 之间的有效十六进制数字,YYZZ 是介于 00 和 FF 之间的有效十六进制数字。 为了避免与 VMware Workstation 和 VMware GSX Server 产品生成的 MAC 地址冲突,XX 的值不得大于 3F。 因此,手动生成的 MAC 地址的最大值为:

ethernet0.address = 00:50:56:3F:FF:FF

VMware ESX Server 虚拟机不支持任意 MAC 地址,因此必须使用上述格式。 只要您选择的值是硬编码地址中唯一的十六进制值,自动分配的 MAC 地址与手动分配的 MAC 地址之间永远不会出现冲突。


Additional Information

Setting a static MAC address for a virtual NIC