openvswitch操作手册.docx
《openvswitch操作手册.docx》由会员分享,可在线阅读,更多相关《openvswitch操作手册.docx(15页珍藏版)》请在冰豆网上搜索。
openvswitch操作手册
一、OVS各模块简要介绍如下:
ovs-vswitchd:
要紧模块,实现switch的daemon,包括一个支持流互换的Linux内核模块;
ovsdb-server:
轻量级数据库效劳器,提供ovs-vswitchd获取配置信息;
ovs-dpctl:
用来配置switch内核模块;
一些Scriptsandspecs辅助OVS安装在CitrixXenServer上,作为默许switch;
ovs-vsctl:
查询和更新ovs-vswitchd的配置;
ovs-appctl:
发送死令消息,运行相关daemon。
OVS提供了支持OpenFlow的特性实现,包括:
ovs-ofctl:
查询和操纵OpenFlow互换机和操纵器;
ovs-pki:
OpenFlow互换机创建和治理公钥框架;
ovs-tcpundump:
tcpdump的补丁,解析OpenFlow的消息。
二、基于OpenvSwitch的OpenFlow实践(ubuntu14.04)
1.OpenFlow命令如何创建互换机?
2.如何将一个端口添加到互换机上?
3.如何查看ovs结构?
2.1OpenvSwitch安装
查看ubuntu版本:
lsb_release-a
Ubuntu14.04的OVS版本,已是2.02,因此默许安装就能够够。
只是不同的发行版,ovs的名字会有点不同。
apt-cachesearchopenvswitch
本次实验咱们选择openvswitch-switch安装。
apt-getinstallopenvswitch-switch
成功安装时在命令行可看到openvswich-switchstart/running的字样。
执行
ps-ea|grepovs
查看OVS运行情形
OVS中最重要的组件是ovs-vswitchd,它实现了OpenFlow互换机的核心功能,而且通过netlink协议直接和OVS的内核模块进行通信。
互换机运行进程中,ovs-vswitchd还会将互换机的配置、数据流信息及其转变保留到数据库ovsdb中,因为那个数据库由ovsdb-server直接治理,因此ovs-vswitchd需要和ovsdb-server通过UNIXsocket机制进行通信以取得或保留配置信息。
数据库ovsdb的存在,使得OVS互换机的配置能够被持久化存储,即便设备被重启后相关的OVS配置仍旧能够存在。
查看OVS版本,ubuntu默许的OVS版本是2.0.2。
ovs-appctl--version
查看OVS支持的OpenFlow协议的版本,其中
ovs-ofctl--version
2.2OpenFlow命令
创建一个OVS互换机
ovs-vsctladd-brovs-switch
创建一个端口p0,设置端口p0的OpenFlow端口编号为100。
ovs-vsctladd-portovs-switchp0--setInterfacep0ofport_request=100
设置网络接口设备类型为”internal”。
ovs-vsctlsetInterfacep0type=internal
查看设置后的结果。
ethtool-ip0
ipnetnsaddns0
iplinksetp0netnsns0
ipnetnsexecns0ifconfigp0promiscup
ovs-vsctlshow
重复步骤,创建p1
ovs-vsctladd-portovs-switchp1--setInterfacep1ofport_request=101
ovs-vsctlsetInterfacep1type=internal
ipnetnsaddns1
iplinksetp1netnsns1
ipnetnsexecns1ifconfigp1promiscup
重复步骤创建p2
ovs-vsctladd-portovs-switchp2--setInterfacep2ofport_request=102
ovs-vsctlsetInterfacep2type=internal
ipnetnsaddns2
iplinksetp2netnsns2
ipnetnsexecns2ifconfigp2promiscup
ovs-vsctlshow
查看创建的互换机信息,取得dpid,端口openflow端口编号。
ovs-ofctlshowovs-switch
获取openflow端口编号
ovs-vsctlgetInterfacep0ofport
ovs-vsctlgetInterfacep1ofport
ovs-vsctlgetInterfacep2ofport
查看datapath的信息
ovs-dpctlshow
互ping测试。
查看mac地址,然后运行。
ovs-appctlfdb/showovs-switch
查看互换机所有table
ovs-ofctldump-tablesovs-switch
有253个table;
查看互换机中的所有流表项。
ovs−ofctldump−flowsovs-switch
执行时若是显现图示错误,将openvswitch-switch重启一次。
serviceopenvswitch-switchrestart
输出如下信息:
表示现在actions=NORMAL表示ovs采纳匹配MAC地址的形式转发包。
ovs-ofctldel-flowsovs-switch“in_port=100”
删除编号为100的端口上的所有流表项
2.3流规那么治理每条流规那么由一系列字段组成,分为大体字段、条件字段和动作字段三部份。
大体字段包括:
∙生效时刻duration_sec
∙所属表项table_id
∙优先级priority、
∙处置的数据包数n_packets
∙空闲超不时刻idle_timeout等空闲超不时刻idle_timeout以秒为单位,超过设置的空闲超不时刻后该流规那么将被自动删除,空闲超不时刻设置为0表示该流规那么永只是时,idle_timeout将不包括于ovs-ofctldump-flowsbrname的输出中。
条件字段包括:
∙输入端口号in_port
∙源目的mac地址dl_src/dl_dst
∙源目的ip地址nw_src/nw_dst
∙数据包类型dl_type
∙网络层协议类型nw_proto
这些字段能够任意组合,但在网络分层结构中底层的字段未给出确信值时上层的字段不许诺给确信值,即一条流规那么中许诺底层协议字段指定为确信值,高层协议字段指定为通配符(不指定即为匹配任何值),而不许诺高层协议字段指定为确信值,而底层协议字段却为通配符(不指定即为匹配任何值),不然,ovs-vswitchd中的流规那么将全数丢失,网络无法连接。
动作字段包括正常转发normal、定向到某互换机端口output:
port、抛弃drop、更改源目的mac地址mod_dl_src/mod_dl_dst等,一条流规那么可有多个动作,动作执行按指定的前后顺序依次完成。
修改数据包
屏蔽所有进入OVS的以太网广播数据包
ovs-ofctladd-flowovs-switch“table=0,dl_src=01:
00:
00:
00:
00:
00/01:
00:
00:
00:
00:
00,actions=drop"
屏蔽STP协议的广播数据包
ovs-ofctladd-flowovs-switch"table=0,dl_dst=01:
80:
c2:
00:
00:
00/ff:
ff:
ff:
ff:
ff:
f0,actions=drop"
ovs-ofctladd-flowovs-switch"priority=1idle_timeout=0,in_port=100,actions=mod_nw_src:
9.181.137.1,normal"
从端口p0(192.168.1.100)发送测试数据到端口p1(192.168.1.101),确实是没啥响应。
新开一个终端,进入根目录,执行如下指令。
ipnetnsexecns1tcpdump-ip1icmp
等几分钟,会显现如下结果。
说明下发的OpenFlow流生效了,端口p0收到的数据包源地址被修改了。
重定向数据包
添加新的OpenFlow条款,重定向所有的ICMP数据包到端口p2
ovs-ofctladd-flowovs-switchidle_timeout=0,dl_type=0x0800,nw_proto=1,actions=output:
102
从端口p0(192.168.1.100)发送数据到端口p1(192.168.1.101)
ipnetnsexecns2tcpdump-ip2icmp
那个时候你从p2里,如上图所示。
修改vlantag
删除网桥,并新建。
具体步骤可参照前面的内容。
在创建好ovs-switch网桥后,并添加p0,p1,p2端口后,能够继续如下实验。
执行指令,记录下p0,p1,p2的mac地址,方便后续实验利用。
ovs-appctlfdb/showovs-switch
修改端口p1的VLANtag为101,使端口p1成为一个隶属于VLAN101的端口
ovs-vsctlsetPortp1tag=101
此刻由于端口p0和p1属于不同的VLAN,它们之间无法进行数据互换。
咱们利用ovs-appctlofproto/trace生成一个从端口p0发送到端口p1的数据包,那个数据包不包
含任何VLANtag,并观看OVS的处置进程
ovs-appctlofproto/traceovs-switchin_port=100,dl_src=p0的mac地址,dl_dst=p1的mac地址-generate
在第一行输出中,“Flow:
”以后的字段描述了输入的流的信息。
由于咱们没有指定太多信息,因此多数字段(例如dl_type和vlan_tci)被OVS设置为空值。
在第二行的输出中,“Rule:
”以后的字段描述了匹配成功的流表项。
在第三行的输出中,“OpenFlowactions”以后的字段描述了实际执行的操作。
最后一段以”Finalflow”开始的字段是整个处置进程的总结,“Datapathactions:
4,1”代表数据包被发送到datapath的4和1号端口。
创建一条新的Flow
ovs-ofctladd-flowovs-switch"priority=3,in_port=100,dl_vlan=0xffff,actions=mod_vlan_vid:
101,normal"
关于从端口p0进入互换机的数据包,若是它不包括任何VLANtag,那么自动为它添加VLANtag101。
再次尝试从端口p0发送一个不包括任何VLANtag的数据包,发觉数据包进入端口p0以后,会被加上VLANtag101,同时转发到端口p1上。
ovs-appctlofproto/traceovs-switchin_port=100,dl_src=p0的mac地址,dl_dst=p1的mac地址-generate
反过来从端口p1发送数据包,由于p1此刻是带有VLANtag101的Access类型的端口,因此数据包进入端口p1以后,会被OVS添加VLANtag101并发送到端口p0
ovs-appctlofproto/traceovs-switchin_port=101,dl_src=p1的mac地址,dl_dst=p0的mac地址-generate
3、OVS连接到OpenDaylight新创建一个ubuntu14.04的虚拟机。
设置ovs的操纵器为OpenDaylight,192.168.202.137确实是OpenDaylight虚拟机的IP。
ovs-vsctlset-controllerovs-switchtcp:
:
6633
设置OVS的连接模式为secure模式
ovs-vsctlsetBridgeovs-switchfail-mode=secure
执行指令,查看网桥。
ovs-vsctlshow
ovs-ofctldump-flowsovs-switch
假设有如下流表:
执行:
2
现在是ping不通的。
如下指令查看流表,现在为空流表。
那么需要手动添加流表。
ovs-ofctldump-flowsovs-switch
ovs-ofctladd-flowovs-switchtable=0,in_port=100,action=output:
flood
ovs-ofctladd-flowovs-switchtable=0,in_port=101,action=output:
flood
查看现在ovs-switch中的流表。
ovs-ofctldump-flowsovs-switch
然后用p0pingp1,就能够够通。
用如下网址登入OpenDaylight的GUI,在Topology中就能够够看到拓扑信息。
4、OVS经常使用操作:
1.添加网桥:
ovs-vsctladd-br互换机名 2.删除网桥:
ovs-vsctldel-br互换机名 3.添加端口:
ovs-vsctladd-port互换机名端口名(网卡名) 4.删除端口:
ovs-vsctldel-port互换机名端口名(网卡名) 5.连接操纵器:
ovs-vsctlset-controller互换机名tcp:
IP地址:
端口号 6.断开操纵器:
ovs-vsctldel-controller互换机名 7.列出所有网桥:
ovs-vsctllist-br 8.列出网桥中的所有端口:
ovs-vsctllist-ports互换机名 9.列出所有挂接到网卡的网桥:
ovs-vsctlport-to-br端口名(网卡名) 10.查看openvswitch的网络状态:
ovs-vsctlshow 11.查看OpenvSwitch中的端口信息(互换机对应的dpid,和每一个端口的OpenFlow端口编号,端口名称,当前状态等等):
ovs-ofctlshow互换机名 12.修改dpid:
ovs-vsctlsetbridge互换机名other_config:
datapath-id=新DPID 13.修改端口号:
ovs-vsctlsetInterface端口名ofport_request=新端口号 14.查看互换机中的所有Table:
ovs-ofctldump-tablesovs-switch 15.查看互换机中的所有流表项:
ovs−ofctldump−flowsovs-switch 16.删除编号为100的端口上的所有流表项:
ovs-ofctldel-flowsovs-switch“in_port=100” 17.添加流表项(以“添加新的OpenFlow条款,修改从端口p0收到的数据包的源地址为9.181.137.1”为例):
ovs-ofctladd-flowovs-switch“priority=1idle_timeout=0,in_port=100,actions=mod_nw_src:
9.181.137.1,normal” 18.查看OVS的版本信息:
ovs-appctl–version 19.查看OVS支持的OpenFlow协议的版本:
ovs-ofctl–version