KVM虛擬機MAC地址衝突,引發服務器對xshell說:Go away!

開場白

最近在機房的服務器上裝kvm虛擬主機。
不經意間,上演了一場由MAC地址異常而引發的服務器與xshell之間的血案!

問題描述

在一臺服務器上裝了兩個虛擬機,其中一臺是從另一臺上克隆的。克隆的虛擬機開機之後,發現ssh不能遠程連接:
KVM虛擬機MAC地址衝突,引發服務器對xshell說:Go away!

然後在虛擬機管理界面本地去連接上服務器排查:
KVM虛擬機MAC地址衝突,引發服務器對xshell說:Go away!

查看IP地址,想確認xshell是不是連錯了IP,找錯了對象,卻發現ifconfig居然查看不到IP??
圖:
KVM虛擬機MAC地址衝突,引發服務器對xshell說:Go away!

查看network的啓動狀態,看到的是綠油油的active狀態。
然後又查看配置文件/etc/sysconfig/network-scripts/ifcfg-eth0 ,檢查IP。
配置明明是正確的啊,咋看不到IP呢?
KVM虛擬機MAC地址衝突,引發服務器對xshell說:Go away!

查看/var/log/messages日誌,發現有下面這樣的報錯信息,提示MAC地址有異常:

Jun 24 22:21:05 devops02 network: Shutting down interface eth0:  ERROR    : [/etc/sysconfig/network-scripts/ifdown-eth] Device  has MAC address 00:00:00:00:00:00
Jun 24 22:21:05 devops02 network: 52:54:00:72:E3:FB, instead of configured address 52:54:00:32:43:34. Ignoring.
Jun 24 22:21:05 devops02 /etc/sysconfig/network-scripts/ifdown-eth: Device  has MAC address 00:00:00:00:00:00
52:54:00:72:E3:FB, instead of configured address 52:54:00:32:43:34. Ignoring.
Jun 24 22:21:05 devops02 network: [FAILED]

KVM虛擬機MAC地址衝突,引發服務器對xshell說:Go away!

問題排查

根據上面的報錯信息,開始了排查的長征!
日誌提示MAC地址異常,查看ifcfg-eht0配置的MAC地址是HWADDR=52:54:00:32:43:34
KVM虛擬機MAC地址衝突,引發服務器對xshell說:Go away!

然鵝,ifconfig顯示出來的MAC地址卻是52:54:00:72:e3:fb
圖:
KVM虛擬機MAC地址衝突,引發服務器對xshell說:Go away!

原來,是兩邊的MAC地址不一樣,引起的問題!

原因分析

爲什麼會導致一臺主機上有兩個MAC地址?
原因是在KVM的界面克隆虛擬機的時候,有一個設置mac地址的“Random MAC address”按鈕:
KVM虛擬機MAC地址衝突,引發服務器對xshell說:Go away!

克隆主機的時候,因爲害怕克隆主機和原始主機的mac地址產生衝突,所以在克隆的時候點了“Random MAC address”按鈕,就隨機生成了一個新的MAC地址52:54:00:72:e3:fb

這個MAC地址就是後面在ifconfig裏面看到的那個mac地址52:54:00:72:e3:fb

而在克隆界面的旁邊還有一個XML配置界面,裏面也有一個MAC地址的配置:
KVM虛擬機MAC地址衝突,引發服務器對xshell說:Go away!

XML界面的MAC地址<mac address='52:54:00:32:43:34'/>就是後面寫入到配置文件ifcfg-eth0的MAC地址:52:54:00:32:43:34

這就導致ifconfig和ifcfg-eth0兩邊的MAC地址不一致了。

另外:

測試了一下,即使在前面點了“Random MAC address”按鈕,生成新的mac地址,再把新的MAC地址修改到後面的XML文件,然後再點擊克隆主機。新克隆的主機ifcfg-eth0文件裏面的MAC地址還是以前的52:54:00:32:43:34,跟ifconfig的MAC地址也是不一樣。還是要手動改配置文件。

在這之前也有在KVM上克隆了十幾臺服務器,但是以前都習慣於在剛剛克隆好主機之後,第一步就是刪掉配置文件ifcfg-eth0文件裏面的MAC地址和UUID地址,而恰好之前的原始主機配置文件ifcfg-eth0文件裏面又配置了DEVICE(關於DEVICE見後文),所以刪掉配置文件的MAC地址之後,網卡就順利起來了,並沒有注意到克隆主機MAC地址不一致的問題。

解決方法

這個問題有兩種解決方法:
1、修改配置文件ifcfg-eth0的MAC地址,改成和ifconfig一樣的。然後再重啓network:
KVM虛擬機MAC地址衝突,引發服務器對xshell說:Go away!

2、刪掉ifcfg-eth0裏面的“HWADDR=52:54:00:32:43:34”這一行,重新添加一行“DEVICE=eth0”,然後重啓network:
KVM虛擬機MAC地址衝突,引發服務器對xshell說:Go away!

注意:
刪了MAC地址之後,一定要確認配置文件上有DEVICE配置,否則啓動network的時候,messages日誌裏面會有這樣的報錯:

Jun 24 22:24:40 devops02 network: Shutting down interface eth0:  ERROR    : [ipv6_test_device_status] Missing parameter 'device' (arg 1)
Jun 24 22:24:40 devops02 ipv6_test_device_status: Missing parameter 'device' (arg 1)

KVM虛擬機MAC地址衝突,引發服務器對xshell說:Go away!

上面兩種解決方法都嘗試過了,重啓network,再查看IP地址,就顯示正常了:
KVM虛擬機MAC地址衝突,引發服務器對xshell說:Go away!

xshell再次遠程連接已經OK:
KVM虛擬機MAC地址衝突,引發服務器對xshell說:Go away!

結束語:

回顧上面的問題,小小總結:

1、ifconfig的MAC地址和ifcfg-eth0的MAC地址一定要相同;

2、如果在ifcfg-eth0裏面刪除了MAC地址,就要保證有DEVICE配置,因爲 DEVICE 和 HWADDR至少得有一個;

3、“/var/log/messages”文件和Google是個好東西;

4、多踩坑,就會避免這種low low的尷尬。

解決問題參考:
https://bugzilla.redhat.com/show_bug.cgi?id=1331276
KVM虛擬機MAC地址衝突,引發服務器對xshell說:Go away!

https://www.linuxquestions.org/questions/linux-newbie-8/etc-init-d-network-restart-failed-4175559158/
KVM虛擬機MAC地址衝突,引發服務器對xshell說:Go away!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章