天天看點

vmware esx 虛拟機MAC 位址修改

轉自:http://www.51testing.com/?uid-124415-action-viewspace-itemid-132203

虛拟世界的MAC位址

先看一下真實世界的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、有多少塊虛拟網卡被建立。

VMware ESX Server的算法是,使用雜湊演算法,通過VM的UUID來生成MAC位址。VM的UUID是每一台VM特有的、128bit的ID,是由ESX Server硬體SMBIOS的UUID、加上VM的路徑生成的。是以,一台虛拟機的虛拟網卡的MAC位址就與下面四個因素有關:

  • 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位址是可能發生變化的——隻是這個機率實在太小。

手動指定MAC位址

手動指定MAC位址僅用于一些極其特殊的情況,通常是進行P2V的時候。例如,某實體伺服器上的軟體,其License已經與該伺服器的MAC位址 綁定,如果MAC位址改變則軟體無法運作;再如,某些底層網絡軟體以MAC位址來鑒别機器時,為了不做更改能夠繼續使用,在P2V的時候也要手動指定 MAC位址。

打開一個VM的.vmx檔案,可以看到如下設定:(如果有多塊NIC的話,那麼就會有ethernet0、ethernet1、ethernet2……)

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位址。

繼續閱讀