Open vSwitch操作手册
实验2:OpenvSwitch虚拟交换机实践

实验2:OpenvSwitch虚拟交换机实践作业链接:⼀、实验⽬的1. 能够对Open vSwitch进⾏基本操作;2. 能够通过命令⾏终端使⽤OVS命令操作Open vSwitch交换机,管理流表;3. 能够通过Mininet的Python代码运⾏OVS命令,控制⽹络拓扑中的Open vSwitch交换机⼆、实验环境1. 下载虚拟机软件Oracle VisualBox 或 VMware;2. 在虚拟机中安装Ubuntu 20.04 Desktop amd64,并完整安装Mininet;三、实验要求(⼀)基本要求1.创建OVS交换机,并以ovs-switchxxx命名,其中xxx为本⼈在选课班级中的序号,例如ovs-switch001, ovs-switch088等。
在创建的交换机上增加端⼝p0和p1,设置p0的端⼝号为100,p1的端⼝号为101,类型均为internal;为了避免⽹络接⼝上的地址和本机已有⽹络地址冲突,需要创建虚拟⽹络空间(参考命令netns)ns0和ns1,分别将p0和p1移⼊,并分别配置p0和p1端⼝的ip地址为192.168.0.100、192.168.0.101,⼦⽹掩码为255.255.255.0;最后测试p0和p1的连通性。
创建ovs交换机,并添加端⼝和配置虚拟空间#创建ovs交换机sudo ovs-vsctl add-br ovs-switch012#添加p0、p1端⼝,并按要求配置sudo ovs-vsctl add-port ovs-switch012 p0 -- set Interface p0 ofport_request=100 type=internalsudo ovs-vsctl add-port ovs-switch012 p1 -- set Interface p1 ofport_request=101 type=internal#查看端⼝信息sudo ethtool -i p0sudo ethtool -i p1#创建并配置虚拟空间sudo ip netns add ns0sudo ip link set p0 netns ns0sudo ip netns exec ns0 ip addr add 192.168.0.100/24 dev p0sudo ip netns exec ns0 ifconfig p0 promisc upsudo ip netns add ns1sudo ip link set p1 netns ns1sudo ip netns exec ns1 ip addr add 192.168.0.101/24 dev p1sudo ip netns exec ns1 ifconfig p1 promisc up查看ovs交换机状态测试连通性2.使⽤Mininet搭建的SDN拓扑,如下图所⽰,要求⽀持OpenFlow 1.3协议,主机名、交换机名以及端⼝对应正确。
ovs常用命令

OVS常用命令概述Open vSwitch(OVS)是一种开源的虚拟交换机软件,用于实现软件定义网络(SDN)。
OVS提供了一系列的命令,用于管理和配置交换机。
本文将介绍OVS常用命令的用法及其相关参数。
OVS命令的基本语法OVS命令的基本语法如下所示:ovs-ofctl <命令> <选项> <交换机名称> <参数>其中,ovs-ofctl是使用OVS命令的基本命令,<命令>是具体的操作命令,<选项>是命令的可选参数,<交换机名称>是需要操作的交换机名称,<参数>是对应命令的参数。
OVS命令的常用操作本节将介绍OVS命令的常用操作,包括添加流表、修改流表、删除流表等。
添加流表使用ovs-ofctl命令可以向交换机添加流表。
添加流表的命令如下:ovs-ofctl add-flow <交换机名称> <流表规则>其中,<流表规则>是要添加的流表规则,可以指定流表的匹配字段、动作等。
修改流表使用ovs-ofctl命令可以修改交换机上已有的流表。
修改流表的命令如下:ovs-ofctl mod-flow <交换机名称> <旧流表规则> <新流表规则>其中,<旧流表规则>是要修改的旧流表规则,<新流表规则>是修改后的新流表规则。
删除流表使用ovs-ofctl命令可以删除交换机上的流表。
删除流表的命令如下:ovs-ofctl del-flows <交换机名称> [<流表规则>]其中,<流表规则>是要删除的流表规则,如果不指定则删除交换机上的所有流表。
OVS命令的实例应用本节将通过实际的案例,展示OVS命令的实际应用情况。
示例一:添加流表假设我们需要向名为sw0的交换机添加一条流表规则,匹配源IP地址为10.0.0.1的数据包,并将其输出到端口1。
OpenvSwitch完全使用手册

OpenvSwitch完全使用手册本文主要参考Overview of functionality and components以及Frequently AskedQuestions以及结合自己的理解。
/index.php/openv-switch-full-guide/1 什么是OpenvSwitchOpenvSwitch,简称OVS是一个虚拟交换软件,主要用于虚拟机VM环境,作为一个虚拟交换机,支持Xen/XenServer, KVM, and VirtualBox多种虚拟化技术。
OpenvSwitch还支持多个物理机的分布式环境。
在这种某一台物理机器的虚拟化环境中,一个虚拟交换机(vswitch)主要有如下两个作用:∙传递虚拟机VM之间的流量∙以及实现VM和外界网络的通信如下图所示:整个OVS代码用C写的。
目前有以下功能:∙Standard 802.1Q VLAN model with trunk and access ports∙NIC bonding with or without LACP on upstream switch∙NetFlow, sFlow(R), and mirroring for increased visibility∙QoS (Quality of Service) configuration, plus policing∙GRE, GRE over IPSEC, VXLAN, and LISP tunneling∙802.1ag connectivity fault management∙OpenFlow 1.0 plus numerous extensions∙Transactional configuration database with C and Python bindings∙High-performance forwarding using a Linux kernel module2 OpenvSwitch的组成OVS的核心组件包括 ovsdb-server,ovs-vswitchd,ovs kernel module。
OpenVSwitch配置总结

一、安装OVSsudo apt-get install openvswitch-controller openvswitch-switch openvswitch-datapath-source(与网上之前的资料相比,没有安装openvswitch-brcompat,提示没有这个包。
笔者目前的使用来看没有问题,可能是linux内核或OVS版本变化造成的,不再需要安装?)二、配置OVS虚拟OpenFlow交换机1.新建一个桥(交换机),命名为s1:sudo ovs-vsctl add-br s1注意:进行OVS设置时很容易造成虚拟交换机与物理交换机构成二层环路(比如虚拟交换机包含两块网卡,而这两块网卡都连接到物理交换机上,就是一个环路),一旦有广播报文,比如ARP请求,就会引发广播风暴,使网络瘫痪。
因此,应该把虚拟交换机开启STP支持,避免广播风暴:ovs−vsctl set bridge 交换机名stp_enable=true2.启动要添加到虚拟交换机s1上的物理端口(物理网卡,这里是eth0和eth3)。
如果ifconfig里已经有了,那就不用重新启动了。
sudo ifconfig eth3 upsudo ifconfig eth0 up3.添加物理端口到虚拟交换机s1:sudo ovs-vsctl add-port s1 eth3sudo ovs-vsctl add-port s1 eth04.设置IP:OpenFlow交换机与控制器连接需要用到TCP连接,因此交换机需要设置IP。
但当把物理端口添加到虚拟交换机上之后,这些物理端口上原先的IP设置将失效(IP属于三层,而交换机工作在二层),无法与外界进行三层的互联。
解决方法是添加一个类型为internal的端口,然后设置IP和路由(本例是添加一个名为veth3的虚拟端口):首先,如果原先端口有设置IP,应将其重置:sudo ifconfig eth3 0然后添加虚拟端口:sudo ovs-vsctl add-port s1 veth3sudo ovs-vsctl set interface veth3 type=internal这时如果执行ifconfig就会发现多了一个名为veth3的端口。
Openvswitch配置手册.en

Netfilter Workshop, Seville, Spain
Simon Horman <simon@> Horms Solutions Ltd., Tokyo
October 2010
Open vSwitch源自ServerOpen vSwitch Datapath Open vSwitch Controller
Forward to a port or ports, mirror Encapsulate and forward to controller Drop
3 4
And returns the packet to the datapath Subsequent packets are handled directly by the datapath
Isolated
May only communicate with endpoints on promiscuous ports e.g.: Hosts that only require access to the gateway
Private VLANs — Domain View
P C1 C2 I
Open vSwitch Concepts
A switch contains ports A port may have one or more interfaces
Bonding allows more than once interface per port
Packets are forward by flow
A rate and burst can be assigned to an Interface Conceptually similar to Xen’s netback credit scheduler # ovs-vsctl set Interface tap0 ingress_policing_rate=100000 # ovs-vsctl set Interface tap0 ingress_policing_burst=10000 Simple Appears to work as expected
安装和配置Open vSwitch

Ubuntu12.04-alternate上安装ovs-1.9.3参考INSTALL.DebianOpen vSwitch各版本及所支持的内核Open vSwitch Linux kernel------------ -------------1.4.x2.6.18 to3.21.5.x2.6.18 to3.21.6.x2.6.18 to3.21.7.x2.6.18 to3.31.8.x2.6.18 to3.41.9.x2.6.18 to3.81.10.x2.6.18 to3.81.11.x2.6.18 to3.82.0.x 2.6.32 to3.102.1.x 2.6.32 to3.112.2.x 2.6.32 to3.14安装必要的编译支持sudo apt-get intall build-essentialsudo apt-get intall libssl-devsudo apt-get intall openssl下载openvswitch-1.9.3.tar.gz,解压到Home文件夹cd openvswitch-1.9.3安装必要的依赖库参照debian/control文档的Build-Depends部分来安装所有依赖库,如:sudo apt-get intall debhelper运行dpkg-checkbuilddeps可查看尚未安装的依赖库运行:fakeroot debian/rules binary编译,并执行一些单元测试(时间略长)。
完成后生成各种.deb包。
使用dpkg -i 包名安装上述生成的包,只需安装几个核心包先装datapath-dkms包,再装common包,然后装switch包。
装完之后ovs就自动被加载至内核,可用lsmod | grep openvswitch确认。
初始化ovsdb数据库:ovs-vsctl --no-wait init上述步骤执行完毕后就可参考OpenvSwitch安装及配置.pdf的第六部分进行ovs的配置和操作。
OpenvSwitch使用笔记

OpenvSwitch使用笔记Open vSwitch使用笔记这篇笔记老早就写了,其中有大段引用,出处已然忘记。
贴出来,希望对大家有些帮助。
1. Open vSwitch介绍1.1虚拟化网络架构图1.2 Open vSwitch功能介绍2. 安装,启动,关闭2.1 源码安装2.2 apt安装2.3 启动脚本2.4 关闭脚本2.5 virsh启动3. 配置,使用3.1流规则3.2VLAN3.3 sflow3.4接入物理机4. 遇到的问题4.1找不到opevswitch_mod.ko和 brcompatd.ko内核模块怎么办?4.2 Xen无法创建虚拟机?4.3关于兼容模块brcompatd.ko4.4 tap和vif的区别4.5深入认识tap和tun4.6当没有内核支持的时候,如何使用ovs?4.7什么叫虚拟边缘网络?4.8关于软交换(待续)4.9网络设备虚拟化(待续)4.10网桥能有IP么?1.1虚拟化网络架构图:1.2 Open vSwitch功能介绍:Open vSwitch的目标,是做一个具有产品级质量的多层虚拟交换机。
通过可编程扩展,可以实现大规模网络的自动化(配置、管理、维护)。
它支持现有标准管理接口和协议(比如netFlow,sFlow,SPAN,RS 下文将会介绍几个配置实例:安全方面的VALN,流量监控方面的sflow,访问控制方面的openflow。
2.1 源码安装[root@localhost ~]# tar –xzvf openvswitch-1.1.0pre2.tar.gz进入解压后目录,输入以下命令配置Open vSwitch工程,生成Makefile文件。
[root@localhost ~]# ./configure --with-linux=/lib/modules/`uname -r`/build–with- linux:生成内核模式的Open vSwitch时需指定的内核源码编译目录指定OpenvSwitch的安装位置加参数:–prefix=/…如有其他问题可参考源码根目录下的帮助文件:INSTALL.Linux编译、链接、生成和安装Open vSwitch,命令如下,make install目录只安装Open vSwitch除内核模块外的其他所有模块,如ovs-vsctl、ovs-vswitchd、ovs-ofctl等编译、链接、生成和安装Open vSwitch,命令如下,make install目录只安装Open vSwitch除内核模块外的其他所有模块,如ovs-vsctl、ovs-vswitchd、ovs-ofctl等[root@localhost ~]# make[root@localhost ~]# make install卸载原有虚拟网桥模块,命令如下,如果Xend正常启动,将自动加载linux虚拟网桥模块bridge.ko。
openvswitch 参数

一、OpenvSwitch 简介OpenvSwitch 是一个用于虚拟化的开源软件交换机,它可以在虚拟化环境中提供网络连接,可用于构建和管理虚拟化网络。
它支持多层交换功能、QoS 等多种网络功能,可以与虚拟化评台(如KVM、Xen、VMware等)进行集成,提供虚拟机间和虚拟机与物理网络之间的通信。
二、OpenvSwitch 参数介绍1. Bridge 参数在 OpenvSwitch 中,Bridge 是一个虚拟的二层交换机,它用于连接不同的端口和虚拟机,通过设置 Bridge 参数可以对其进行配置和管理。
- stp 参数:STP(Spanning Tree Protocol)是一种用于防止网络环路的协议,可以通过设置该参数来启用或者禁用 STP 功能。
- f本人l-mode 参数:当 Bridge 下的所有端口都失效时,可以通过设置 f本人l-mode 参数来决定 Bridge 的行为,可以选择 secure 或者 standalone 模式。
2. Port 参数在 OpenvSwitch 中,Port 是 Bridge 的具体端口,用于连接外部网络或虚拟机,通过设置 Port 参数可以对其进行配置和管理。
- tag 参数:可以为 Port 设置 VLAN 标签,用于实现 VLAN 的隔离和区分。
- trunks 参数:可以为 Port 设置可以通过的 VLAN ID,从而实现多个 VLAN 的通信。
3. Controller 参数Controller 是 OpenvSwitch 的控制器,用于控制交换机的行为,通过设置 Controller 参数可以对其进行配置和管理。
- controller 参数:可以设置 OpenvSwitch 的控制器,以实现交换机的远程控制和管理。
- controller-rate 参数:可以控制控制器的速率,用于限制控制器的数据流量。
4. QoS 参数OpenvSwitch 支持 QoS(Quality of Service),可以通过设置 QoS 参数来对网络流量进行控制和调度。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录1、Open vSwitch各模块简要介绍如下: (1)2、基于 Open vSwitch 的 OpenFlow 实践(ubuntu 14.04) (1)2.1 OpenvSwitch安装 (1)2.2 OpenFlow 命令 (3)2.4修改数据包 (9)2.5重定向数据包 (10)2.6修改vlan tag (11)3、Open vSwitch连接到OpenDaylight (14)4、Open vSwitch常用操作 (17)1、OVS各模块简要介绍如下:ovs-vswitchd:主要模块,实现switch的daemon,包括一个支持流交换的Linux内核模块;ovsdb-server:轻量级数据库服务器,提供ovs-vswitchd获取配置信息;ovs-dpctl:用来配置switch内核模块;一些Scripts and specs 辅助OVS安装在Citrix XenServer上,作为默认switch;ovs-vsctl:查询和更新ovs-vswitchd的配置;ovs-appctl:发送命令消息,运行相关daemon。
OVS提供了支持OpenFlow的特性实现,包括:ovs-ofctl:查询和控制OpenFlow交换机和控制器;ovs-pki:OpenFlow交换机创建和管理公钥框架;ovs-tcpundump:tcpdump的补丁,解析OpenFlow的消息。
2、基于Open vSwitch 的OpenFlow 实践(ubuntu 14.04)1.OpenFlow 命令如何创建交换机?2.如何将一个端口添加到交换机上?3.如何查看ovs结构?2.1 OpenvSwitch安装查看ubuntu版本:Ubuntu 14.04的OVS版本,已经是2.02,所以默认安装就可以。
不过不同的发行版,ovs 的名字会有点不同。
本次实验我们选择openvswitch-switch安装。
成功安装时在命令行可看到openvswich-switch start/running的字样。
执行查看OVS运行情况OVS中最重要的组件是ovs-vswitchd,它实现了OpenFlow交换机的核心功能,并且通过netlink协议直接和OVS的内核模块进行通信。
交换机运行过程中,ovs-vswitchd还会将交换机的配置、数据流信息及其变化保存到数据库ovsdb中,因为这个数据库由ovsdb-server直接管理,所以ovs-vswitchd需要和ovsdb-server通过UNIX socket机制进行通信以获得或者保存配置信息。
数据库ovsdb的存在,使得OVS交换机的配置能够被持久化存储,即便设备被重启后相关的OVS配置仍旧能够存在。
查看OVS版本,ubuntu默认的OVS版本是2.0.2。
查看OVS 支持的OpenFlow 协议的版本,其中0x1代表OpenFlow1.0,0x4代表OpenFlow1.32.2 OpenFlow 命令创建一个OVS交换机创建一个端口p0,设置端口p0 的OpenFlow 端口编号为100。
设置网络接口设备类型为”internal”。
创建一个name space:ns0,把p0端口接入到ns0里,并且配置ip地址192.168.1.100/24重复步骤创建p2查看创建的交换机信息,获得dpid,端口openflow端口编号。
获取openflow端口编号查看datapath 的信息互ping测试。
查看mac地址,然后运行。
有253个table;查看交换机中的所有流表项。
执行时如果出现图示错误,将openvswitch-switch重启一次。
输出如下信息:表示此时actions=NORMAL表示ovs采用匹配MAC地址的形式转发包。
2.3流规则管理每条流规则由一系列字段组成,分为基本字段、条件字段和动作字段三部分。
基本字段包括:•生效时间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 等,一条流规则可有多个动作,动作执行按指定的先后顺序依次完成。
2.4修改数据包屏蔽所有进入OVS 的以太网广播数据包屏蔽STP 协议的广播数据包修改数据包,添加新的OpenFlow 条目,修改从端口p0 收到的数据包的源地址为9.181.137.1从端口p0(192.168.1.100)发送测试数据到端口p1(192.168.1.101),就是没啥响应。
新开一个终端,进入根目录,执行如下指令。
等几分钟,会出现如下结果。
说明下发的OpenFlow流生效了,端口p0收到的数据包源地址被修改了。
2.5重定向数据包这个时候你从p2里,如上图所示。
2.6修改vlan tag删除网桥,并新建。
具体步骤可参照前面的内容。
在创建好ovs -switch 网桥后,并添加p0,p1,p2端口后,可以继续如下实验。
执行指令,记录下p0,p1,p2的mac 地址,方便后续实验使用。
修改端口 p1 的 VLAN tag 为 101,使端口 p1 成为一个隶属于 VLAN 101 的端口现在由于端口 p0 和 p1 属于不同的 VLAN ,它们之间无法进行数据交换。
我们使用 ovs-appctl ofproto/trace 生成一个从端口 p0 发送到端口 p1 的数据包,这个数据包不包 含任何 VLAN tag ,并观察 OVS 的处理过程在第一行输出中,“Flow:”之后的字段描述了输入的流的信息。
由于我们没有指定太多信反过来从端口p1 发送数据包,由于p1 现在是带有VLAN tag 101 的Access 类型的端口,所以数据包进入端口p1 之后,会被OVS 添加VLAN tag 101 并发送到端口p03、OVS连接到OpenDaylight新创建一个ubuntu 14.04的虚拟机。
设置ovs的控制器为OpenDaylight,192.168.202.137 就是OpenDaylight虚拟机的IP。
设置OVS 的连接模式为secure 模式执行指令,查看网桥。
若有如下流表:执行:此时是ping不通的。
如下指令查看流表,此时为空流表。
则需要手动添加流表。
查看此时ovs-switch中的流表。
然后用p0 ping p1,就能够通。
用如下网址登入OpenDaylight的GUI,在Topology中就可以看到拓扑信息。
4、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-br8.列出网桥中的所有端口:ovs-vsctl list-ports 交换机名9.列出所有挂接到网卡的网桥:ovs-vsctl port-to-br 端口名(网卡名)10.查看open vswitch的网络状态:ovs-vsctl show11.查看Open vSwitch 中的端口信息(交换机对应的dpid,以及每个端口的OpenFlow 端口编号,端口名称,当前状态等等):ovs-ofctl show 交换机名12.修改dpid:ovs-vsctl set bridge 交换机名other_config:datapath-id=新DPID13.修改端口号:ovs-vsctl set Interface 端口名ofport_request=新端口号14.查看交换机中的所有Table:ovs-ofctl dump-tables ovs-switch15.查看交换机中的所有流表项:ovs−ofctl dump−flows ovs-switch16.删除编号为100 的端口上的所有流表项:ovs-ofctl del-flows ovs-switch“in_port=100”17.添加流表项(以“添加新的OpenFlow 条目,修改从端口p0 收到的数据包的源地址为9.181.137.1”为例):ovs-ofctl add-flow ovs-switch “priority=1idle_timeout=0,in_port=100,actions=mod_nw_src:9.181.137.1,normal”18.查看OVS 的版本信息:ovs-appctl –version19.查看OVS 支持的OpenFlow 协议的版本:ovs-ofctl –version。