2015年11月15日 星期日

虛擬化系統的網路連線問題 (Network Connection Problems on Virtualized System)


近年來虛擬化大行其道,無論你是使用Virtualbox、VMWare或是Hyper-V......等,一方面可以做較為自由的資源調配,另一方面也能夠榨乾硬體應有的效能,所以漸漸地取代了許多現行的系統架構,無論是在測試、產品開發、甚至是初期的服務建置都能夠透過虛擬化系統來建置。

不過,在自行處理虛擬化系統時,大多都是透過虛擬化的軟體來實現,就會遇到一些平常不太會遇到的狀況,尤其是在複製VM時的網路設定上,這篇文章主要也是因為自己曾遇見過的類似的狀況,同時做個記錄,或許也能夠幫助到相同狀況的人。

一般常見的情境,都是在虛擬化系統中裝上Linux類型的相關系統,因此在系統偵測硬體架構的狀態下,都是透過原生的udev這個服務在進行,簡單說,它就像是你在Windows系統中接上什麼隨身碟時,會跳出來的通知一樣,他會先自動偵測這個硬體的類型,然後設定一些對應的設定及相關驅動,讓你可以馬上使用該硬體。

聽起來應該是件很不錯的事,但是在網路設定上就不一定是這麼單純的一件事,尤其是在你身處在有特定限制的網路環境當中時,更需要留意,不然就會遇到一種狀況,看起來網路是正常連線卻依舊無法正常對外連線,很多時候就是它所造成的。

因為在你透過虛擬化軟體製作出一台新的VM(Virtual Machine)時,這台VM的網路會得到一個新的MAC Address,如此一來,在同一個網路環境下,才可以正常的取得IP及運作,但是如果你因為某些需求,得直接複製某一台VM成為另一台VM時,虛擬化軟體還會提醒你是否要給你一組新的MAC Address,這也是為了避免衝突發生。

(以Virtualbox為例)

除非你確保這兩台VM不會同時運行,不然還是給他一組新的MAC Address還是比較保險,雖說如此應該可以解決問題,但是問題就會回到原本我們所討論的那個狀況,那就是當你更換了新的MAC Address後,複製的系統中其實應該還殘留著原有的硬體設定,這時就有可能會發生一種靈異現象。

原先網卡的名稱會自 eth0 變成 eth1,聽起來似乎很合理,因為我們已經更換過硬體的MAC Address,但是有可能你會發現,看起來 eth1 是正常連線的狀況下,但是卻無法對外連線,再去查DNS或是其它的設定似乎也都沒有設錯。

這時候可能又要擔心是否是系統在抓取硬體資訊時的錯誤了,最簡單的解決方式就是直接去查看當下系統所抓取的網路卡資訊是否與你目前所見相同,如果你看見有所不同的部分(應該會包括了先前原VM的相關資訊),

修改路徑:vim /etc/udev/rules.d/70-persistent-net.rules

(紅框內容即為原VM之相關資訊,可直接註解)

接著就只需要再將網路設定檔中的網路卡MAC Address,設定為現行網路卡的數值及更動網卡名稱即可。

修改路徑:vim /etc/sysconfig/network-scripts/ifcfg-eth0

(紅框內容即為需修改的部份)

PS:因為原網路卡為 eth0 所以設定檔名稱亦為同名,修改完後,亦可改為ifcfg-eth1以便後續管理。

最後,就只需要再重新啟動網路後,即可打完收工,接著你又可以繼續享用虛擬機的便利,希望可以幫助到也曾經遇到過此問題的所有苦命IT人(話說......我現在不是已經轉成PM了嗎?必要時還是得要幫忙處理!),同時也做個簡單的記錄。