1. 程式人生 > >VMware 虛擬機修改MAC地址的方法

VMware 虛擬機修改MAC地址的方法

vmware mac 地址修改問題

VMware VM所使用的OUI

按照VMware ESX 3的[Server Configuration Guide ]的說法,VMware的使用下面的三個OUI作為VM的MAC地址:

  • 00:0C:29 – 用於自動生成的MAC地址

  • 00:50:56 – 用於手動設置的MAC地址

但是在實際應用上,我發現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

MAC地址的生成

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

VMware ESXI(5.1下測試)在新建虛擬機(windows或linux)時,網絡適配器MAC地址默認為“自動”,獲得的MAC地址根據ethernet0.addressType值的類型不同有兩種vmware保留mac地址組,分別為:

00:50:56:xx:xx:xx開頭和00:0c:29:xx:xx:xx開頭

當ethernet0.addressType = "static"(即網絡適配器MAC地址為“手動”)或在vcenter中新建的虛擬機ethernet0.addressType = "vpx"時,mac地址以00:50:56開頭,如需手動修改ESXI虛擬機MAC地址,可以修改後6位的地址,前6位無法修改,否則虛擬機無法啟動,報以下錯誤:

打開虛擬機 xxx 的電源時,會收到來自 ESX 主機的錯誤。
無法啟動虛擬機。
模塊 DevicePowerOn 打開電源失敗。
無法為 ethernet0 設置“macAddress”。
指定了無效的 MAC 地址。

00:0c:29:xx:xx:xx是允許的靜態以太網地址。它與 VMware 保留的 MAC 沖突

當ethernet0.addressType = "generated"時,mac地址以00:0c:29開頭,同上也可以修改後6位的地址。

註意:如果新建虛擬機MAC地址類型為generated,改為手動時會自動跳出00:50:56前6位開頭的MAC地址,此時也可以把前6位改掉,改為00:0c:29開頭,虛擬機一樣可以啟動,且mac地址類型會變為static。但在做遷移或升級時,系統會報錯。提示mac無效。

解決辦法:

一、修改虛擬機的*.vmx文件:

這種方法最值得推薦,因為這樣就類似於重新“燒錄”了VMware虛擬機的“物理網卡ROM”。方法是:

分兩種情況:

第一種:ethernet0.addressType="static"或"vpx"

ethernet0.Address="00:50:56:aa:bb:cc"

"static"說明VM的"物理網卡"的MAC是靜態設定或在vcenter生成的,你可以改成一個以00:50:56開頭的另外一個MAC即可。改完啟動VM時如果問你SSID的話,選擇“KeepAlways”。

如果想把00:50:56也改掉,可以參考第二種,把網絡適配器mac地址改為自動,修改ethernet0.addressType為"generated"、uuid.bios後6位、ethernet0.generatedAddress為00:0c:29:xx:xx:xx,後6位和uuid.bios後6位一致。(MAC地址的第4位在00~3F之間選取,第5與第6位可以在00~FF之間選取)

第二種:ethernet0.addressType="generated"

uuid.location="564ddcf1ffaa75ea-f1b9ee0d689c655c"

uuid.bios="564ded23138c9691-7c68b2098baabbcc"

ethernet0.generatedAddress="00:0c:29:aa:bb:cc"

"generated"說明VM的"物理網卡"的MAC是系統隨機動態設定的,你可以通過將uuid.bios後六位及ethernet0.generatedAddress後六位改成你想要改成的以000c29開頭的MAC即可。

註意:修改完虛擬機MAC地址後,為了確保虛擬網卡可正常工作。請確認虛擬機網卡所連接的"VM Network"虛擬機端口組和"vSwitch"端口的配置安全中將 MAC Address Changes(MAC地址更改) 和 Forged Transmit(偽傳輸)功能設置為"允許"。

網上其他方法要加上一行虛擬機關閉系統對網卡MAC地址檢查ethernet0.checkMACAddress = "false",經測試(自動)不加也可以,手動沒有測試。

二、修改虛擬機系統(Guest OS)的網卡的mac地址,根據不同的系統方法也不一樣:

linux:1、修改Linux系統裏相關/etc/sysconfig/network-scripts/ifcfg-eth0文件MAC值.

vi/etc/sysconfig/network-scripts/ifcfg-eth0

MACADDR=xx:xx:xx:xx:xx:xx

:wq保存退出

reboot

2、停止Linux網絡服務和將NIC狀態設置為"DOWN"

i. #service network stop

ii. #ifconfig eth0 down

iii. #ifconfig eth0 hw ether AB:CD:EF:12:34:56

iv. #ifconfig eth0 up

v. #service network stop

3、修改Linux系統裏相關rc.local文件MAC值.

Windows:

i. 打開設備管理器,點擊 開始 > 控制面板 > 管理工具 > 計算機管理 > 設備管理器

ii. 展開網絡適配器,右擊 VMware Accelerated AMD PCNet Adapter. 點擊 屬性.

iii. 點擊 "高級"標簽

iv. 點擊 NetworkAddress.

v. 選擇 "值"

vi. 輸入新的MAC地址,不需要":"隔開

vii. 重新啟動虛擬機,應用新的MAC地址


VMware 虛擬機修改MAC地址的方法