昨天建立了vlan tag的Flow規則,今天會往下再談一些與建制ONOS控制器的環境
在網路的應用場景中,常有流量需要有順序性的經過網路功能的設備,如防火牆、VPN等元件,而在傳統網路下,網路的拓樸是難以變更的,而現今可以利用SDN架構的靈活度,使得服務功能鏈變得更加容易部署與動態修改。
預計建立下圖的網路拓樸,以模擬服務功能鏈的效果。從h1、h2 ping h4,在同個網段底下會直接走紅色線路,預計在h3使用iptables的方式模擬防火牆,且將來源流量為h1、h2的都直接導進h3做過濾後,在送到目標主機(h4)。
建立上圖網路拓樸,--mac為簡化mac address的參數
啟用第三台主機的轉發功能
mn --topo=single,4 --mac
h3 echo 1 > /proc/sys/net/ipv4/ip_forward
group table:當有多個相同的網路功能服務時,可以實現負載平衡的需求
但本測驗只有一個bucket,無法展現負載平衡的效果
以下指令是設置修改目標的mac位置
sh ovs-ofctl -O OpenFlow13 add-group s1 "group_id=1,type=select,bucket=actions=set_field:00:00:00:00:00:03->eth_dst,resubmit(,2)"
sh ovs-ofctl -O OpenFlow13 add-group s1 "group_id=2,type=select,bucket=actions=set_field:00:00:00:00:00:04->eth_dst,resubmit(,2)"
在table 0中,加入輸入port與來源ip的條件,匹配後轉發到剛剛建立的group table
sh ovs-ofctl -O OpenFlow13 add-flow s1 "priority=30,ip,in_port=1,nw_src=10.0.0.1 actions=group:1"
sh ovs-ofctl -O OpenFlow13 add-flow s1 "priority=30,ip,in_port=2,nw_src=10.0.0.2 actions=group:1"
sh ovs-ofctl -O OpenFlow13 add-flow s1 "priority=30,ip,in_port=3,nw_src=10.0.0.3 actions=group:2"
加入table 2,並增加條件為目標mac address,最後轉送到相應的目標port上
sh ovs-ofctl -O OpenFlow13 add-flow s1 "table=2,priority=30,ip,dl_dst=00:00:00:00:00:03 actions=output:3"
sh ovs-ofctl -O OpenFlow13 add-flow s1 "table=2,priority=30,ip,dl_dst=00:00:00:00:00:04 actions=output:4"
使用ping工具測試流量的轉發,可以發現使用ping之後通過flow規則的封包數量從0增加到3
將h3虛擬主機添加iptables,過濾掉icmp的封包,可以看到有成功攔截了三個封包
當然也可以啟用一個web服務來測試,更有感覺
並也在h3上面添加過濾tcp封包的規則
h4 python -m SimpleHTTPServer 80 &
h3 iptables -A FORWARD -p tcp -s 10.0.0.2 -j DROP
可以看到當h2使用wget下載時無法連線成功,而h1可以順利的下載,並在h3上面也看到了攔截tcp封包的訊息
進入到ONOS下載壓縮檔
https://wiki.onosproject.org/display/ONOS/Downloads
運行環境
./onos-2.0.0/bin/onos-service
擁有了執行環境後,還需要準備開發APP的環境,是使用java開發與Maven編譯
on ubuntu
apt-get update && apt-get upgrade
apt-get -y install maven
apt-get install software-properties-common
apt-add-repository ppa:webupd8team/java
apt-get update
apt-get install oracle-java8-installer
export JAVA_HOME=/usr/lib/jvm/java-8-oracle
export M2_HOME=/opt/maven
export MAVEN_HOME=/opt/maven
export PATH=${M2_HOME}/bin:${PATH}
建立一個onos app
git clone https://gerrit.onosproject.org/onos
cd onos
./tools/dev/bin/onos-create-app app org.foo foo-app 1.0-SNAPSHOT org.foo.app
https://wiki.onosproject.org/display/ONOS/ONOS