OpenvSwitch安装及配置

更新时间:2023-05-21 03:36:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

SDN/Openflow 入门资料

Open vSwitch安装及配置

N.J.C.H

一、 Open vSwitch简介

1.1概述

Open vSwitch是一个高质量的、多层虚拟交换机,使用开源Apache 2.0许可协议,由Nicira Networks开发,主要实现代码为可移植的C代码。

它的目的是让大规模网络自动化可以通过编程扩展,同时仍然支持标准的管理接口和协议(例如NetFlow, sFlow, SPAN, RSPAN, CLI, LACP, 802.1ag)。此外,它被设计位支持跨越多个物理服务器的分布式环境,类似于VMware的vNetwork分布式vswitch或Cisco Nexus 1000 V。

Open vSwitch支持多种linux虚拟化技术,包括Xen/XenServer, KVM,和 VirtualBox。

1.2模块介绍

当前最新代码包主要包括以下模块和特性:

ovs-vswitchd 主要模块,实现switch的daemon,包括一个支持流交换的Linux内核模块; ovsdb-server 轻量级数据库服务器,提供ovs-vswitchd获取配置信息;

ovs-brcompatd 让ovs-vswitch替换Linux bridge,包括获取bridge ioctls的Linux内核模块; ovs-dpctl 用来配置switch内核模块;

一些Scripts and specs 辅助OVS安装在Citrix XenServer上,作为默认switch; ovs-vsctl 查询和更新ovs-vswitchd的配置; ovs-appctl 发送命令消息,运行相关daemon;

ovsdbmonitor GUI工具,可以远程获取OVS数据库和OpenFlow的流表。

此外,OVS也提供了支持OpenFlow的特性实现,包括 ovs-openflowd:一个简单的OpenFlow交换机; ovs-controller:一个简单的OpenFlow控制器; ovs-ofctl 查询和控制OpenFlow交换机和控制器; ovs-pki :OpenFlow交换机创建和管理公钥框架;

ovs-tcpundump:tcpdump的补丁,解析OpenFlow的消息;

1.3运行原理

内核模块实现了多个“数据路径”(类似于网桥),每个都可以有多个“vports”(类似于桥内的

SDN/Openflow 入门资料

端口)。每个数据路径也通过关联一下流表(flow table)来设置操作,而这些流表中的流都是用户空间在报文头和元数据的基础上映射的关键信息,一般的操作都是将数据包转发到另一个vport。当一个数据包到达一个vport,内核模块所做的处理是提取其流的关键信息并在流表中查找这些关键信息。当有一个匹配的流时它执行对应的操作。如果没有匹配,它会将数据包送到用户空间的处理队列中(作为处理的一部分,用户空间可能会设置一个流用于以后碰到相同类型的数据包可以在内核中执行操作)。

二、准备工作

2.1说明

在linux编译内核模块,还需要安装下面的软件。如果你不能建造或安装内核模块,你可以使用userspace-only实现。

SDN/Openflow 入门资料

2.2操作

安装Open vSwitch之前确保安装了下面的软件

执行

On Linux you should ensure that /dev/urandom exists. To support TAP devices, you must also ensure that /dev/net/tun exists.

SDN/Openflow 入门资料

三、安装Open vSwitch

3.1下载

3.2解压

3.3安装

生成内核模式的Open vSwitch时需指定的内核源码编译目录,基本步骤如下

补充一下DataPath的概念,OpenFlow就是控制和数据转发分离,而控制端,就叫做Controller Path,比如floodlight等;负责转发数据的数据转发端,就叫做DataPath,也就是支持OpenFlow的硬件或者软件交换机Switch。

四、配置Open vSwitch

建立OpenVSwitch配置文件和数据库

SDN/Openflow 入门资料

启动配置数据库

如果你built Open vSwitch 没有加SSL 支持,省略--private-key, --certificate, and --bootstrap-ca-cert

查启动情况

启动Open vSwitch daemon,连接到同样的Unix domain socket上

成功后,会有三个进程,一ovs_个workeq进程,一个ovs-vswitchd进程,一个ovsdb-server进程

SDN/Openflow 入门资料

升级Open vSwitch的时候,也需要升级数据库架构,步骤如下

5.1停止Open vSwitch daemons

5.2安装新的版本

方法同上,下载,解压,configure make make install

5.3升级数据库

两种情况如下

如果数据库没有重要的信息,可以直接删除数据库文件,然后用ovsdb-tool命令重新创建,方法同上。

如果要保留数据库的内容,首先把它备份一下,然后使用ovsdb-tool convert命令升级,

5.4启动Open vSwitch daemon

方法同上。

SDN/Openflow 入门资料

6.1网桥管理

6.1.1非ovsdb数据库操作

查看结果

SDN/Openflow 入门资料

6.1.2 ovsdb数据库操作

ovsdb是一个非常轻量级的数据库,与其说它是一个数据库,不如说它是一个提供增删查改等功能的临时配置缓存,之所以这么说,是因为ovsdb数据库的根本就未使用多少数据库技术,如SQL语言查询、存储过程等等。ovsdb 数据库通过模式文件“openvswitch-1.1.0pre2/vswitchd/vswitch.ovsschema”

,如要定制ovsdb数据库,可通过更改 vswitch.ovsschema 文件实现。

数据库操作的一般格式为

默认情况下ovsdb中有以下数据表

SDN/Openflow 入门资料

查看bridge数据表中的所有记录

获取bridge 的_uuid字段值

设置bridge数据表datapath_type字段的值

清除bridge数据表flood_vlans字段的值

删除uuid为69ee0c09-9e52-4236-8af6-037a98ca704d的qos记录

SDN/Openflow 入门资料

6.2流规则管理

6.2.1 流规则组成

每条流规则由一系列字段组成,分为基本字段、条件字段和动作字段三部分。

基本字段包括生效时间duration_sec、所属表项table_id、优先级priority、处理的数据包数n_packets,空闲超时时间idle_timeout等,空闲超时时间idle_timeout以秒为单位,超过设置的空闲超时时间后该流规则将被自动删除,空闲超时时间设置为0表示该流规则永不过期,idle_timeout将不包含于ovs-ofctl dump-flows brname的输出中。

条件字段包括输入端口号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等,一条流规则可有多个动作,动作执行按指定的先后顺序依次完成。

6.2.2 基本操作 查看虚拟交换机的信息

SDN/Openflow 入门资料

查看br0上各交换机端口的状态

注:输出的结果中包含了各网络接口上收到的数据包数,字节数,丢包数,错误数据包数等信息

查看br0上所有的流规则

SDN/Openflow 入门资料

删除一条流规则:删除条件字段中包含in_port=2的所有流规则

6.3应用场景设置

6.3.1 QoS设置

针对网络接口的设置:

设置网络接口eth4的带宽为1000±100kbps

注:

ingress_policing_rate:最大发送速率(单位均为kbps)

ingress_policing_burst:超过ingress_policing_rate的最大浮动值

针对交换机端口的设置:

创建在vif0.0端口上的linux-htb QoS,linux-htb QoS可以针对具有指定特征的数据包流设置最大最小带宽,且在最大带宽范围内,某一特征的数据包流可以借用其他特征数据包流未用完的带宽。

SDN/Openflow 入门资料

6.3.2端口映射

将发往eth0端口和从eth1端口发出的数据包全部定向到eth2端口

用ovs-vsctl list port命令查看eth0、eth1、eth2端口的uuid分别为: a27e5ec3-5d78-437e-8e36-d6f81679132a be52eece-1f03-4ccf-a4c6-b0b68cb25f8a bc38e1c3-60a1-468e-89d7-e4b45585b533

命令如下

6.3.3其他设置

网站屏蔽

屏蔽由Open vSwitch管理的任何主机对主机119.75.213.50的访问,但只屏蔽ip数据包(由dl_type=0x0800指定),即所有主机将无法访问该主机上所有基于IP协议的服务,如万维

注:简写形式为将字段组简写为协议名,目前支持的简写有ip,arp,icmp,tcp,udp,与流规则条件字段的对应关系如下 dl_type=0x0800 <=> ip dl_type=0x0806 <=> arp

dl_type=0x0800,nw_proto=1 <=> icmp dl_type=0x0800,nw_proto=6 <=> tcp dl_type=0x0800,nw_proto=17 <=> udp

数据包重定向

将交换机中所有的icmp协议包(由dl_type=0x0800,nw_proto=1指定)全部转发到4号端口,包括4号端口自己发出的icmp包,该流规则将导致由Open vSwitch管理的主机间以及与外部网络间都将访问ping通,但可以使用万维网、FTP等服务。

SDN/Openflow 入门资料

去除VLAN tag

去除从3号端口发来的所有VLAN数据包中的tag,然后转发

更改数据包源IP地址后转发

6.4综合应用

6.4.1构建简单的交换机

将一台有五个网卡的主机做成交换机,然后接两台一个网卡的主机到交换机上进行上网测试。

结果图如下

SDN/Openflow 入门资料

说明:

eth1后面接一台主机,IP:192.168.28.43 eth2后面接一台主机,IP:192.168.28.209 eth0、eth1、eth2都属于一台主机上的网卡

执行命令

验证:

192.168.28.43ping 192.168.28.209

SDN/Openflow 入门资料

192.168.28.209ping 192.168.28.43

可见两台机器能够相互ping通,进一步验证eth1和eth2后面的主机能够正常连上网络。

6.4.2交换机VLAN划分

这里将同一个网桥的不同网卡分配到不同的VLAN上

结构图:

SDN/Openflow 入门资料

VLAN分配情况: VLAN1:eth1,eth3 VLAN2:eth2

执行命令

SDN/Openflow 入门资料

注:

tag vlan 基于IEEE 802.1Q(vlan标准),用VID(vlan id)来划分不同的VLAN。

验证

用192.168.28.43ping192.168.28.209

用192.168.28.209 ping 192.168.28.43,也ping不通

除此之外,发现两台机器也不能上网,不能上网的原因可以是内核不支持。

进一步验证,把eth1和eth2加到同一个VLAN,如下

SDN/Openflow 入门资料

相互Ping的结果如下

需要注意的是,连接在eth1和eth2的两台机器仍然不能上网。

结论:

VLAN技术是基于二层和三层之间的隔离,可以将不同的网络用户与网络资源进行分组并通 过支持VLAN技术的交换机隔离不同组内网络设备间的数据交换来达到网络安全的目的。同一个VALN上的机器可以相互通信,不同的VLAN之前不可以通信,因为它们之间在数据链路层上是断开的,只能通过三层路由器才能访问。

6.4.3 ovs-controller测试

这里使用OpenvSwitch

自带的控制器做一些操作

部署情况:

主机192.168.28.229做ovs-controller

虚拟机192.168.1.156做vswitch受192.168.28.229控制

SDN/Openflow 入门资料

6.4.3.1 TCP方式

首先在192.168.1.156上执行 建立控制器

查看控制器

最后在192.168.1.156上执行

SDN/Openflow 入门资料

这样控制器和vswitch就连接成功了 验证如下

可见192.168.28.229和192.168.1.156连接起来了,仔细查看,他们之间建立了两个连接,一个是229的controller和156的vswitch,还有一个是229的controller和156的controller。还有一点就是在229上查看,192.168.1.156的连接名是 192.168.28.1,是因为192.168.28.1是无线路由的IP,而它192.168.1.156是无线路由器分配的IP,采用方式是NAT。

6.4.3.1 SSL方式

当ovs-vswitchd被配置为通过SSL进行连接管理器或控制器连接,下面的参数是必需的:

private-key私有密钥

指定PEM文件,其中包含的私有密钥用于SSL连接到控制器的虚拟交换机的身份。

certificate证书

指定一个的PEM文件包含一个证书签名的证书颁发机构(CA)的使用,证明了虚拟交换机的私有密钥,确定一个值得信赖的开关控制器和管理者。

ca-certCA-证书

指定PEM文件,其中包含的CA证书用于验证的虚拟交换机连接到一个值得信赖的控制器

6.5代码测试

这里对安装包文件~/openvswitch-1.7.1/tests目录下的部分代码进行简单的了解。

6.5.1 test-uuid

test-uuid.c主要产生uuid或者检查uuid

是否正确,创建一个设备或者获取一个设备的

本文来源:https://www.bwwdw.com/article/eq14.html

Top