Linux中bridge如何橋接兩個(gè)VirtualBox虛擬網(wǎng)絡(luò)-創(chuàng)新互聯(lián)

這篇文章將為大家詳細(xì)講解有關(guān)Linux中bridge如何橋接兩個(gè)VirtualBox虛擬網(wǎng)絡(luò),小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

創(chuàng)新互聯(lián)主營(yíng)彰武網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,成都app軟件開(kāi)發(fā)公司,彰武h5微信平臺(tái)小程序開(kāi)發(fā)搭建,彰武網(wǎng)站營(yíng)銷推廣歡迎彰武等地區(qū)企業(yè)咨詢

先是磁盤(pán)空間不夠用,配發(fā)的電腦僅僅剩余12G的空間,不能外接硬盤(pán),暫時(shí)也不能上傳備份,相當(dāng)于一臺(tái)離線的機(jī)器吧。我卻要完整編譯一個(gè)4.19版本的Linux內(nèi)核…于是沒(méi)日沒(méi)夜的,我開(kāi)始人肉壓縮再釋放的操作,不得開(kāi)心顏。最終我還是搞定了問(wèn)題,不過(guò)這個(gè)磁盤(pán)空間問(wèn)題解決得不算優(yōu)雅,至少它無(wú)法讓人覺(jué)得我在炫技。

和針對(duì)磁盤(pán)空間的抱怨相比,下面的問(wèn)題就有點(diǎn)意思了。

使用虛擬機(jī)搭建網(wǎng)絡(luò)測(cè)試環(huán)境總是會(huì)遇到各種奇葩的問(wèn)題,這往往是各種虛擬機(jī)平臺(tái)的缺陷所致。(也許我理解狹隘,但在我看來(lái)阻礙工作的機(jī)制就是缺陷)

虛擬網(wǎng)絡(luò)畢竟不是真實(shí)的,網(wǎng)絡(luò)技術(shù)發(fā)展40余年,一個(gè)軟件想通過(guò)覆蓋全面的測(cè)試幾乎是不可能的,設(shè)計(jì)考慮不周全也是正常現(xiàn)象。

比方說(shuō)用VirtualBox虛擬機(jī)搭建滿足如下需求的測(cè)試環(huán)境:

我需要一臺(tái)Linux主機(jī)作為網(wǎng)橋橋接兩個(gè)網(wǎng)絡(luò)。(我需要中間設(shè)置些規(guī)則又不想走路由)

Linux中bridge如何橋接兩個(gè)VirtualBox虛擬網(wǎng)絡(luò)

很簡(jiǎn)單是不是?你試過(guò)嗎?

想法非常直接且簡(jiǎn)單。類似VMWare的Lan Segment,VirtualBox有一種虛擬網(wǎng)絡(luò)叫做Internal Network,說(shuō)白了就是幫你摸你一個(gè)內(nèi)部的私有網(wǎng)絡(luò)。

主機(jī)B作為Bridge,網(wǎng)卡配置如下:

Linux中bridge如何橋接兩個(gè)VirtualBox虛擬網(wǎng)絡(luò)

作為Bridge橋接兩個(gè)網(wǎng)絡(luò)的兩臺(tái)主機(jī),Linux系統(tǒng)做如下配置:

brctl addbr br0;
brctl addif br0 enp0s9;
brctl addif br0 enp0s10;
ifconfig br0 up;

主機(jī)H1的enp0s9設(shè)置為Internal模式,接入intnet:

Linux中bridge如何橋接兩個(gè)VirtualBox虛擬網(wǎng)絡(luò)

H1的Linux系統(tǒng)配置如下:

ifconfig enp0s9 40.40.40.201/24

主機(jī)H2的enp0s9設(shè)置為Internel模式,接入intnet2:

Linux中bridge如何橋接兩個(gè)VirtualBox虛擬網(wǎng)絡(luò)

H2的Linux系統(tǒng)配置如下:

ifconfig enp0s9 40.40.40.100/24

你覺(jué)得H1和H2互相ping對(duì)方的地址,能通嗎?

試過(guò)就知道,不行!

迄至2019年11月8日,6.0.14是最新的了:

Linux中bridge如何橋接兩個(gè)VirtualBox虛擬網(wǎng)絡(luò)

是的,不行!

我先解釋W(xué)hy,再來(lái)演示How。

那么,Why?

和VMWare的LAN Segment內(nèi)部有一個(gè) 虛擬學(xué)習(xí)型交換機(jī)(早期是廣播式Hub) 不同, VirtualBox的Internal Network內(nèi)部的交換機(jī)不是學(xué)習(xí)型的,而是注冊(cè)型的!

所謂的注冊(cè)型交換機(jī)就是,只有注冊(cè)過(guò)的Mac地址,該交換機(jī)才會(huì)幫你轉(zhuǎn)發(fā)!這類交換機(jī)只有兩種轉(zhuǎn)發(fā)策略:

對(duì)于廣播幀,所有的端口都發(fā)一份。對(duì)于單播幀,僅向注冊(cè)該目標(biāo)Mac地址的端口發(fā)送。

很顯然,猜測(cè)其內(nèi)部是有一張表的:

注冊(cè)端口Mac地址
P1Mac1
P2Mac2

那么交換機(jī)是如何注冊(cè)Mac地址的呢?或者說(shuō),從哪里可以看到一個(gè)虛擬機(jī)的一個(gè)網(wǎng)卡注冊(cè)了哪個(gè)Mac呢?

請(qǐng)看“虛擬機(jī)->設(shè)置->網(wǎng)絡(luò)”:

Linux中bridge如何橋接兩個(gè)VirtualBox虛擬網(wǎng)絡(luò)

每激活一塊網(wǎng)卡,展開(kāi)下面的Advanced就是該網(wǎng)卡的注冊(cè)Mac地址。

上面的實(shí)驗(yàn)不通的原因現(xiàn)在很明確了。H1 ping H2時(shí),經(jīng)由Linux Bridge,ARP請(qǐng)求可以廣播到H2,此時(shí)H2收到的ARP廣播中,源MAC自然是H1的MAC地址,當(dāng)H2回復(fù)ARP Reply時(shí),目標(biāo)MAC為H1的MAC地址,而H1的MAC地址沒(méi)有注冊(cè)在intnet2的虛擬交換機(jī)中,所以intnet2的交換機(jī)不會(huì)轉(zhuǎn)發(fā)這個(gè)幀。 所以自然就不通咯!

好了,接下來(lái),我來(lái)打通其任督二脈,讓它通!是演示How的時(shí)候了。

只需要三步:

  • 將intnet上H1的MAC地址注冊(cè)在Linux Bridge的intnet2網(wǎng)卡enp0s10。

  • 將intnet2上H2的MAC地址注冊(cè)在Linux Bridge的intnet網(wǎng)卡enp0s9。

  • Linux Bridge主機(jī)起來(lái)后,通過(guò)ifconfig命令將其enp0s9,enp0s10網(wǎng)卡的MAC改成別的。

Linux中bridge如何橋接兩個(gè)VirtualBox虛擬網(wǎng)絡(luò)

我來(lái)分別演示具體如何做。

我們看到網(wǎng)卡配置界面貌似沒(méi)有指定MAC地址的選項(xiàng),只有一個(gè)隨機(jī)生成MAC的按鈕:

Linux中bridge如何橋接兩個(gè)VirtualBox虛擬網(wǎng)絡(luò)

怎么辦?

用命令行?。?/strong>

我們使用VBoxManage命令指定特定網(wǎng)卡的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地址,從它們的網(wǎng)絡(luò)配置界面可以看到:

Linux中bridge如何橋接兩個(gè)VirtualBox虛擬網(wǎng)絡(luò)

OK,現(xiàn)在啟動(dòng)Linux Bridge機(jī)器,完成第三步,之所以需要這一步,是防止地址沖突導(dǎo)致Bridge的轉(zhuǎn)發(fā)表中毒:

  • 0800279ff0e6可以從H1的intnet學(xué)習(xí)到。

  • 0800279ff0e6被配置在自己的enp0s10上。

懵圈了不是?所以必須把Linux Bridge的enp0s9,enp0s10這兩個(gè)網(wǎng)卡的MAC改成別的,而這個(gè)修改動(dòng)作VirtualBox的Internal Network交換機(jī)并不知道(只有新的網(wǎng)卡激活或者重新注冊(cè)新的MAC會(huì)改變轉(zhuǎn)發(fā)表,即點(diǎn)擊那個(gè)小按鈕或者執(zhí)行VBoxManage命令改變MAC地址),所以并不影響其轉(zhuǎn)發(fā)表。

好了,讓我們行動(dòng):

ifconfig enp0s9 hw ether 08:00:27:bb:3d:68
ifconfig enp0s10 hw ether 08:00:27:9f:f0:e7

OK,所有步驟做完,讓我們測(cè)試:

brctl addbr br0;
brctl addif br0 enp0s9;
brctl addif br0 enp0s10;
ifconfig br0 up;

再次ping一下?

Linux中bridge如何橋接兩個(gè)VirtualBox虛擬網(wǎng)絡(luò)

這不就通了嘛…

事實(shí)上,HostOnly模式的橋接與Intenal Network類似,也有這樣的問(wèn)題,也是一樣的解決方法。

我不知道這個(gè)無(wú)法橋接兩個(gè)網(wǎng)絡(luò)的問(wèn)題是VirtualBox有意為之還是說(shuō)它真的是一個(gè)實(shí)現(xiàn)上的缺陷,但我是真的在實(shí)際工作當(dāng)中遇到了這個(gè)需求,所以在我個(gè)人看來(lái),它就是缺陷!這一點(diǎn)明顯不如VMWare的LAN Segment。

又或者說(shuō),VirtualBox僅僅在Mac OS上有這個(gè)問(wèn)題?在Windows上好好的?也說(shuō)不準(zhǔn),離開(kāi)Windows平臺(tái)已經(jīng)快兩年了。

這個(gè)問(wèn)題解決了快一天。

一開(kāi)始,我覺(jué)得是我的brctl配置問(wèn)題,這么顯然的一個(gè)操作,咋就不通呢…百思不得其解,我是使用HostOnly做實(shí)驗(yàn)的,后來(lái)通過(guò)抓包發(fā)現(xiàn),H1的返回包直接返回到了Mac OS宿主機(jī)的vboxnet1網(wǎng)卡上的,而vboxnet1并沒(méi)有向Linux Bridge轉(zhuǎn)發(fā)這個(gè)包,先是懷疑是VirtualBox的一個(gè)BUG,重啟系統(tǒng)無(wú)果后,我大致就猜出什么意思了。至于說(shuō)什么 “注冊(cè)型交換機(jī)” 這種詞,都是我瞎猜自造的,不管怎么說(shuō),八九不離十吧,并且我顯然跟隨這問(wèn)題解決了它。

好久沒(méi)有遭遇這類問(wèn)題了,不過(guò)我還是比較喜歡并且善于解這種疑難雜癥的,個(gè)人不是很擅長(zhǎng)寫(xiě)常規(guī)知識(shí)的教程,但對(duì)于這種平時(shí)大家不怎么遇到的怪問(wèn)題,我這里自有妙藥。

在找到答案之前,我也Google了很久,查找VirtualBox上對(duì)應(yīng)LAN Segment的東西,并且查找Internal Network和LAN Segment的區(qū)別,我甚至想找一個(gè)Mac OS上的Virtual Switch來(lái)用,自己營(yíng)造一個(gè)虛擬并真實(shí)的以太網(wǎng)…如果真的找不到,那就只能DIY一個(gè)了。

關(guān)于“Linux中bridge如何橋接兩個(gè)VirtualBox虛擬網(wǎng)絡(luò)”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。

名稱欄目:Linux中bridge如何橋接兩個(gè)VirtualBox虛擬網(wǎng)絡(luò)-創(chuàng)新互聯(lián)
標(biāo)題URL:http://muchs.cn/article4/cdojie.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、營(yíng)銷型網(wǎng)站建設(shè)、網(wǎng)站建設(shè)響應(yīng)式網(wǎng)站、外貿(mào)網(wǎng)站建設(shè)、網(wǎng)站維護(hù)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)