趣談網路協議---雲中網路的隔離GRE、VXLAN:雖然住一個小區,也要保護隱私
VLAN 只有 12 位,共 4096 個,對於雲平臺的隔離問題,不夠用。
所以,要擴充套件 VLAN 協議,在原來的包的格式的基礎上擴展出一個頭,裡面包含用於區分租戶的 ID,外層的包的和格式儘量和傳統一樣,很像隧道協議。
底層的物理網路裝置組成的網路為 Underlay 網路,用於虛擬機器和雲中的技術組成的網路為 Overlay 網路。
兩個 Overlay 技術:GRE 和 VXLAN,可解決雲端計算中的 VLAN 限制。
GRE Generic Routing Encapsulation,IP-over-IP 的隧道技術,將 IP 包封裝在 GRE 包裡,外加 IP 頭,在隧道的一端封裝資料包,並在通路上傳輸,到另外一端解封裝。
1、GRE 頭
- GRE 頭中,前 32 位固定,後面可選。
- 4 位標識位,標識後面是否有可選項。
- 32 位 key 欄位,區分使用者的 Tunnel ID,遠大於 VLAN ID 數。
- 下方的格式是專門用於網路虛擬化的 GRE 包頭格式,稱為 NVGRE,網路 ID 24 位,遠大於 VLAN ID 數。
路由器需要有封裝和解封裝 GRE 包的能力。
2、使用 GRE 隧道傳輸過程
-
IP 為 192.168.1.102 的主機 A 要訪問 IP 為 192.168.2.102 的主機 B,因跨網段,先發給預設閘道器,即路由器 192.168.1.1。
-
路由表發現去網段 192.168.2.0/24 應該走 GRE 隧道,從隧道一端的網絡卡 Tunnel0 進入隧道。
-
Tunnel 隧道的端點進行包的封裝,在內部 IP 頭外加 GRE 頭。對於 NVGRE,是在 MAC 頭外加 GRE 頭,然後加上路由器的外網 IP 地址。源 IP 172.17.10.10,目標 IP 172.16.11.10,然後從 E1 的物理網絡卡傳送到公網。
-
在公網,全部按公網 IP 地址沿著路由器一跳跳走。
-
網路包到達對端的 Tunnel0,解封裝,取下外層 IP 頭,根據路由表,從 E3 口轉發到伺服器 B。
3、GRE 不足
- Tunnel 數量問題。GRE 是一種點對點隧道,如果網路數目增多,隧道數目會呈指數性增長。
- GRE 不支援組播。
- 目前還有很多防火牆和三層網路裝置無法解析 GRE。
VXLAN
GRE 是在三層外再套三層,VXLAN 則從二層外就套了一個 VXLAN 頭,包含的 VXLAN ID 為 24 位,同樣遠大於 VLAN ID 數。VXLAN 頭外還封裝了 UDP、IP,及外層 MAC 頭。
對 VXLAN 的包封裝和解封裝的功能點為 VTEP(VXLAN Tunnel Endpoint)。VTEP 相當於虛擬網路管家。每臺物理機上都有 VTEP,虛擬機器啟動時向其註冊。
不同於 GRE,VXLAN 支援組播。當一個 VTEP 啟動時,通過 IGMP 協議加入一個組播組。
通訊過程:
- 虛擬機器 1、2、3 屬於雲中同一個使用者的虛擬機器,因而分配相同的 VXLAN ID = 101。
- 虛擬機器 1 傳送 ARP 廣播,請求虛擬機器 2 的 MAC 地址。
- ARP 請求到底 VTEP1 時, VTEP1 知道虛擬機器 2 不歸自己管,將 ARP 請求封裝在 VXLAN 中,組播出去。
- VTEP2、VTEP3 都收到訊息,都會解開 VXLAN 包,裡面有 ARP。
- VTEP3 在本地廣播,無機器回覆自己的 MAC;VTEP2 在本地廣播,虛擬機器 2 回覆自己的 MAC。
- VTEP2 學到虛擬機器 1 歸 VTEP1 管,將 ARP 回覆封裝在 VXLAN 中,單播給 VTEP1。
- VTEP1 解開 VXLAN 包,發現 ARP 回覆,傳送給虛擬機器 1。
- VTEP1 也學到虛擬機器 2 歸 VTEP2 管,下次直接發給 VTEP2 即可。
如何將 GRE 和 VXLAN 融入雲平臺? 建立一個網路拓撲結構: 三臺物理機,每臺上有兩臺虛擬機器,分屬兩個不同的使用者,不互相通訊,因而 VLAN tag 不同。但不同物理機上的相同使用者,可通過 GRE 隧道相互通訊。
為什麼多一個 br1 虛擬交換機?可將虛擬機器直接的互聯和物理機之間的互聯分兩層設計,這樣就可使用不同種隧道,OpenvSwitch 支援三類隧道:GRE、VXLAN、IPsec_GRE。
Flow Table 規則都設定在 br1 上,每個 br1 都有 3 個網絡卡,網絡卡 1 對內,網絡卡 2、3 對外。
Flow Table 的設計: