中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Linux中bridge如何橋接兩個VirtualBox虛擬網絡

發布時間:2021-06-10 11:54:02 來源:億速云 閱讀:239 作者:小新 欄目:服務器

這篇文章將為大家詳細講解有關Linux中bridge如何橋接兩個VirtualBox虛擬網絡,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

先是磁盤空間不夠用,配發的電腦僅僅剩余12G的空間,不能外接硬盤,暫時也不能上傳備份,相當于一臺離線的機器吧。我卻要完整編譯一個4.19版本的Linux內核…于是沒日沒夜的,我開始人肉壓縮再釋放的操作,不得開心顏。最終我還是搞定了問題,不過這個磁盤空間問題解決得不算優雅,至少它無法讓人覺得我在炫技。

和針對磁盤空間的抱怨相比,下面的問題就有點意思了。

使用虛擬機搭建網絡測試環境總是會遇到各種奇葩的問題,這往往是各種虛擬機平臺的缺陷所致。(也許我理解狹隘,但在我看來阻礙工作的機制就是缺陷)

虛擬網絡畢竟不是真實的,網絡技術發展40余年,一個軟件想通過覆蓋全面的測試幾乎是不可能的,設計考慮不周全也是正常現象。

比方說用VirtualBox虛擬機搭建滿足如下需求的測試環境:

我需要一臺Linux主機作為網橋橋接兩個網絡。(我需要中間設置些規則又不想走路由)

Linux中bridge如何橋接兩個VirtualBox虛擬網絡

很簡單是不是?你試過嗎?

想法非常直接且簡單。類似VMWare的Lan Segment,VirtualBox有一種虛擬網絡叫做Internal Network,說白了就是幫你摸你一個內部的私有網絡。

主機B作為Bridge,網卡配置如下:

Linux中bridge如何橋接兩個VirtualBox虛擬網絡

作為Bridge橋接兩個網絡的兩臺主機,Linux系統做如下配置:

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

主機H1的enp0s9設置為Internal模式,接入intnet:

Linux中bridge如何橋接兩個VirtualBox虛擬網絡

H1的Linux系統配置如下:

ifconfig enp0s9 40.40.40.201/24

主機H2的enp0s9設置為Internel模式,接入intnet2:

Linux中bridge如何橋接兩個VirtualBox虛擬網絡

H2的Linux系統配置如下:

ifconfig enp0s9 40.40.40.100/24

你覺得H1和H2互相ping對方的地址,能通嗎?

試過就知道,不行!

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

Linux中bridge如何橋接兩個VirtualBox虛擬網絡

是的,不行!

我先解釋Why,再來演示How。

那么,Why?

和VMWare的LAN Segment內部有一個 虛擬學習型交換機(早期是廣播式Hub) 不同, VirtualBox的Internal Network內部的交換機不是學習型的,而是注冊型的!

所謂的注冊型交換機就是,只有注冊過的Mac地址,該交換機才會幫你轉發!這類交換機只有兩種轉發策略:

對于廣播幀,所有的端口都發一份。對于單播幀,僅向注冊該目標Mac地址的端口發送。

很顯然,猜測其內部是有一張表的:

注冊端口Mac地址
P1Mac1
P2Mac2

那么交換機是如何注冊Mac地址的呢?或者說,從哪里可以看到一個虛擬機的一個網卡注冊了哪個Mac呢?

請看“虛擬機->設置->網絡”:

Linux中bridge如何橋接兩個VirtualBox虛擬網絡

每激活一塊網卡,展開下面的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的時候了。

只需要三步:

  • 將intnet上H1的MAC地址注冊在Linux Bridge的intnet2網卡enp0s10。

  • 將intnet2上H2的MAC地址注冊在Linux Bridge的intnet網卡enp0s9。

  • Linux Bridge主機起來后,通過ifconfig命令將其enp0s9,enp0s10網卡的MAC改成別的。

Linux中bridge如何橋接兩個VirtualBox虛擬網絡

我來分別演示具體如何做。

我們看到網卡配置界面貌似沒有指定MAC地址的選項,只有一個隨機生成MAC的按鈕:

Linux中bridge如何橋接兩個VirtualBox虛擬網絡

怎么辦?

用命令行啊!

我們使用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地址,從它們的網絡配置界面可以看到:

Linux中bridge如何橋接兩個VirtualBox虛擬網絡

OK,現在啟動Linux Bridge機器,完成第三步,之所以需要這一步,是防止地址沖突導致Bridge的轉發表中毒:

  • 0800279ff0e6可以從H1的intnet學習到。

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

懵圈了不是?所以必須把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一下?

Linux中bridge如何橋接兩個VirtualBox虛擬網絡

這不就通了嘛…

事實上,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一個了。

關于“Linux中bridge如何橋接兩個VirtualBox虛擬網絡”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

清远市| 定州市| 沁水县| 大冶市| 清丰县| 天门市| 嘉荫县| 精河县| 渝北区| 禹城市| 南开区| 宁明县| 玉田县| 巫溪县| 汉阴县| 石狮市| 中山市| 且末县| 基隆市| 涿鹿县| 安达市| 东光县| 阜城县| 嘉义市| 陇西县| 天柱县| 南城县| 吉林省| 东丽区| 阜新| 邻水| 民县| 文水县| 合水县| 新安县| 赤壁市| 法库县| 皋兰县| 洛扎县| 乌审旗| 贵州省|