简析yangUI流表控制

2018-11-07 03:02
网络安全和信息化 2018年3期
关键词:流表环境变量命令

基于ODL与mininet的实验环境架构

为便于学习者使用,实验环境采用虚拟机实现,依据目前计算机的主流配置,具体使用软件如下:VMware Workstation12;Ubuntu14.04 desktop;distribution-karaf-0.3.3-Lithium-SR3(ODL版本);jdk-8u73-linux-x64;apache-maven-3.3.9。实验环境要求能够连接Internet,以便安装mininet。

基本环境搭建

1安 装VMware Workstation12并注册key。

2安 装Ubuntu 14.04 desktop到VMware Workstation中,并设置该虚拟机网络环境为NAT模式。

图1 下载到虚拟机

图2 添加环境变量

具体操作请自行百度,本文不做阐述。系统安装后可以启用SSH服务,禁用防火墙、SELinux服务,便于集中精力完成流表控制。

ODL运行环境搭建

下 载distributionkaraf-0.3.3-Lithium-SR3(ODL版 本)、jdk-8u73-linux-x64、apachemaven-3.3.9到Ubuntu虚拟机内,如图1所示。

1.JDK环境安装

利用CTRL+ALT+T启动终端,在终端中进行如下操作:

(1)利用mkdir命令创建目录/usr/lib/jvm :sudo mkdir/usr/lib/jvm

(2)解压下载的JDK包到该目录:sudo tar-xzvf jdk-8u73-linux-x64.tar.gz-C/usr/lib/jvm

(3)为便于操作和记忆,改目录名为java :

sudo mv/usr/lib/jvm/jdk1.8.0_73 /usr/lib/jvm/java

2. Maven环境安装

(1)解压下载的Maven包到/usr/lib/jvm目录:

sudotar-xzvf apache-maven-3.3.9-bin.tar.gz-C/usr/lib/jvm

(2)同样修改目录名称为maven:

sudo mv/usr/lib/jvm/apache-maven-3.3.9/usr/lib/jvm/maven

3.设置环境变量,使java与maven工作

利 用gedit打 开~/.bashrc文件,在文件末位添加环境变量,如图2所示。

利用命令source~/.bashrc使环境变量生效,并可以利用echo命令查看环境变量是否生效。

4.验证环境是否成功

在终端输入mvn-v看显示内容是否成功显示设置的Maven home,Java home等信息,如图3所示。

5.安装并运行ODL控制器

(1)利 用tar命令解压ODL压缩包:tar-xzvf distribution-karaf-0.3.3-Lithium-SR3.tar.gz

(2)进入distributionkaraf-0.3.3-Lithium-SR3/bin目录:cd distributionkaraf-0.3.3-Lithium-SR3/bin

(3)利用./karaf启动ODL,启动成功如图4所示。

mininet环境架构

1.mininet安装

(1)安装git工具:sudo apt-get install git

图3 查看显示内容

图4 成功启动

图5 查看端口是否在监听

(2)利用git下载mininet:git clone git://github.com/mininet/mininet

(3)安装mininet与OpenVSwitch(后面简称OVS)

cd mininet

git tag

#版本检测

gitcheckout-b2.2.2

#切换版本到2.2.2

cd util

./install.sh -a

#安装mininet

2.测试mininet是否安装成功

(1)测试mininet是否安装成功:sudo mn --test pingall。

(2)查看mininet版本:mn --version

(3)查看OVS版本:ovsofctl --version

上述命令均成功说明mininet及OVS安装成功。

3.mininet与ODL连接

为了便于mininet与ODL连接并实现通过ODL控制mininet中的网络设备,ODL中需要安装几个feature:用于Web浏览器访问ODL的odl-dlux-all;用于发现主机节点的odll2switch-all;用于访问北向接口的odl-restconfigall等。

在启动后的ODL命令行界面执行如下命令安装:

feature:install odldlux-all

feature:install odll2switch-all

feature:install odlrestconf-all

安装好后通过netstat-tnl命令查看6633、6653、8181端口是否监听,即相应服务是否启动。

如果端口已在监听说明正常工作,如图5所示。其中,6653、6633端口启动可能需要等待较长时间,取决于计算机性能。

至此,mininet就可以与ODL连接了。mininet连接ODL可以采用mn命令,也可以使用mininet下的图形化脚本minedit.py连接。

yangUI流表控制实现

为了便于操作,本文采用图形化脚本miniedit.py建立仿真拓扑,然后与ODL建立连接。

建立mininet的网络拓扑并与ODL建立连接

1.进入mininet的example目录,利用“sudo./miniedit.py”启动图形界面建立如图6所示拓扑。其中c0为控制器,设置其属性如下:Controller Port为 6653;Controller Type为Remote Controller;Protocol为TCP;I P Address根据ODL服务器所在主机IP地址填写,由于本实验环境的mininet与ODL建立在同一服务器中,所以,可以写127.0.0.1。h1与h2主机的地址采用了默认的10.0.0.0/8段的网址,如10.0.0.1与10.0.0.2。

图6 建立的拓扑结构

图7 设置界面

图8 拓扑结构图

2.利用miniedit中的edit菜单中的Preferences对话框设置主机的网络地址,勾选Start CLI,并设置OVS使用的OpenFlow版本,本实验环境采用默认,如图7所示。

通过ODL的yangUI查看流表

1.通过Web方式登录ODL,账户与密码默认均为admin。登录成功后可以看到交换机设备,但未见主机,此时,在mininet提示符下输入pingall命令产生数据流,再次登录就可以看到完整的拓扑了,如图8所示。

2.在mininet提示符下输入“sh ovs-ofctl dumpflows s1”就可以看到交换机s1的完整流表情况。

3.在ODL的yangUI界面下定位到opendaylightinvertory下的operational下的nodes选项,利用下面path中的GET动作,可以获取到当前拓扑的所有流表信息。

4.在yangUI获取的流表信息与mininet中显示的流表信息比较,可以得出相应的各选项的含义。如本环境中,node id为“openflow:1”,交换机s1的node-connector id为“openflow:1:LOCAL”,主机的node-connector id为“openflow:1:1” 和“openflow:1:2”

由于本文主要分析流表控制,所以主要查看table list项,在里面找到table项,即id为0的表,这里面的flow list内容就对应在mininet中查看到的流表内容。

其 中flow list中id为#UF$TABLE*0-1到#UF$TABLE*0-4对应初始的流表,id为#UF$TABLE*0-5和#UF$TABLE*0-6对 应priority为10的默认流表,通过比较yangUI中的流表内容与mininet中显示的流表信息可以理解yangUI中各选项含义。如match项、action项、priority项 和table_id项,通过这些选项的含义理解,就可以利用yangUI给网络下发流表控制网络的数据流向了。

通过yangUI下发流表

通过前文的操作理解,本部分通过流表下发实现简单的数据流控制,从而让读者结合文章上下文理解流表控制的操作。

流表下发前在mininet中利用pingall可看到主机间可正常通信,并可利用sh ovs-ofctl dump-flows s1看到s1的流表情况。

下面利用yangUI的流表下发功能实现控制mininet中仿真的网络中主机间不能通信。

首先在ODL的yangUI界面下选择opendaylightinvertory下的config下的nodes选项。然后展开下方的nodes,设置如下:

node id 为openflow:1;添 加 table list(id为 0)项下的 flow list(id 为 0)项,在match项中采用了 ethernet-match,利 用主机MAC地址匹配,利用instruction list添加具体动作,instruction为apply-action-case,具体动作为drop-actioncase。为使新的流表工作,需要将优先级调高,此处priority设置为12(因为默认流表的优先级为10,所以新流表的优先级要高于原先的流表优先级才能工作),最后的table id设置为0。

设置好选项后将path中的动作设置为PUT,点send下发流表,成功后在ubuntu下的mininet中利用sh ovs-ofctl dumpflows s1命令查看流表是否下发成功。

此时,主机h1与h2就不能正常通信了。

如果需要控制网络再次正常通信,可再次下发流表,如将原先下发流表的优先级设置为14,动作为output-action-case,具体的output-nodeconnector设置为 1,其他设置不变(即参考前面的设置),再次下发后,主机间就可正常通信了。

总结:通过前面的操作就可以实现初步的SDN网络控制了,在实际操作中如果发现流表下发不成功的情况,一般而言就是漏设了相关项,如table id,flow id等。本文主要探讨了通过支持ODL南向协议的yangUI插件下发流表的操作内容,相对简单,主要为初学者引路。

猜你喜欢
流表环境变量命令
基于匹配动作表模型的可编程数据平面流表归并
只听主人的命令
基于时序与集合的SDN流表更新策略
从桌面右键菜单调用环境变量选项
彻底弄懂Windows 10环境变量
软件定义网络中一种两步式多级流表构建算法
移防命令下达后
一种高效的OpenFlow流表拆分压缩算法
这是人民的命令
基于三阶段DEA—Malmquist模型的中国省域城镇化效率测度及其收敛分析