虛擬機網絡模型詳解,看這篇就夠了(圖文並茂)


本文首發於我的公眾號 Linux雲計算網絡(id: cloud_dev),專注於干貨分享,號內有 10T 書籍和視頻資源,后台回復「1024」即可領取,歡迎大家關注,二維碼文末可以掃。

01 從物理網絡到虛擬網絡

著名的「六度分隔定理」說到,世界上任何兩個互不相識的人,只需要最多六個人就能夠建立起聯系。這個定理成立的前提就是依托於龐大的網絡結構。

在虛擬化技術沒出現之前,構成網絡的元素都是實體的物理設備,比如交換機、路由器、網線等等,人們想要構建一個小型的局域網自己玩玩,都要買各種設備,成本高還不靈活。虛擬化技術普及之后,雲計算開始大行其道,我們在自己的單機上就可以建各種虛擬機,想怎么玩就怎么玩。

隨之而來的就是網絡變得更復雜了,由以前看得見摸得着的物理網絡一下變成玄乎的虛擬網絡了,好不容易建了幾台虛擬機,發現網絡不通,或者網絡通了,但並不知道是怎么通的,這難言的苦水哽在喉嚨實在令人不適。

這篇文章就來說說虛擬機世界里的幾種網絡模型,我們主要以 VirtualBoxVMware Workstation 這兩款目前最主流的桌面虛擬化軟件作為例子。

總的來說,目前有四種常見的網絡模型:

  • 橋接(Bridge Adapter)
  • NAT
  • 主機(Host-only Adapter)
  • 內部網絡(Internal)

這也是 VirtualBox 支持的四種模型,對於 VMware,則只有前三種。

下圖顯示了 VirtualBox 支持的幾種網絡模型:

02 橋接(Bridge Adapter)

虛擬機橋接網絡模型就是使用虛擬交換機(Linux Bridge),將虛擬機和物理機連接起來,它們處於同一個網段,IP 地址是一樣的。如下圖所示:


圖一

在這種網絡模型下,虛擬機和物理機都處在一個二層網絡里面,所以有:

  • 虛擬機之間彼此互通
  • 虛擬機與主機彼此可以互通
  • 只要物理機可以上網,那么虛擬機也可以。我們來驗證下:

橋接網絡的好處是簡單方便,但也有一個很明顯的問題,就是一旦虛擬機太多,廣播就會很嚴重。所以,橋接網絡一般也只適用於桌面虛擬機或者小規模網絡這種簡單的形式。

03 NAT

另一種模型是 NAT,即網絡地址轉換(Network Address Translatation)。這種模型嚴格來講,又可以分為 NATNAT 網絡兩種,我們看上面的圖 1 也可以看到。

根據 NAT 的原理,虛擬機所在的網絡和物理機所在的網絡不在同一個網段,虛擬機要訪問物理所在網絡必須經過一個地址轉換的過程,也就是說在虛擬機網絡內部需要內置一個虛擬的 NAT 設備來做這件事。

但其中 NATNAT 網絡 兩者還有些許的不同:

  • NAT:主機上的虛擬機之間是互相隔離的,彼此不能通信(它們有獨立的網絡棧,獨立的虛擬 NAT 設備)
  • NAT 網絡:虛擬機之間共享虛擬 NAT 設備,彼此互通。

如下圖,展示了兩者細微的差別:

PS:NAT 網絡模式中一般還會內置一個虛擬的 DHCP 服務器來進行 IP 地址的管理。

下面我們通過實驗來驗證一下兩種模式的區別,首先是 NAT 模式:

訪問外網沒問題:

訪問其他虛擬機:

可以看到,兩個虛擬機由於有隔離的網絡棧,所以它們的 IP 地址並不在一個網段,所以 ping 不通。

再來看 NAT 網絡,訪問外網同樣沒問題,我們來看下 VM 之間的互通:

可以看到,差別體現出來了,NAT 網絡 虛擬機之間共享網絡棧,它們的 IP 地址處於同一個網段,所以彼此是互通的。

總結一下,以上兩種 NAT 模式,如果不做其他配置,那么有:

  • 虛擬機可以訪問主機,反之不行
  • 如果主機可以上外網,那么虛擬機也可以
  • 對於 NAT,同主機上的虛擬機之間不能互通
  • 對於 NAT 網絡,虛擬機之間可以互通

PS:如果做了 端口映射 配置,那么主機也可以訪問虛擬機。

04 主機網絡(Host-only Adapter)

主機網絡顧名思義,就是只限於主機內部訪問的網絡,虛擬機之間彼此互通,虛擬機與主機之間彼此互通。但是默認情況下虛擬機不能訪問外網(注意:這里說的是默認情況下,如果稍作配置,也是可以的)。

主機網絡看似簡單,其實它的網絡模型是相對比較復雜的,可以說前面幾種模式實現的功能,在這種模式下,都可以通過虛擬機和網卡的配置來實現,這得益於它特殊的網絡模型。

主機網絡模型會在主機中模擬出一塊虛擬網卡供虛擬機使用,所有虛擬機都連接到這塊網卡上,這塊網卡默認會使用網段 192.168.56.x(在主機的網絡配置界面可以看到這塊網卡),如下是基本的拓撲圖示:

默認情況下,虛擬機之間可以互通,虛擬機只能和主機上的虛擬網卡互通,不能和不同網段的網卡互通,更不能訪問外網,如果想做到這樣,那么需要如圖中 紅虛線 所示,將物理網卡和虛擬網卡橋接或共享。在主機上做如下設置即可:

通過以上配置,我們來驗證一下,虛擬機可以訪問主機物理網卡和外網了:

05 內部網絡(internal)

最后一種網絡模型是內部網絡,這種模型是相對最簡單的一種,虛擬機與外部環境完全斷開,只允許虛擬機之間互相訪問,這種模型一般不怎么用,所以在 VMware 虛擬機中是沒有這種網絡模式的。這里我們就不多說了。

06 總結

虛擬機的四種網絡模型:橋接、NAT、主機和內網模型。

下面以一張表來描述它們之間的通信行為:

Model VM -> host host -> VM VM <-> VM VM -> Internet Internet -> VM
Bridged + + + + +
NAT + Port Forwarding - + Port Forwarding
NAT Network + Port Forwarding + + Port Forwarding
Host-only + + + - -
Internal - - + - -

參考:

https://technology.amis.nl/2018/07/27/virtualbox-networking-explained/#prettyPhoto

https://blog.csdn.net/niqinwen/article/details/11761487


我的公眾號 「Linux雲計算網絡」(id: cloud_dev) ,號內有 10T 書籍和視頻資源,后台回復 「1024」 即可領取,分享的內容包括但不限於 Linux、網絡、雲計算虛擬化、容器Docker、OpenStack、Kubernetes、工具、SDN、OVS、DPDK、Go、Python、C/C++編程技術等內容,歡迎大家關注。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM