全网最详细Open vSwitch 应用实践

目录

一、   实验环境

二、   技术与知识背景

1. Open vSwitch 概述

2. OVS 各模块的简要介绍

三.、基于 Open vSwitch 的 Open Flow 实践

1.OVS 常用操作

四、   基础技能

1.     内容与任务

2.     规划与准备

五、   基础技能的配置与操作要点

1.   交换机创建和端口 p0 、p1的配置

2.   虚拟网络空间的配置

3.   查看 OVS 交换机及测试连通性

4.   使用 ovs-ofctl 创建并测试 OpenFlow 命令

六、   进阶技能

1.     任务与要求

1)  在虚拟机环境下,打开终端运行 Floodlight;提示:

2)  创建 1 个交换机连接 4 台主机的拓扑,并连接控制器。提示:

3)     打开 floodlight 图像化界面并查看网页中的 topo。提示:

在floodlight web页面中查看网络拓扑信息

打开 floodlight 图像化界面并查看网页中的 topo

4)     在 mininet 中执行 pingall 命令,在网页中查看交换机 s1 的流表。

5)     在mininet中添加一条命令,使得 h1 不能访问其他所有主机。并在mininet 中进行 pingall

6)     删除之前添加的命令,在 mininet 中进行 pingall 测试。提示:


一、   实验环境

1.   下载虚拟机软件Oracle VisualBox 或 VMware

2.  装有 mininet、python3、Floodlight 的 Ubuntu20.04

二、   技术与知识背景

1. Open vSwitch 概述

Open vSwitch(下面简称为 OVS是由 Nicira Networks  主导的,运行在虚拟化平台(例 KVMXen)上的虚拟交换机。在虚拟化平台上,OVS 可以为动态变化的端点提供 2 交换功能,很好的控制虚拟网络中的访问策略、网络隔离、流量监控等等。

OVS 遵循 Apache 2.0 许可证, 能同时支持多种标准的管理接口和协议。OVS  也提供了对 OpenFlow 协议的支持,用户可以使用任何支持 OpenFlow 协议的控制器对 OVS 远程管理控制。

OVS  ,  有几个非常重要的概念:

Bridge: Bridge  代表一个以太网交换机(Switch),一个主机中可以创建一个或者多

Bridge  设备。

Port: 端口与物理交换机的端口概念类似,每个 Port 都隶属于一个 Bridge

Interface:  连接到 Port 的网络接口设备。在通常情况下,Port Interface  是一对

一的关系, 只有在配置 Port bond  模式后,Port Interface 是一对多的关系。

Controller: OpenFlow 控制器。OVS  可以同时接受一个或者多个 OpenFlow  控制器的管理。

Datapath: OVS  中,datapath 负责执行数据交换,也就是把从接收端口收到的数据包在流表中进行匹配,并执行匹配到的动作。

Flow table: 每个 datapath  都和一个“flow table”关联,当 datapath  接收到数据之后,OVS 会在 flow table 中查找可以匹配的 flow,执行对应的操作,  例如转发数据到另外的端口。

2. OVS 各模块的简要介绍

l   ovs-vswitchd主要模块,实现 switch daemon包括一个支持流交换的 Linux

内核模块;

l   ovsdb-server:轻量级数据库服务器,提供 ovs-vswitchd 获取配置信息;

l   ovs-dpctl:用来配置 switch 内核模块;

一些 Scripts and specs 辅助 OVS 安装在 Citrix XenServer 上,作为默认 switch

l   ovs-vsctl:查询和更新 ovs-vswitchd 的配置;

l   ovs-appctl:发送命令消息,运行相关 daemon

OVS 提供了支持 OpenFlow 的特性实现,包括:

l   ovs-ofctl:查询和控制 OpenFlow 交换机和控制器;

l   ovs-pkiOpenFlow 交换机创建和管理公钥框架;

l   ovs-tcpundumptcpdump 的补丁,解析 OpenFlow 的消息。

三.、基于 Open vSwitch Open Flow 实践

OpenFlow 是用于管理交换机流表的协议, OpenFlow 的白皮书中,Flow  被定义为某个特定的网络流量。例如,一个 TCP 连接就是一个 Flow,或者从某个 IP 地址发出来的数据包,都可以被认为是一个 Flow支持 OpenFlow  协议的交换机应该包括一个或者多个流表,流表中的条目包含:数据包头的信息、匹配成功后要执行的指令和统计信息。

当数据包进入 OVS 后,会将数据包和流表中的流表项进行匹配,如果发现了匹配的流表项,则执行该流表项中的指令集。相反,如果数据包在流表中没有发现任何匹配,OVS 通过控制通道把数据包发到 OpenFlow 控制器中。

OVS  中,ovs-ofctl  则是 OVS  提供的命令行工具。在没有配置 OpenFlow  控制器的模式下,用户可以使用 ovs-ofctl  命令通过 OpenFlow  协议去连接 OVS,创建、修改或删除 OVS 中的流表项,并对 OVS 的运行状况进行动态监控。流表项作为 ovs-ofctl 的参数,采用如下的格式:字段=值。如果有多个字段,可以用逗号或者空格分开。一些常用的字段列举如表 1 所示。

1.  流表项匹配字段

字段名称

说明

in_port=port

传递数据包的端口的 OpenFlow 端口编号

dl_vlan=vlan

数据包的 VLAN Tag  值,范围是 0-40950xffff 代表不包含

VLAN Tag  的数据包

dl_src=<MAC>

dl_dst=<MAC>

匹配源或者目标的 MAC  地址01:00:00:00:00:00/01:00:00:00:00:00  代表广播地址00:00:00:00:00:00/01:00:00:00:00:00  代表单播地址

dl_type=ethertype

匹配以太网协议类型,其中:dl_type=0x0800  代表 IPv4  协议dl_type=0x086dd  代表 IPv6  协议dl_type=0x0806  代表 ARP 协议

nw_src=ip[/netmask]

nw_dst=ip[/netmask]

dl_typ=0x0800  时,匹配源或者目标的 IPv4  地址,可以使 IP

地址或者域名

nw_proto=proto

dl_type  字段协同使用。

dl_type=0x0800  时,匹配 IP 协议编号

dl_type=0x086dd  代表 IPv6  协议编号

table=number

指定要使用的流表的编号,范围是 0-254。在不指定的情况下,默认值为 0。通过使用流表编号,可以创建或者修改多个 Table

reg<idx>=value[/mask]

交换机中的寄存器的值。当一个数据包进入交换机时,所有的寄

存器都被清零,用户可以通过 Action  的指令修改寄存器中的值

对于 addflowaddflows modflows  这三个命令,还需要指定要执行的动作:

actions=[target][,target...]

一个流规则中可能有多个动作,按照指定的先后顺序执行。

常见的操作有:

   output:port: 输出数据包到指定的端口。port 是指端口的 OpenFlow  端口编号

   mod_vlan_vid: 修改数据包中的 VLAN tag

   strip_vlan: 移除数据包中的 VLAN tag

   mod_dl_src/ mod_dl_dest:  修改源或者目标的 MAC 地址信息

   mod_nw_src/mod_nw_dst:  修改源或者目标的 IPv4 地址信息

   resubmit:port: 替换流表的 in_port 字段,并重新进行匹配

   load:value>dst[start..end]: 写数据到指定的字段

1.OVS 常用操作

1)     添加网桥:ovs-vsctl add-br  交换机名

2)     删除网桥:ovs-vsctl del-br  交换机名

3)     添加端口:ovs-vsctl add-port 交换机名 端口名(网卡名)

4)     删除端口:ovs-vsctl del-port 交换机名 端口名(网卡名)

5)     连接控制器:ovs-vsctl set-controller 交换机名 tcp:IP 地址:端口号

6)     断开控制器:ovs-vsctl del-controller 交换机名

7)     列出所有网桥:ovs-vsctl list-br

8)     列出网桥中的所有端口:ovs-vsctl list-ports 交换机名

9)     列出所有挂接到网卡的网桥:ovs-vsctl port-to-br 端口名(网卡名)

10)  查看 open vswitch 的网络状态:ovs-vsctl show

11)  查看 Open  vSwitch  中的端口信息(交换机对应的 dpid,以及每个端口的

OpenFlow 端口编号,端口名称,当前状态等等):ovs-ofctl show 交换机名

12)  修改 dpidovs-vsctl set bridge  交换机名 other_config:datapath-id= DPID

13)  修改端口号:ovs-vsctl set Interface 端口名 ofport_request=新端口号

14)  查看交换机中的所有 Tableovs-ofctl dump-tables ovs-switch

15)  查看交换机中的所有流表项:ovsofctl dumpflows ovs-switch

16)  删除编号为 100 的端口上的所有流表项:

ovs-ofctl del-flows ovs-switch in_port=100

17)  添加流表项(以“添加新的 OpenFlow  条目,匹配从端口 1 收到的数据包,动作是向端口 2 转发为例):

sh ovs-ofctl add-flow s1 in_port=1,actions= output:2

18)  查看 OVS 的版本信息:ovs-appctl version

19)  查看 OVS 支持的 OpenFlow 协议的版本:ovs-ofctl  version

四、   基础技能

1.     内容与任务

在该实验中,  我们会创建一个不连接到任何控制器的 OVS  交换机,创建 OVS  交换机的端口 p0,设置端口 p0 OpenFlow 端口编号,设置端口类型为“internal”。为了避免网络接口上的地址和本机已有网络地址冲突,我们需要创建一个虚拟网络空间 ns0,把 p0 端口移入网络空间 ns0,并配置 IP 地址。按照上述步骤再创建虚拟网络空间 ns1 和端口 p1,测试其连通性。相应的任务分解见表 2.

2.  Open vSwitch 应用实践”的任务分

任务分解

任务描述

OVS 交换机的创建

通过 ovs-octl 命令,创建一个 OVS 交换机

端口 p0 的配置

创建端口 p0,p1设置端 p0,p1 OpenFlow 配置端口编号

并设置接口类型

虚拟网络空间的配置

创建一个虚拟网络空间 ns0,把 p0 端口移入网络空间 ns0,并配置 IP 地址创建一个虚拟网络空间 ns1,把 p1 端口移入网络空间 ns1,并配置 IP 地址

查看 OVS 交换机

查看 OVS 交换机的端口信息

使用 ovs-ofctl 创建并测试 OpenFlow 命令

查看 Open vSwitch 端口信息,查看交换机中的所有 Table,查

看交换机中的所有流表项,端口互 ping 测试。

2.     规划与准备

要求学生根据上述任务要求完成必要的前期规划, 3 给出一种参考,学生可以自己提规划。

3  Open vSwitch 应用实践”的相关规划

任务分解

规划要点

参考建议

OVS 交换机的创建

OVS 交换机的名字设置

使用“ovs-octl令,创建一个名为

ovs-switch OVS 交换机

端口 p0 的配置

确定网络接口设备的类型,设置端口编号

创建端口 p0,p1设置端口 p0, p1 OpenFlow 端口编号分别为 100101并设置接口类型为“internal

虚拟网络空间的配置

将以创建的端口移入网络空间,

设置配置 IP

创建一个虚拟网络空间 ns0,把 p0 端口移入网络空间 ns0,并配置 IP 地址为192.168.1.100创建一个虚拟网络空间ns1,把 p1 端口移入网络空间 ns1 p1 IP 地址为 192.168.1.101

查看 OVS 交换机

查看所建的 OVS 交换机的配置

查看 OVS 交换机的端口信息,以便于之

后的测试 OpenFlow 命令

使用 ovs-ofctl 创建并测试OpenFlow 命令

熟悉 OpenFlow 命令,

从端口 p0192.168.1.100)发送测试数据到端口 p1192.168.1.101通过 ovsofctl命令对交换机的 Table流表项、端口信息进行查看

五、   基础技能的配置与操作要点

1.   交换机创建和端口 p0 p1的配置

创建一个新的 OVS 交换机

 ovs-vsctl add-br [名称]

如:sudo ovs-vsctl add-br ovs-switch

创建端口 p0p1,设置端口 p0 OpenFlow 端口编号为 100,设置端口p1 OpenFlow

口编号为 101如果在创建端口的时候没有指定 OpenFlow 端口编号,OVS 会自动生成一个

设置网络接口设备的类型为“internal”

sudo ovs-vsctl add-port ovs-switch p0 -- set Interface p0 ofport_request=100 type=internal
sudo ovs-vsctl add-port ovs-switch p1 -- set Interface p1 ofport_request=101 type=internal

对于 internal  类型的的网络接口,OVS  会同时在 Linux  系统中创建一个可以用来收发数据的

模拟网络设备。我们可以为这个网络设备配置 IP 地址、进行数据监听等。

查看结果

sudo ethtool -i p0
sudo ethtool -i p1

2.   虚拟网络空间的配置

为了避免网络接口上的地址和本机已有网络地址冲突我们可以创建一个虚拟网络空间ns0

p0 接口移入网络空间 ns0,并配置 IP 地址为 192.168.1.100。再创建一个虚拟网络空间ns1

p1 接口移入网络空间 ns1,并配置 IP 地址为 192.168.1.101

sudo ip netns add ns0

sudo ip link set p0 netns ns0

sudo ip netns exec ns0 ip addr add 192.168.1.100/24 dev p0

sudo ip netns exec ns0 ifconfig p0 promisc up


sudo ip netns add ns1

sudo ip link set p1 netns ns1

sudo ip netns exec ns1 ip addr add 192.168.1.101/24 dev p1

sudo ip netns exec ns1 ifconfig p1 promisc up

3.   查看 OVS 交换机及测试连通性

通过 sudo ovs-vsctl show 命令查看 OVS  交换机的信息。

 sudo ovs-vsctl show 

4.   使用 ovs-ofctl 创建并测试 OpenFlow 命令

查看 Open vSwitch  中的端口信息。从输出结果中,可以获得交换机对应的 datapath IDdpid),以及每个端口的 OpenFlow 端口编号,端口名称,当前状态。

①查看交换机中的所有 Table

sudo ovs-ofctl dump-tables ovs-switch

查看交换机中的所有流表项:

sudo ovs-ofctl dump-flows ovs-switch

③查看交换机上的端口信息:

sudo ovs-ofctl show ovs-switch

④两个端口相互测试:

        

sudo ip netns exec ns0 ping 192.168.1.101

六、   进阶技能

1.     任务与要求

通过创建拓扑连接 floodlight 控制,通过控制器的图像化界面,编辑交换机流表规则来

控制数据转发。自主完成以下任务。

1)  在虚拟环境下,打开终端运行 Floodlight;提示:

// 进入 floodlight 文件夹

cd floodlight

 //运行 floodlight 控制器

java -jar target/floodlight.jar

2)  创建 1 个交换机连接 4 台主机的拓扑,并连接控制器。提示
sudo mn --topo single,4 --controller remote,ip=172.25.254.150,port=6653

  1. ip=172.25.254.150:这是你想要 Mininet 连接的 Floodlight 控制器的 IP 地址。这个 IP 地址

是你控制器的实际网络接口地址,控制器应该在这个地址上监听 OpenFlow 消息

通过运行 ifconfig  ip a命令找到IP 地址

  1. port=6633:这是控制器监听的 OpenFlow 端口号。

通过查看floodlightdefault.properties 文件内容可知Floodlight OpenFlow 控制器正在监听端口 6633,这是 OpenFlow 交换机与控制器通信的标准端口。

3)     打开 floodlight 图像化界面并查看网页中的 topo提示

localhost:8080/ui /index.html   //在虚拟机的浏览器中访问控制器的 web UI

floodlight web页面中查看网络拓扑信息

打开 floodlight 图像化界面并查看网页中的 topo

4)     mininet 中执行 pingall 命令,在网页中查看交换机 s1 的流表。

5)     在mininet中添加一条命令,使得 h1 不能访问其他所有主机。并在mininet 中进行 pingall

测试。注意:表的序号是从 0 开始的。提示:

mininet> sh ovs-ofctl add-flow s1 "priority=65535,dl_src=8e:d0:d5:34:56:12,actions=drop"

//” 8e:d0:d5:34:56:12”mac地址,通过输入h1 ifconfig来获得h1mac地址

在网页中查看交换机 s1 的流表。

6)     删除之前添加的命令,在 mininet 中进行 pingall 测试。提示:
sh ovs-ofctl dump-flows s1 //在mininet中查看交换机s1的流表
sh ovs-ofctl del-flows s1  //删除交换机s1的流表

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值