一文帶你全面了解虛擬機(jī)的四種網(wǎng)絡(luò)模型(圖文并茂)
01. 從物理網(wǎng)絡(luò)到虛擬網(wǎng)絡(luò)
著名的「六度分隔定理」說到,世界上任何兩個(gè)互不相識(shí)的人,只需要最多六個(gè)人就能夠建立起聯(lián)系。這個(gè)定理成立的前提就是依托于龐大的網(wǎng)絡(luò)結(jié)構(gòu)。
在虛擬化技術(shù)沒出現(xiàn)之前,構(gòu)成網(wǎng)絡(luò)的元素都是實(shí)體的物理設(shè)備,比如交換機(jī)、路由器、網(wǎng)線等等,人們想要構(gòu)建一個(gè)小型的局域網(wǎng)自己玩玩,都要買各種設(shè)備,成本高還不靈活。虛擬化技術(shù)普及之后,云計(jì)算開始大行其道,我們?cè)谧约旱膯螜C(jī)上就可以建各種虛擬機(jī),想怎么玩就怎么玩。
隨之而來的就是網(wǎng)絡(luò)變得更復(fù)雜了,由以前看得見摸得著的物理網(wǎng)絡(luò)一下變成玄乎的虛擬網(wǎng)絡(luò)了,好不容易建了幾臺(tái)虛擬機(jī),發(fā)現(xiàn)網(wǎng)絡(luò)不通,或者網(wǎng)絡(luò)通了,但并不知道是怎么通的,這難言的苦水哽在喉嚨實(shí)在令人不適。
這篇文章就來說說虛擬機(jī)世界里的幾種網(wǎng)絡(luò)模型,我們主要以 VirtualBox 和 VMwareWorkstation 這兩款目前最主流的桌面虛擬化軟件作為例子。
總的來說,目前有四種常見的網(wǎng)絡(luò)模型:
- 橋接(Bridge Adapter)
- NAT
- 主機(jī)(Host-only Adapter)
- 內(nèi)部網(wǎng)絡(luò)(Internal)
這也是 VirtualBox 支持的四種模型,對(duì)于 VMware,則只有前三種。
下圖顯示了 VirtualBox 支持的幾種網(wǎng)絡(luò)模型:
圖一
02 橋接(Bridge Adapter)
虛擬機(jī)橋接網(wǎng)絡(luò)模型就是使用虛擬交換機(jī)(Linux Bridge),將虛擬機(jī)和物理機(jī)連接起來,它們處于同一個(gè)網(wǎng)段,IP 地址是一樣的。如下圖所示:
在這種網(wǎng)絡(luò)模型下,虛擬機(jī)和物理機(jī)都處在一個(gè)二層網(wǎng)絡(luò)里面,所以有:
橋接網(wǎng)絡(luò)的好處是簡單方便,但也有一個(gè)很明顯的問題,就是一旦虛擬機(jī)太多,廣播就會(huì)很嚴(yán)重。所以,橋接網(wǎng)絡(luò)一般也只適用于桌面虛擬機(jī)或者小規(guī)模網(wǎng)絡(luò)這種簡單的形式。
03 NAT
另一種模型是 NAT,即網(wǎng)絡(luò)地址轉(zhuǎn)換(Network Address Translatation)。這種模型嚴(yán)格來講,又可以分為 NAT 和 NAT網(wǎng)絡(luò)兩種,我們看上面的圖 1 也可以看到。
根據(jù) NAT 的原理,虛擬機(jī)所在的網(wǎng)絡(luò)和物理機(jī)所在的網(wǎng)絡(luò)不在同一個(gè)網(wǎng)段,虛擬機(jī)要訪問物理所在網(wǎng)絡(luò)必須經(jīng)過一個(gè)地址轉(zhuǎn)換的過程,也就是說在虛擬機(jī)網(wǎng)絡(luò)內(nèi)部需要內(nèi)置一個(gè)虛擬的 NAT 設(shè)備來做這件事。
但其中 NAT 和 NAT網(wǎng)絡(luò) 兩者還有些許的不同:
- NAT:主機(jī)上的虛擬機(jī)之間是互相隔離的,彼此不能通信(它們有獨(dú)立的網(wǎng)絡(luò)棧,獨(dú)立的虛擬 NAT 設(shè)備)
- NAT網(wǎng)絡(luò):虛擬機(jī)之間共享虛擬 NAT 設(shè)備,彼此互通。
如下圖,展示了兩者細(xì)微的差別:
PS:NAT 網(wǎng)絡(luò)模式中一般還會(huì)內(nèi)置一個(gè)虛擬的 DHCP 服務(wù)器來進(jìn)行 IP 地址的管理。
下面我們通過實(shí)驗(yàn)來驗(yàn)證一下兩種模式的區(qū)別,首先是 NAT 模式:
訪問外網(wǎng)沒問題:
訪問其他虛擬機(jī):
可以看到,兩個(gè)虛擬機(jī)由于有隔離的網(wǎng)絡(luò)棧,所以它們的 IP 地址并不在一個(gè)網(wǎng)段,所以 ping 不通。
再來看 NAT網(wǎng)絡(luò),訪問外網(wǎng)同樣沒問題,我們來看下 VM 之間的互通:
可以看到,差別體現(xiàn)出來了, NAT網(wǎng)絡(luò) 虛擬機(jī)之間共享網(wǎng)絡(luò)棧,它們的 IP 地址處于同一個(gè)網(wǎng)段,所以彼此是互通的。
總結(jié)一下,以上兩種 NAT 模式,如果不做其他配置,那么有:
- 虛擬機(jī)可以訪問主機(jī),反之不行
- 如果主機(jī)可以上外網(wǎng),那么虛擬機(jī)也可以
- 對(duì)于 NAT,同主機(jī)上的虛擬機(jī)之間不能互通
- 對(duì)于 NAT網(wǎng)絡(luò),虛擬機(jī)之間可以互通
PS:如果做了 端口映射 配置,那么主機(jī)也可以訪問虛擬機(jī)。
04 主機(jī)網(wǎng)絡(luò)(Host-only Adapter)
主機(jī)網(wǎng)絡(luò)顧名思義,就是只限于主機(jī)內(nèi)部訪問的網(wǎng)絡(luò),虛擬機(jī)之間彼此互通,虛擬機(jī)與主機(jī)之間彼此互通。但是默認(rèn)情況下虛擬機(jī)不能訪問外網(wǎng)(注意:這里說的是默認(rèn)情況下,如果稍作配置,也是可以的)。
主機(jī)網(wǎng)絡(luò)看似簡單,其實(shí)它的網(wǎng)絡(luò)模型是相對(duì)比較復(fù)雜的,可以說前面幾種模式實(shí)現(xiàn)的功能,在這種模式下,都可以通過虛擬機(jī)和網(wǎng)卡的配置來實(shí)現(xiàn),這得益于它特殊的網(wǎng)絡(luò)模型。
主機(jī)網(wǎng)絡(luò)模型會(huì)在主機(jī)中模擬出一塊虛擬網(wǎng)卡供虛擬機(jī)使用,所有虛擬機(jī)都連接到這塊網(wǎng)卡上,這塊網(wǎng)卡默認(rèn)會(huì)使用網(wǎng)段 192.168.56.x(在主機(jī)的網(wǎng)絡(luò)配置界面可以看到這塊網(wǎng)卡),如下是基本的拓?fù)鋱D示:
默認(rèn)情況下,虛擬機(jī)之間可以互通,虛擬機(jī)只能和主機(jī)上的虛擬網(wǎng)卡互通,不能和不同網(wǎng)段的網(wǎng)卡互通,更不能訪問外網(wǎng),如果想做到這樣,那么需要如圖中 紅虛線 所示,將物理網(wǎng)卡和虛擬網(wǎng)卡橋接或共享。在主機(jī)上做如下設(shè)置即可:
通過以上配置,我們來驗(yàn)證一下,虛擬機(jī)可以訪問主機(jī)物理網(wǎng)卡和外網(wǎng)了:
05 內(nèi)部網(wǎng)絡(luò)(internal)
***一種網(wǎng)絡(luò)模型是內(nèi)部網(wǎng)絡(luò),這種模型是相對(duì)最簡單的一種,虛擬機(jī)與外部環(huán)境完全斷開,只允許虛擬機(jī)之間互相訪問,這種模型一般不怎么用,所以在 VMware 虛擬機(jī)中是沒有這種網(wǎng)絡(luò)模式的。這里我們就不多說了。
06 總結(jié)
虛擬機(jī)的四種網(wǎng)絡(luò)模型:橋接、NAT、主機(jī)和內(nèi)網(wǎng)模型。
下面以一張表來描述它們之間的通信行為:
本文轉(zhuǎn)載自微信公眾號(hào)「 Linux云計(jì)算網(wǎng)絡(luò)(ID:cloud_dev)」,公眾號(hào)主要專注在 Linux、云計(jì)算、網(wǎng)絡(luò)方面的技術(shù)分享,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系 Linux云計(jì)算網(wǎng)絡(luò) 公眾號(hào)。