Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
實驗環境
理學⼤樓 1002 教室 理學⼤樓 821 機房
Cloud-A01 ~ Cloud-D12 CSIE-Cloud01 ~ CSIE-Cloud06
CPU AMD Phenom™ II X6 1065T Processor AMD Opteron™ Processor 6128 * 2
CPU
Memory 8G (total 16 cpu cores)
Memory 8G Disk
500G, 500G, 1T
spaces
Disk
80G (QCOW2 Format) O.S. Debian wheezy
spaces
O.S. Debian Jessie
環境參數
為了避免輸⼊錯誤以及⽅便區分 IP 使⽤環境,我們使⽤下列幾個按鈕來快速取代各個不同 IP。
Username : [USERNAME]
Host IP : [Host-IP]
Gateway : [Gateway-IP]
安裝實作 (Mininet)
Login Server
www.cs.nchu.edu.tw/~snmlab/CloudMgnt201409/Lab3.html 1/16
12/4/2019 Openflow and Mininet
安裝 Mininet 所需套件及準備⼯作
1. 安裝需求套件和設定
$ cd mininet
由於最近剛改版,但我們還是使⽤上⼀個穩定的版本,切換到2.1.0
3. 開始編譯和安裝 mininet
...
Using /usr/lib/python2.7/dist-packages
Finished processing dependencies for mininet==2.1.0
檢查有無錯誤
www.cs.nchu.edu.tw/~snmlab/CloudMgnt201409/Lab3.html 2/16
12/4/2019 Openflow and Mininet
$ echo $?
4. 測試 mininet 版本
$ sudo mn --version
2.1.0
建⽴實驗環境
檢查網路拓樸連線狀況
mininet> net
h1 h1-eth0:s1-eth1
h2 h2-eth0:s1-eth2
h3 h3-eth0:s1-eth3
s1 lo: s1-eth1:h1-eth0 s1-eth2:h2-eth0 s1-eth3:h3-eth0
www.cs.nchu.edu.tw/~snmlab/CloudMgnt201409/Lab3.html 3/16
12/4/2019 Openflow and Mininet
c0
mininet> h1 ifconfig
1. 實作 switch 正常⾏為
mininet> pingall
查看 switch 中的 flow
mininet> pingall
清除 switch 中的 flow
2. IP traffic control
mininet> pingall
清除 switch 中的 flow
www.cs.nchu.edu.tw/~snmlab/CloudMgnt201409/Lab3.html 5/16
12/4/2019 Openflow and Mininet
mininet> pingall
關閉 mininet
mininet> exit
POX controller
在上⼀段落中,我們使⽤ mininet 來建⽴我們需要的 openflow 實驗環境,並且⽤指令來對 switch 作安裝 flow 的動作。
1. 安裝POX
換回新開的 terminal,我們從學校伺服器抓取檔案,以節省頻寬
$ wget http://www.cs.nchu.edu.tw/~snmlab/CloudMgnt201409/pox.tar
解壓縮
在校外可以直接上官網抓
$ cd ~/pox
2. 測試 POX 範例
www.cs.nchu.edu.tw/~snmlab/CloudMgnt201409/Lab3.html 6/16
12/4/2019 Openflow and Mininet
$ ./pox.py forwarding.l2_learning
讓 host 間互 ping
mininet> pingall
查看 switch 中的 flow
4. 修改簡單防⽕牆功能
^C
INFO:core:Going down...
INFO:openflow.of_01:[00-00-00-00-00-01 3] disconnected
www.cs.nchu.edu.tw/~snmlab/CloudMgnt201409/Lab3.html 7/16
12/4/2019 Openflow and Mininet
INFO:core:Down.
$ cd ~/pox/pox/forwarding/
$ ls
$ cp l2_learning.py l2_icmp_block.py
$ cp l2_learning.py l2_ip_block.py
$ cp l2_learning.py l2_mac_block.py
檢查檔案都有複製到檢查檔案都有複製到
$ ls
阻擋 ICMP 封包
$ nano l2_icmp_block.py -c
# 146 ⾏新增
icmpPkt = packet.find('icmp')
if icmpPkt is not None:
log.info("Receive ICMP Packet, drop it!!")
drop()
return
執⾏ l2_icmp_block.py
$ ~/pox/pox.py forwarding.l2_icmp_block
mininet> h1 ping h2 -c 3
www.cs.nchu.edu.tw/~snmlab/CloudMgnt201409/Lab3.html 8/16
12/4/2019 Openflow and Mininet
^C
INFO:core:Going down...
INFO:openflow.of_01:[00-00-00-00-00-01 3] disconnected
INFO:core:Down.
阻擋特定 IP 封包
$ nano l2_ip_block.py -c
# 146 ⾏新增
IPPkt = packet.find('ipv4')
if IPPkt is not None:
log.info("Receive %s Packet!!",IPPkt.srcip)
if IPPkt.srcip == '10.0.0.1':
log.info("Drop %s Packet...",IPPkt.srcip)
drop()
return
執⾏ l2_ip_block.py
$ ~/pox/pox.py forwarding.l2_ip_block
mininet> h1 ping h2 -c 3
www.cs.nchu.edu.tw/~snmlab/CloudMgnt201409/Lab3.html 9/16
12/4/2019 Openflow and Mininet
^C
INFO:core:Going down...
INFO:openflow.of_01:[00-00-00-00-00-01 3] disconnected
INFO:core:Down.
$ nano l2_mac_block.py -c
# 27 ⾏新增
from pox.lib.addresses import EthAddr
# 147 ⾏新增
MacAddr = '00:00:00:00:00:01'
EthPkt = packet.find('ethernet')
if EthPkt is not None:
log.info("%s",EthPkt.src)
if EthPkt.src == EthAddr(MacAddr):
log.info("Match")
drop()
return
執⾏ l2_mac_block.py
$ ~/pox/pox.py forwarding.l2_mac_block
mininet> h1 ping h2 -c 3
INFO:forwarding.l2_mac_block:00:00:00:00:00:01
INFO:forwarding.l2_mac_block:Match
...
www.cs.nchu.edu.tw/~snmlab/CloudMgnt201409/Lab3.html 10/16
12/4/2019 Openflow and Mininet
^C
INFO:core:Going down...
INFO:openflow.of_01:[00-00-00-00-00-01 3] disconnected
INFO:core:Down.
mininet> exit
$ cd ~/mininet/examples
建⽴實驗⽤的虛擬網路環境
$ nano lab3_network_subnets.py
#!/usr/bin/python
def emptyNet():
www.cs.nchu.edu.tw/~snmlab/CloudMgnt201409/Lab3.html 11/16
12/4/2019 Openflow and Mininet
mac='00:00:00:00:00:02',
defaultRoute='via 10.0.0.254')
h3 = net.addHost( 'h3',
ip='10.0.0.3',
mac='00:00:00:00:00:03',
defaultRoute='via 10.0.0.254')
#---------subnet2---------
k4 = net.addHost( 'k4',
ip='192.168.0.10',
mac='00:00:00:00:00:10',
defaultRoute='via 192.168.0.254')
k5 = net.addHost( 'k5',
ip='192.168.0.11',
mac='00:00:00:00:00:11',
defaultRoute='via 192.168.0.254')
k6 = net.addHost( 'k6',
ip='192.168.0.12',
mac='00:00:00:00:00:12',
defaultRoute='via 192.168.0.254')
if __name__ == '__main__':
setLogLevel( 'info' )
emptyNet()
將檔案轉成可執⾏檔
www.cs.nchu.edu.tw/~snmlab/CloudMgnt201409/Lab3.html 12/16
12/4/2019 Openflow and Mininet
執⾏檔案並我們需要的網路環境
$ sudo ./lab3_network_subnets.py
mininet> pingall
$ cd ~/pox/pox/forwarding
mininet> pingall
www.cs.nchu.edu.tw/~snmlab/CloudMgnt201409/Lab3.html 13/16
12/4/2019 Openflow and Mininet
k5 -> h1 h2 h3 k4 k6
k6 -> h1 h2 h3 k4 k5
*** Results: 0% dropped (30/30 received)
^c
^CINFO:core:Going down...
INFO:openflow.of_01:[00-00-00-00-00-01 2] disconnected
INFO:openflow.of_01:[00-00-00-00-00-02 1] disconnected
INFO:core:Down.
從伺服器上抓已經修改好的檔案
$ wget http://www.cs.nchu.edu.tw/~snmlab/CloudMgnt201409/l3_learning_lab3.py
確認檔案存在
$ ls
$ nano -c l3_learning_lab3.py
# 191 ⾏新增
srcaddr = packet.next.srcip
# 203 ⾏新增
if dstaddr == '10.0.0.1':
msg = of.ofp_flow_mod()
msg.match.dl_type = 0x800
msg.match.nw_dst = IPAddr("10.0.0.1")
event.connection.send(msg.pack())
elif srcaddr == '10.0.0.1':
msg = of.ofp_flow_mod()
msg.match.dl_type = 0x800
msg.match.nw_src = IPAddr("10.0.0.1")
event.connection.send(msg.pack())
else:
actions = []
actions.append(of.ofp_action_dl_addr.set_dst(mac))
actions.append(of.ofp_action_output(port = prt))
match = of.ofp_match.from_packet(packet, inport)
match.dl_src = None # Wildcard source MAC
msg = of.ofp_flow_mod(command=of.OFPFC_ADD,
idle_timeout=FLOW_IDLE_TIMEOUT,
hard_timeout=of.OFP_FLOW_PERMANENT,
www.cs.nchu.edu.tw/~snmlab/CloudMgnt201409/Lab3.html 14/16
12/4/2019 Openflow and Mininet
buffer_id=event.ofp.buffer_id,
actions=actions,
match=of.ofp_match.from_packet(packet,
inport))
event.connection.send(msg.pack())
mininet> pingall
已經完成作業的同學不好意思,⿇煩再寄⼀份檔案到我信箱。
可繳交作業時間不會改變,請同學盡速完成作業。
www.cs.nchu.edu.tw/~snmlab/CloudMgnt201409/Lab3.html 15/16
12/4/2019 Openflow and Mininet
繳交作業時請關閉POX和Mininet,避免衝突。
作業檢查⾴
註:助教會不定時修改網⾴注意事項,遇到問題不妨先重新整理網⾴更新內容啾啾
最新修改⽇期 2014/12/17
www.cs.nchu.edu.tw/~snmlab/CloudMgnt201409/Lab3.html 16/16