Mobile Intelligent Network LabDepart. Electronic Engineering
Lab210
LAB 3:Open vSwitch (OVS) on
Raspberry PI
11. 11, 2019
1
Mobile Intelligent Network LabDepart. Electronic Engineering
Lab210
Outline• 實驗二 Mininet 透過模擬,透過 REST API 由 Ryu contoller 將規則 install 到 OVS。
• 實驗三目標: 本實驗將繼續把 SDN 環境移植到實際系統- 將 hostapd 及 OVS 安裝在樹莓派中,除了提供無線通訊服務外,可透過 OVS (或
Ryu) 阻擋特定型態的封包,例如阻擋 ICMP 封包以防禦 DoS 攻擊
• 實驗背景知識介紹: OpenvSwitch (OVS)、Hostapd (無線基地台軟體)
• 實驗步驟- OVS on Raspberry Pi
1. 燒錄 Ubuntu Mate 至 SD卡2. 安裝 Hostapd [查核點一:手機是否能透過 Raspberry Pi 上網]3. 安裝 OVS4. 將 Hostapd 放入OVS [查核點二:從 Ryu上看見手機設備]
- 阻擋封包[Ryu阻擋特定手機的封包]
- Without Controller: 在 OVS 直接下規則 [OVS 阻擋特定手機的 HTTP/ICMP flow]
- With Controller: 透過 Ryu 下規則至 OVS [Ryu 阻擋特定手機的 HTTP/ICMP flow,需上傳gitlab]
2
Mobile Intelligent Network LabDepart. Electronic Engineering
Lab210
自備電腦:
Ryu controller
OpenVSwitch
Internet
物聯網
實驗目標
IoT設備發出ICMP封包
3
e.g., wlan0
或使用TP-LINK無線網卡開啟Hostapd
e.g., eth0
乙太網路連接外網並達到上網功能
(加分題) 使用Ryu下達Flow給OVS
阻擋封包
利用Flow
阻擋特定封包類似防火牆
OpenVSwitch
(Demo)
兩台裝置(手機)連上Hostapd,利用flow阻擋其中一台裝置上網。
Mobile Intelligent Network LabDepart. Electronic Engineering
Lab210
4
實驗背景知識介紹 : OVS
Mobile Intelligent Network LabDepart. Electronic Engineering
Lab210
OpenvSwitch (OVS)
• OpenvSwitch是虛擬多層網絡交換機的軟件實現,旨在通過編程擴展實現有效的網絡自動化,同時支持標準管理接口和協議,如NetFlow,sFlow,SPAN,RSPAN,CLI,LACP和802.1ag。
5
Mobile Intelligent Network LabDepart. Electronic Engineering
Lab210
6
實驗背景知識介紹 : Hostapd
Mobile Intelligent Network LabDepart. Electronic Engineering
Lab210
Hostapd
• Hostapd (Host access point daemon) 是一款開源軟體,可使得WiFi 網卡作為無線接取點,供其他用戶使用網路。- 透過 Hostapd,可以將 Raspberry Pi 打造成無線基地台
7
Mobile Intelligent Network LabDepart. Electronic Engineering
Lab210
8
實驗步驟 A1. 燒錄 Ubuntu Mate 至 SD卡
Mobile Intelligent Network LabDepart. Electronic Engineering
Lab210
樹梅派的映象檔
• Ubuntu For Raspberry Pi b 3+的IMG- 於gitlab上將專案”ubuntu mate image” clone 下來。- git clone https://140.124.71.4:2222/ntut_sdn_2020/ubuntu-mate-image.git
9
Mobile Intelligent Network LabDepart. Electronic Engineering
Lab210
SD卡格式化
• 使用以下軟體格式化SD卡- 安裝網址:https://www.sdcard.org/cht/downloads/formatter/
- 請務必要將SD卡格式化完畢才安裝映像檔進去
10
Mobile Intelligent Network LabDepart. Electronic Engineering
Lab210
燒錄SD卡
• 使用Win32 Disk Imager進行燒錄- https://sourceforge.net/projects/win32diskimager/ (下載網址)
11
選擇IMG檔
燒錄至SD卡
Mobile Intelligent Network LabDepart. Electronic Engineering
Lab210
12
實驗步驟 A2. 架設網路環境
Mobile Intelligent Network LabDepart. Electronic Engineering
Lab210
重置路由器
• 路由器上電之後,長按重置鈕,直到電源燈閃爍。- 按鈕位置於下圖紅框
13
Mobile Intelligent Network LabDepart. Electronic Engineering
Lab210
重置路由器
• 路由器上電之後,長按“WiFi on/off”鈕,直到wifi燈熄滅。- 按鈕位置於下圖紅框
14
Mobile Intelligent Network LabDepart. Electronic Engineering
Lab210
記錄電腦網卡資訊
• 將電腦網卡IP位置記錄下來,並且設定為自動取得IP位置。- 需要記憶內容如下
15
2.設定自動取得IP位置
1.截圖此資訊
Mobile Intelligent Network LabDepart. Electronic Engineering
Lab210
路由器連接方式
• 1.將電腦那端的網路線接到路由器的wan port。
• 2.並且另外拿一條線將電腦接上路由器的lan port。
• 3.將樹梅派接上路由器的lan port。- 連接圖如下
16
路由器學校網路
wan port
電腦
樹梅派
lan port
lan port
Mobile Intelligent Network LabDepart. Electronic Engineering
Lab210
設定路由器
• 在電腦端打開網頁,輸入:- http://192.168.50.1/Main_Password.asp?nextPage=Advanced_Setting
Backup_Content.asp
• 進入路由器設定介面,做以下設定。- 使用者名稱:asus
- 密碼:eelab501
17
Mobile Intelligent Network LabDepart. Electronic Engineering
Lab210
設定路由器
• 若跳出此頁面:無線網路隨意設定。
• 若沒有:前往下一頁投影片。
18
Mobile Intelligent Network LabDepart. Electronic Engineering
Lab210
路由器外部網路設定
• 點選進階選項->外部網路(WAN) 。- 下圖紅框標示。
19
Mobile Intelligent Network LabDepart. Electronic Engineering
Lab210
路由器外部網路設定
• 於紅框輸入先前紀錄的IP位置。
20
Mobile Intelligent Network LabDepart. Electronic Engineering
Lab210
更改路由器mac address
• 點選“網路服務供應商(ISP)特別需求->取得電腦MAC位置”。
• 點選“套用本頁面設定”。
21
Mobile Intelligent Network LabDepart. Electronic Engineering
Lab210
確認連線狀況
• 點選網路地圖- 連線成功會顯示已連線
22
Mobile Intelligent Network LabDepart. Electronic Engineering
Lab210
23
實驗步驟 A3. 安裝 Hostapd
Mobile Intelligent Network LabDepart. Electronic Engineering
Lab210
連接樹梅派
24
• 樹莓派連接設備:- 電源
- Hdmi輸出
- 網路線
- 無線網卡
- 鍵盤滑鼠
- SD卡
Mobile Intelligent Network LabDepart. Electronic Engineering
Lab210
安裝 Hostapd
• 指令更新- sudo apt-get update
- sudo apt-get upgrade
25
• 將無線介面做靜態設定- sudo vim /etc/network/interfaces
• 將網路功能重啟抓取設定- sudo /etc/init.d/networking restart
• 樹莓派登入資訊:- 使用者:pi
- 密碼:eelab501
Mobile Intelligent Network LabDepart. Electronic Engineering
Lab210
安裝 Hostapd
26
• 安裝hostapd服務- sudo apt-get install hostapd
• 設定hostapd組態:- sudo vim /etc/hostapd/hostapd.conf
設定簡易組態內容:- interface=wlan0
- driver=nl80211
- ssid=RPi-AP
- hw_mode=g
- channel=1
- macaddr_acl=0
- auth_algs=3
- ignore_broadcast_ssid=0
*完整組態可從解壓縮來修改/usr/share/doc/hostapd/examples/hostapd.conf.gz
基地台名稱可自訂
Mobile Intelligent Network LabDepart. Electronic Engineering
Lab210
安裝 Hostapd
27
• 設定hostapd將啟動組態指定至我們設計的組態- sudo vim /etc/default/hostapd
• 啟動hostapd- sudo hostapd /etc/hostapd/hostapd.conf
• 接下來就可以利用設備檢查 Hostapd 提供的熱點- 註:此時熱點無法提供裝置上網,因為此時無法提供IP位置給裝置。
Mobile Intelligent Network LabDepart. Electronic Engineering
Lab210
28
查核點一:開啟Hostapd提供Wi-Fi網路
1 先設定網路確定可以上網
2 進行指令更新(update,upgrade)
3 安裝hostapd,設定hostapd組態
4 使用手機檢查,是否有熱點出現
Mobile Intelligent Network LabDepart. Electronic Engineering
Lab210
29
實驗步驟 A4. 安裝 OVS
Mobile Intelligent Network LabDepart. Electronic Engineering
Lab210
OpenvSwitch(on raspberry pi)
• 安裝OpenvSwitch- sudo apt-get install openvswitch-switch
• OpenvSwitch指令教學
更多指令可以參考: https://roan.logdown.com/posts/191801-set-openvswitch30
目的 指令
建立一個名稱為br1的bridge sudo ovs-vsctl add-br br1 (br1可自訂,刪除為del-br)
將網路介面(eth0)加入至bridge sudo ovs-vsctl add-port br1 eth0(刪除為del-port)
查看bridg及port sudo ovs-vsctl show
加入flow entry 例如:將port 1進來的封包往port 2
轉送sudo ovs-ofctl add-flow br1
priority=1,in_port=1,actions=output:2(刪除為del-flows)
查詢介面在bridge中的port號 sudo ovs-ofctl show br1
查看bridge上的flow sudo ovs-ofctl dump-flows br1
Mobile Intelligent Network LabDepart. Electronic Engineering
Lab210
31
實驗步驟 A5. 將 Hostapd 放入 OVS
Mobile Intelligent Network LabDepart. Electronic Engineering
Lab210
Controller IP (於虛擬機)
• 虛擬機調整網路設定為Bridged
32
Mobile Intelligent Network LabDepart. Electronic Engineering
Lab210
Controller IP (於虛擬機)
• 重新啟動網路
• 輸入指令查詢ip- ifconfig
33
Mobile Intelligent Network LabDepart. Electronic Engineering
Lab210
開啟Ryu controller(於虛擬機)
• 執行simple_switch_13以及圖形化介面- ryu-manager --verbose --observe-links
ryu/ryu/app/simple_switch_13.py ryu/ryu/app/gui_topology/gui_topology.py
34
Mobile Intelligent Network LabDepart. Electronic Engineering
Lab210
OVS操作(on raspberry pi)
• 新增Bridge- sudo ovs-vsctl add-br ovs-br (ovs-br可自己命名)
• 將Bridge設置Controller- sudo ovs-vsctl set-controller ovs-br tcp:(ControllerIP:port)ex:192.168.50.74:6633
• 基地台無線介面及eth0加入(eth0每個人都不一定)- sudo ovs-vsctl add-port ovs-br eth0 (wlan0/eth0每個人介面不一定)
- sudo ovs-vsctl add-port ovs-br wlan0
• Bridge跟DHCP Server要IP- sudo dhclient ovs-br
• 將有線那端網址歸零- sudo ifconfig eth0 0 (eth0每個人都不一定)
• 啟動Hostapd- sudo hostapd /etc/hostapd/hostapd.conf 35
查詢自己controller的ip
重開機之後也要再執行一次
Mobile Intelligent Network LabDepart. Electronic Engineering
Lab210
OVS操作(on raspberry pi)
• 可以輸入指令查詢是否有連到controller- sudo ovs-vsctl show
• 也能看到手機連上hostapd
36
有出現“is_connected:true”才是有連線到控制器
手機的MAC
Mobile Intelligent Network LabDepart. Electronic Engineering
Lab210
Ryu Controller
• 控制器能看到連線資訊
37
手機的MAC address
Mobile Intelligent Network LabDepart. Electronic Engineering
Lab210
38
查核點二:從 Ryu 上看見手機設備
1 安裝 OpenvSwitch
2 開啟Ryu
3 新增Bridge設置Controller
4 Bridge跟DHCP Server要IP
5 開啟hostapd並確定可否連線
6 開啟Ryu,在圖形化介面確認手機是否連上
Mobile Intelligent Network LabDepart. Electronic Engineering
Lab210
39
實驗步驟 A6. 封包傳送及阻擋
Mobile Intelligent Network LabDepart. Electronic Engineering
Lab210
封包傳送:作業一
• 開啟控制器- ryu-manager --verbose --observe-links
ryu/ryu/app/simple_switch_13.py
• Hostapd連上控制器,用手機連上hostapd,確認可以上網。
• 刪除Openvswitch內br1的規則- sudo ovs-ofctl del-flows br1 (現在不能上網)
40
Mobile Intelligent Network LabDepart. Electronic Engineering
Lab210
封包傳送:作業一
• 在hostapd的終端機,查看現在有哪些裝置連上hostapd
41
Mobile Intelligent Network LabDepart. Electronic Engineering
Lab210
封包傳送:作業一
• 下規則傳送封包- sudo ovs-ofctl add-flow br1
“priority=100,eth_type=0x800,dl_dst=xx:xx:xx:xx:xx:xx,action=normal”(其中一台不能上網)priority:優先權,數字越大,越高優先權
eth_type:採用何種通訊協定,0x800是TCP
dl_dst:目的地MAC
action=normal:封包正常傳送(action=drop是阻擋封包)
- 封包要傳送需要雙向->來源端也要下規則(dl_src)
• 讓手機連上hostapd,也能正常上網
• 作業一結果用”sudo ovs-ofctl dump-flows br1”顯示,截圖之後放到實驗報告內
42
Mobile Intelligent Network LabDepart. Electronic Engineering
Lab210
阻擋封包:作業二
• Ryu controller先執行simple_switch,讓封包能正常傳送,手機能上網- ryu-manager --verbose --observe-links
ryu/ryu/app/simple_switch_13.py ryu/ryu/app/gui_topology/gui_topology.py
• Hostapd連上控制器,用兩台手機連上hostapd
• 作業二:在Openvswitch上下規則,讓其中一台手機無法上網
43
Mobile Intelligent Network LabDepart. Electronic Engineering
Lab210
阻擋封包:作業二
• 兩台手機連上hostapd後,下規則讓其中一台手機無法上網
• 作業二結果用”sudo ovs-ofctl dump-flows br1”顯示,截圖之後放到實驗報告內
44
Mobile Intelligent Network LabDepart. Electronic Engineering
Lab210
阻擋封包:作業三
• Ryu controller先執行simple_switch,讓封包能正常傳送,手機能上網- ryu-manager --verbose --observe-links
ryu/ryu/app/simple_switch_13.py ryu/ryu/app/gui_topology/gui_topology.py
• Hostapd連上控制器,用兩台手機連上hostapd
• 作業三:用REST API下規則,讓其中一台手機無法上網
45
Mobile Intelligent Network LabDepart. Electronic Engineering
Lab210
阻擋封包:作業三
• 利用REST API下規則,讓其中一台手機無法上網
• Postman指令方法參考LAB2
• 下完規則後,把flow存成jason檔上傳到gitlab- 命名為hw3_3
46
dpid 自行查詢switch
priority 優先權可以自己設定actions:[] 不執行動作,視為丟掉封包
Mobile Intelligent Network LabDepart. Electronic Engineering
Lab210
阻擋封包:作業四
• Hostapd連上控制器,用兩台手機連上hostapd
• 作業四:寫一個python檔,讓其中一台手機無法上網
• Ryu controller先執行自己設計的python檔,讓一隻手機不能上網- ryu-manager --verbose --observe-links test.py
ryu/ryu/app/gui_topology/gui_topology.py
• 把python檔傳到gitlab- 命名為hw3_4
47
Mobile Intelligent Network LabDepart. Electronic Engineering
Lab210
進階題(加分題):流量限制
• 抓取裝置的流量
• 當一個裝置流量超過一定的值時,例如100MB,就阻擋它的封包
• 提示:建立meter table
48
OpenVSwitch
Internet
物聯網
IoT設備發出封包
FLOW自備電腦:
Ryu controller
當流量異常時,下達Flow給OVS
阻擋封包
Mobile Intelligent Network LabDepart. Electronic Engineering
Lab210
繳交內容
• 於git lab上的lab3有說明.
49
Mobile Intelligent Network LabDepart. Electronic Engineering
Lab210Lab210
50