【SDN 筆記】 Mininet 介紹與 RYU 相關安裝
2020/02/18 SDN

根據 mininet 官方網站的說法,mininet 是一個執行在 Linux 平台中的網路拓墣模擬器,可以同時產生多個虛擬主機 / 交換機 / 控制器,並將其串接起來,由於其交換機支持 OpenFlow 的協定,更有助於軟體定義網路(SDN, Software Defined Networking)的模擬環境開發,建立了 mininet 環境可以利用 ryu 框架來實現 SDN,根據 ryu 官方網站的說法,ryu 提供了軟體定義網路 (software defined networking) 一個很好的開發框架,其支援許多的 API 和協定,如此一來不僅是在網路管理或應用開發層面,都會方便許多,下面從零開始,搭建相關環境。

VirtualBox & Ubuntu

在 windows 上開發需要虛擬機,這邊安裝常用的 VB(VirtualBox),請到 官網 先安裝,接著我需要在虛擬機上安裝 Linux 系統,也就是 ubuntu,一樣到 官方載點 進行下載,本文使用 64 位元 16.04LTS 桌面版本 ,下載完畢後,請依照 這裡 將 ubuntu 燒錄至 VB,完成後就可以繼續下一步。

Mininet 介紹與相關安裝

先更新 ubuntu 環境,然後執行 reboot 重啟,依序執行下面三個命令

sudo apt-get update
sudo apt-get upgrade
reboot

安裝 git 工具

sudo apt-get install git

利用 git clone 下載 mininet 安裝檔

git clone git://github.com/mininet/mininet

到目錄下執行 mininet 安裝檔進行安裝,請依序執行下面兩個命令

cd mininet/util/
./install.sh -a

安裝完畢看到如下圖顯示 Enjoy Mininet!

接著測試一下 mininet,先查看版本

mn --version

如下我的版本為 2.3.0d6

然後測試 mininet 是否可以與 controller、host 等等的虛擬機溝通

sudo mn --test pingall

如下圖,看到completed in 5.730 seconds就是成功,秒數會不盡相同,沒有關係

RYU 介紹與相關安裝

安裝 python 相關工具,依序執行下面三個命令

cd ~
sudo apt-get install python-pip
sudo apt-get install python-setuptools

安裝 RYU,依序執行下面四個命令

pip install ryu
git clone git://github.com/osrg/ryu.git
cd ryu/
sudo python ./setup.py install
sudo pip install -r tools/pip-requires

執行完會如下圖,出現兩個 installing

安裝完成後,執行 mininet,以下步驟請銜接 RYU 說明文件-執行 Mininet 中的內容。

首先, 開 sshX11 Forwarding 功能並進行登入。

ssh -X <yourhostname>@<yourIP> # ssh -X joe@10.0.2.15

hostname 就是你 terminal 打開後 @ 前面的名稱,IP 請用 ifconfig 進行查詢,如下圖

執行並輸入你自己登入的密碼後如下圖

接著按照說明文件執行,輸入

sudo mn --topo single,3 --mac --switch ovsk --controller remote -x

執行之後,會在 x windows 出現 5 個 xterm 視窗。 分別對應到 host 1 ~ 3 ,交換器和 Controller ,如下圖

依序按照說明文件在 switch:s1(root) 視窗執行下面四個命令

ovs-vsctl show
ovs-dpctl show
ovs-vsctl set Bridge s1 protocols=OpenFlow13
ovs-ofctl -O OpenFlow13 dump-flows s1

都沒有輸入錯誤應該呈現如下

執行交換器

切換到 controller:c1(root) 視窗,依序輸入下面三個命令

cd ryu/ryu/app/
ls
ryu-manager --verbose ryu.app.simple_switch_13.py

第一行是切換到 simple_switch_13.py 路徑 第二行是查看是否有該檔案 第三行就是說明文件中的執行

最後執行成功如下圖,這個訊息表示,controller 已經待命在準備 host 與 switch 的溝通。