注冊端口 | Mac地址 |
---|---|
P1 | Mac1 |
P2 | Mac2 |
… | … |
那么交換機是如何注冊Mac地址的呢?或者說,從哪里可以看到一個虛擬機的一個網卡注冊了哪個Mac呢?
請看“虛擬機->設置->網絡”:
每激活一塊網卡,展開下面的Advanced就是該網卡的注冊Mac地址。
上面的實驗不通的原因現在很明確了。H1 ping H2時,經由Linux Bridge,ARP請求可以廣播到H2,此時H2收到的ARP廣播中,源MAC自然是H1的MAC地址,當H2回復ARP Reply時,目標MAC為H1的MAC地址,而H1的MAC地址沒有注冊在intnet2的虛擬交換機中,所以intnet2的交換機不會轉發這個幀。 所以自然就不通咯!
好了,接下來,我來打通其任督二脈,讓它通!是演示How的時候了。
只需要三步:
我來分別演示具體如何做。
我們看到網卡配置界面貌似沒有指定MAC地址的選項,只有一個隨機生成MAC的按鈕:
怎么辦?
用命令行??!
我們使用VBoxManage命令指定特定網卡的MAC地址,如下所示:
zhaoyadeMacBook-Pro:~ $ VBoxManage modifyvm "ubuntu new" --macaddress4 0800279ff0e6 zhaoyadeMacBook-Pro:~ $ VBoxManage modifyvm "ubuntu new" --macaddress3 080027bb3d67
以上的 0800279ff0e6 是H1 enp0s9的MAC地址,而 080027bb3d67 則是H2 enp0s9的MAC地址,從它們的網絡配置界面可以看到:
OK,現在啟動Linux Bridge機器,完成第三步,之所以需要這一步,是防止地址沖突導致Bridge的轉發表中毒:
懵圈了不是?所以必須把Linux Bridge的enp0s9,enp0s10這兩個網卡的MAC改成別的,而這個修改動作VirtualBox的Internal Network交換機并不知道(只有新的網卡激活或者重新注冊新的MAC會改變轉發表,即點擊那個小按鈕或者執行VBoxManage命令改變MAC地址),所以并不影響其轉發表。
好了,讓我們行動:
ifconfig enp0s9 hw ether 08:00:27:bb:3d:68 ifconfig enp0s10 hw ether 08:00:27:9f:f0:e7
OK,所有步驟做完,讓我們測試:
brctl addbr br0; brctl addif br0 enp0s9; brctl addif br0 enp0s10; ifconfig br0 up;
再次ping一下?
這不就通了嘛…
事實上,HostOnly模式的橋接與Intenal Network類似,也有這樣的問題,也是一樣的解決方法。
我不知道這個無法橋接兩個網絡的問題是VirtualBox有意為之還是說它真的是一個實現上的缺陷,但我是真的在實際工作當中遇到了這個需求,所以在我個人看來,它就是缺陷!這一點明顯不如VMWare的LAN Segment。
又或者說,VirtualBox僅僅在Mac OS上有這個問題?在Windows上好好的?也說不準,離開Windows平臺已經快兩年了。
這個問題解決了快一天。
一開始,我覺得是我的brctl配置問題,這么顯然的一個操作,咋就不通呢…百思不得其解,我是使用HostOnly做實驗的,后來通過抓包發現,H1的返回包直接返回到了Mac OS宿主機的vboxnet1網卡上的,而vboxnet1并沒有向Linux Bridge轉發這個包,先是懷疑是VirtualBox的一個BUG,重啟系統無果后,我大致就猜出什么意思了。至于說什么 “注冊型交換機” 這種詞,都是我瞎猜自造的,不管怎么說,八九不離十吧,并且我顯然跟隨這問題解決了它。
好久沒有遭遇這類問題了,不過我還是比較喜歡并且善于解這種疑難雜癥的,個人不是很擅長寫常規知識的教程,但對于這種平時大家不怎么遇到的怪問題,我這里自有妙藥。
在找到答案之前,我也Google了很久,查找VirtualBox上對應LAN Segment的東西,并且查找Internal Network和LAN Segment的區別,我甚至想找一個Mac OS上的Virtual Switch來用,自己營造一個虛擬并真實的以太網…如果真的找不到,那就只能DIY一個了。
還好,在這個及其不切實際的大場面上動干戈之前,我突然想到了本文所述的解決問題的方法,謝天謝地~
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。