服务器虚拟化的MAC地址分配

在全是物理机的环境中,我们不需要考虑MAC地址的问题,因为每个物理机的网卡都是真实,其MAC地址由网卡提供商来分配独一无二的MAC ADDRESS,所以在物理环境规范的情况下是不会出现MAC地址冲突的问题,除非有山寨。

先普及下MAC地址的相关知识,以下会用到。

MAC地址最开始由XEROR研究出来,后来由IEEE组织管理。IEEE会为每个厂商提供唯一的一个MAC地址前缀,称之为OUI(Organizationally Unique Identifier),用来区别不同的厂商,例如:aa-bb-cc-xx-xx-xx,其中aa-bb-cc就是OUI,每个厂商会根据自己的喜欢来编码剩下的24bit。

再来说下Universally administered和 locally administered addresses,前者是全局分配,后者有本地分配,比较随意。两者的区别在于,前者使用从IEEE分配到的OUI来分配MAC地址,而locally administered address则是有本地分配的地址。不受OUI的影响。但是两者不冲突,universally和locally在第一个第一个16位的倒数第二字节,如果是0,那么该MAC地址为universally,如果是1,则是locally地址。例如:06-00-00-00-00-00,06的二进制为00000110,倒数第二位是1,所以,该MAC地址为本地管理地址,而所有的OUI分配地址,该检测位都是0。如:xensource的OUI为:00-16-3E,00很明显,倒数第二位是0,所以这是一个universally地址。

讲了这么多,我们再来看看可能会遇到的问题。

在XenServer中,为VM自动分配的地址都是locally administered address,而Hyper-V和vSpher则是使用的universlly地址。

其中Hyper-v使用00-15-5D的OUI地址,接下来的两位会从Hyper-v主机的IPV4地址的后两位获得,如主机地址为192.168.10.20,那么解析来两位地址为0A-14,最后一位则是随机,也就是单台主机默认可以随机产生256个MAC地址,即192.168.10.20主机的默认MAC地址范围为从00-14-5D-0A-14-00到00-14-5D-0A-14-FF

再来说vShpere,同微软类似,也是使用分配给VMWare的OUI(00-50-56)开头,而后三段(24bit)则会由vCenter主机的instance ID来决定,至于如何生成,没找到文档,也不去深究了。由于vCenter会根据主机的Instance ID来决定后三段的生成方式,这就保证了在生成MAC地址时候避免冲突,而Instance ID是在安装vCenter的时候随机产生的,所以如果在同一个网络内,Instance ID一样的话,就会导致MAC地址冲突等问题,所以需要注意Instance ID的设置。

参考资料:

关于MAC地址的WIKIPEDIA解释:http://en.wikipedia.org/wiki/MAC_address

VMWARE修改Instance ID的KB:http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=1024025

Hyper-V MAC地址的一些说明和配置:http://blogs.technet.com/b/jhoward/archive/2008/07/15/hyper-v-mac-address-allocation-and-apparent-network-issues-mac-collisions-can-cause.aspx