虛擬機的MAC地址分配與修改



虛擬世界的MAC地址
html

先看一下真實世界的MAC地址是如何分配,如何保證沒有重複的。
每塊網卡都有一個MAC地址,MAC地址是一個6字節、也即48bit的數據。前3字節稱爲OUI ,是由IEEE組織註冊給網絡設備生產商的;每一個廠商擁有一個或多個OUI,彼此不一樣。後三字節則是由網絡設備生產商分配給本身生產的每個擁有MAC地址的設備,互不重複。
在VM的世界中,每一臺擁有虛擬NIC(網卡)的設備固然也擁有MAC地址。這虛擬網卡的MAC地址,固然也是按照規定,前三字節爲OUI,後三字節逐一分配給每一個設備。
因爲虛擬網卡的」製造商「是VMware,XenSource,微軟 等虛擬平臺軟件的生產商,OUI固然就分配給了他們。算法

 

VMware VM所使用的OUI

按照VMware ESX 3的[Server Configuration Guide ]的說法,VMware的使用下面的三個OUI做爲VM的MAC地址:服務器

  • 00:0C:29 – 用於自動生成的MAC地址
  • 00:50:56 – 用於手動設置的MAC地址
  • 00:05:69 – 曾經用於舊版本的VM(大約是在ESX 1.5的時代),在ESX 3中已經再也不使用

可是在實際應用上,我發現00:50:56這一MAC地址段並非徹底用於手動設置的MAC地址:網絡

  • 00:50:56:00:00:00 – 00:50:56:3F:FF:FF
    這一段MAC地址能夠用於手動設置的MAC地址
  • 00:50:56:40:00:00 – 00:50:56:FF:FF:FF
    這一段(個人推測,不必定準確),則是用於ESX 3上的自動生成的MAC地址(包括VM和Service Console)

 

MAC地址的生成

OUI有了,後三字節如何生成呢?要知道虛擬機是常常被建立和銷燬的,這一點不像實體PC。網卡生產商能夠計算每一年生產多少塊網卡,從而爲每塊網卡分配不一樣的MAC地址; VMware卻不可能計算出每一年有多少臺VM、有多少塊虛擬網卡被建立。ide

VMware ESX Server的算法是,使用散列算法,經過VM的UUID來生成MAC地址。VM的UUID是每一臺VM特有的、128bit的ID,是由ESX Server硬件SMBIOS的UUID、加上VM的路徑生成的。所以,一臺虛擬機的虛擬網卡的MAC地址就與下面四個因素有關:ui

  • VMware的OUI
  • Host (ESX Server)的SMBIOS中的UUID
  • VM在服務器上的路徑
  • 網卡的實體名 (Entity Name),用來確保同一VM上的不一樣網卡有不一樣的MAC地址

 

MAC地址衝突的檢測與解決

MAC地址一旦生成,就不會再有變化,除非上面所述的四項因素髮生改變(最可能發生的就是第三項,VM在服務器上的路徑改變)。
盡 管如此,因爲散列算法自己的特徵,仍是有萬一發生MAC地址衝突的可能(可能性極小,和年底ジャンボ中頭彩的概率差很少)。ESX Server會不斷跟蹤和檢測運行中和掛起(Suspend)的VM,以保證沒有MAC地址衝突。可是已經關閉電源的VM是不在檢查對象以內的。
所以,萬一一臺VM啓動時ESX檢測到MAC地址衝突,它會分配給VM的虛擬網卡一個新的MAC地址。因此從這個意義上說,VM的MAC地址是可能發生變化的——只是這個機率實在過小。spa

 

手動指定MAC地址

手 動指定MAC地址僅用於一些極其特殊的狀況,一般是進行P2V的時候。例如,某物理服務器上的軟件,其License已經與該服務器的MAC地址 綁定,若是MAC地址改變則軟件沒法運行;再如,某些底層網絡軟件以MAC地址來鑑別機器時,爲了避免作更改可以繼續使用,在P2V的時候也要手動指定 MAC地址。
打開一個VM的.vmx文件,能夠看到以下設置:(若是有多塊NIC的話,那麼就會有ethernet0、ethernet一、ethernet2……)htm

 

ethernet0.addressType = "generated"
ethernet0.generatedAddress = "00:0c:29:9b:fb:18"

這說明該NIC是自動生成的MAC地址。只需以下更改便可變爲手動分配的MAC地址:對象

ethernet0.addressType = "static"
ethernet0.address = "00:50:56:00:00:01"

其中的00:50:56:00:00:01就是手動指定的MAC地址。blog



[原文連接] http://zhuz5750.blog.51cto.com/184091/623532

相關文章
相關標籤/搜索