前者所分享關於Mininet的文章都是僅有一個虛擬機裡面執行mininet模擬環境,所測試host間的連接也都是在同一個Mininet環境,然而若是在多個不同間的VM或是Mininet環境要進行網路連接時,就要用到所謂的Gre Tunnel了
根據網路上關於Gre Tunnel的介紹,整理如下:
GRE(Generic Routing Encapsulation,通用路由封裝)是一種 IP-over-IP 的隧道協定(Tunneling Protocol),可以在虛擬對等鏈路中封裝多種網路層協定,是現今主要使用的 Overlay 網路技術之一。GRE 是 Cisco 等公司提出的技術,對部分網路層協定進行封裝並在 IPv4/IPv6 網路中傳輸,簡單說就是一種協定封裝格式,定義了如何用一種網路協定去封裝另一種網路協定。
簡單說 GRE Tunnel 原理,當我們讓兩台網路介面建立了私有通道時。當封包傳送給對方時,會將封包丟到建立 GRE Tunnel的邏輯介面進行轉送,當資料抵達另一方的邏輯介面時,在將被封裝成 GRE 的封包恢復成原始狀態傳送給目的地,因此取得的封包是乾淨的。
GRE 有以下優缺點:
- 可跨區域部署的 L3 通道技術。
- 使用 4 bytes 的 segment id 來通當 vlan id 的租戶隔離。
- 基於點對點通道協定(Point to Point Tunneling Protocol),每兩個點需要有一個通道,對於第四層網路埠口(port)資源是一種浪費。
- 增加 IP Header,因此會減少 Instance 的 MTU 值,因此會影響傳輸效率。
- 不支援群組廣播,同網路中的一個虛擬機發送廣播 frame 後,GRE 會將其廣播到所有與該節點有通道連接的節點。
- GRE 封裝的 IP 封包過濾與負載平衡問題,有許多第三層網路與防火牆裝置無法解析。
在實作前先看看待會我們要實作的架構

現在就開始準備實作吧!!首先準備兩個VM環境
VM 1 配置IP為 192.168.100.3
VM 2 配置IP為 192.168.100.4
[ VM 1 配置]
開啟兩個terminal分別執行Ryu Controller和Mininet
[ Ryu ]
# ryu-manager –verbose ryu/app/simple_switch_13.py[ Mininet ]
# mn –topo=single,1 –controller=remote

[ VM 2 配置]
開啟terminal執行Mininet
[ Mininet ]
# mn –topo=single,1

#更改VM 2 host 1 的IP 為 10.0.0.2 (避免重複)
ifconfig h1-eth0 inet 10.0.0.2
此時測試host 1 和 host 2 是否可以通訊 ?
#設定Gre Tunnel
[host 1] ovs-vsctl add-port s1 s1-gre1 — set interface s1-gre1 type=gre options:remote_ip=192.168.100.4
———————————————————-
[host 2] ovs-vsctl add-port s1 s1-gre1 — set interface s1-gre1 type=gre options:remote_ip=192.168.100.3


設定完gre tunnel 後host間可以進行通訊了