一、ovs的安装
安装ovs有两种方法,一种是源码安装(详见:Ubuntu下安装部署openvswitch和一些安装的异常处理(ovs安装)_北风-CSDN博客);
另一种是通过Ubuntu的apt进行安装,以下详解这种方式:
首先,通过命令apt search openvswitch搜索ovs,如下图所示,可以看出搜出了各种ovs的组件。
接下来,需要对ovs进行下载安装,根据上图可以看出需要安装openvswitch-switch,输入命令apt install openvswitch-switch进行安装,如下图所示。
安装完成后,输入命令ovs-vsctl show查看是否安装成功,如果安装成功如下图所示。
二、ovs命令ovs-vsctl介绍
注意:OpenvSwitch的操作命令有若干个,其中比较重要的有
ovs-vsctl 获取或者更改ovs-vswitchd的配置信息,此工具操作的时候会更新ovsdb-server中的数据库
ovs-ofctl 操作交换机里的流表
ovsdb-tool 对ovsdb数据库操作,不经过ovsdb-server模块
接下来对ovs-vsctl这个命令做一些介绍:
1.查看网桥和端口
ovs-vsctl show
2.创建一个网桥
ovs-vsctl add-br br0
ovs-vsctl set bridge br0 datapath_type=netdev
# 设置交换机的dpid
ovs-vsctl set bridge br0 other-config:datapath-id=0000000000000001
# 查看设置是否成功
ovs-ofctl show br0
3.添加/删除一个端口
# for system interfaces
ovs-vsctl add-port br0 eth1
ovs-vsctl del-port br0 eth1
# for DPDK
ovs-vsctl add-port br0 dpdk1 -- set interface dpdk1 type=dpdk options:dpdk-devargs=0000:01:00.0
# for DPDK bonds
ovs-vsctl add-bond br0 dpdkbond0 dpdk1 dpdk2 \
-- set interface dpdk1 type=dpdk options:dpdk-devargs=0000:01:00.0 \
-- set interface dpdk2 type=dpdk options:dpdk-devargs=0000:02:00.0
# or new version
ovs-vsctl add-port br0 dpdkbond0 \
-- set interface dpdkbond0 type=dpdk options:dpdk-devargs=0000:01:00.0,0000:02:00.0
4.设置/清除网桥的openflow协议版本
ovs-vsctl set bridge br0 protocols=OpenFlow13
ovs-vsctl clear bridge br0 protocols
5.查看某网桥当前流表
ovs-ofctl dump-flows br0
ovs-ofctl -O OpenFlow13 dump-flows br0
ovs-appctl bridge/dump-flows br0
6.设置/删除控制器
ovs-vsctl set-controller br0 tcp:1.2.3.4:6633
ovs-vsctl del-controller br0
7.查看控制器列表
ovs-vsctl list controller
8.设置/删除被动连接控制器
ovs-vsctl set-manager tcp:1.2.3.4:6640
ovs-vsctl get-manager
ovs-vsctl del-manager
9.设置/移除可选选项
ovs-vsctl set Interface eth0 options:link_speed=1G
ovs-vsctl remove Interface eth0 options link_speed
10.设置fail模式,支持standalone或者secure
standalone(default):清除所有控制器下发的流表,ovs自己接管
secure:按照原来流表继续转发
ovs-vsctl del-fail-mode br0
ovs-vsctl set-fail-mode br0 secure
ovs-vsctl get-fail-mode br0
11.查看接口id等
ovs-appctl dpif/show
12.查看接口统计
ovs-ofctl dump-ports br0
三、数据流转发试验
本次试验利用两个network namespace作为两台主机(详见:两个network namespace通过路由实现互通_北风-CSDN博客),利用ovs作为交换机连接两台主机,新建四个网卡分别分配IP地址,具体的拓扑图如下所示。
(1)使用命令ip netns add ns,新建两个namespace,即ns1和ns2。如下图所示。
(2)使用命令iip link add veth1-ns1 type veth peer name veth2-ns,新建两对网卡,分别作为通信两天链路。如下图所示。
(3)使用命令ip link set veth1-ns netns ns,将网卡veth1-ns1和veth1-ns2分别分配给ns1和ns2。如下图所示。
(4)使用ip netns exec ns bash命令,分别进入ns1空间和ns2的空间下,对空间内的各个网卡进行启动,然后对veth分配ip地址,如下图所示,第一张图对ns1的操作,第二张图对ns2的操作。
(5)进入物理主机的终端中,启动veth2-ns1和veth2-ns2网卡,再分别为其分配IP地址。如下图所示。
(6)此时就需要新建一个ovs交换机连接两个网络空间,在物理机的终端中使用命令ovs-vsctl add-br vswitch1-2新建网桥vswitch1-2,如下图所示。
(7)为网桥新建网卡,也就是将veth2-ns1和veth2-ns2两个网卡加入网桥vswitch1-2中,使用命令ovs-vsctl add-port vswitch1-2 veth2-ns添加端口。如下图所示。
(8)添加完成后,此时由于所以的ip地址都在同一个网段之中,所以ns1和ns2之间就可以ping通,进入ns的空间下,如下图所示。
四、流表操作入门
ovs支持openflow协议,数据的转发都是按照流表进行的。
查看网桥的流表命令:
ovs-ofctl dump-flows br0
ovs-ofctl -O OpenFlow13 dump-flows br0
ovs-appctl bridge/dump-flows br0
查看网桥中端口对应的number:
ovs-ofctl show br0
添加普通流表
ovs-ofctl add-flow br0 in_port=1,actions=output:2
删除所有流表
ovs-ofctl del-flows br0
按匹配项来删除流表
ovs-ofctl del-flows br0 "in_port=1"
(1)使用命令ovs-ofctl dump-flows vswitch1-2,查看vswitch1-2的流表。如下图所示。可以看出,此时的流表优先级为零,action=normal代表ovs执行普通交换机的功能。
(2)使用命令ovs-ofctl del-flows vswitch1-2,删除流表项,此时进入ns1,查看是否还可以ping同ns2。如下图所示。
(3)添加流表项,使ns1和ns2之间能够ping通,使用命令ovs-ofctl add-flow vswitch1-2 in_port= ,actions=output: ,添加流表转发规则让1端口流入的数据从2端口转发出去,2端口流入的数据从1端口转发出去,在添加流表之前需要使用命令ovs-ofctl show vswitch1-2查看一下各个端口的number。如下图所示。
各个端口对应的number:
添加流表项:
此时,ns1和ns2就可以相互ping通了,如下图所示。
关于ovs的全部命令,可参考详细文档:ovs-commands-reference.pdf_openvswitch流表控制-网络安全文档类资源-CSDN下载