ovs命令学习笔记

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

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

Open vSwitch 概述

在 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,执行对应的操       作, 例如转发数据到另外的端口。

Open vSwitch 实验环境配置

OVS 可以安装在主流的 Linux 操作系统中,用户可以选择直接安装编译好的软件包,或者下载源码进行编译安装。

在我们的实验环境中,使用的操作系统是 64 位 Ubuntu Server 12.04.3 LTS,并通过源码编译的方式安装了 Open vSwitch 1.11.0

$ lsb_release -a
No LSB modules are available.
Distributor ID:Ubuntu
Description:Ubuntu 12.04.3 LTS
Release:12.04
Codename:precise

OVS 的源码编译安装方式可以参考官方文档 How to Install Open vSwitch on Linux, FreeBSD and NetBSD。

安装完毕后,检查 OVS 的运行情况:

$ ps -ea | grep ovs
12533 ?        00:00:00 ovs_workq
12549 ?        00:00:04 ovsdb-server
12565 ?        00:00:48 ovs-vswitchd
12566 ?        00:00:00 ovs-vswitchd

查看 OVS 的版本信息, 我们安装版本的是 1.11.0

$ ovs-appctl --version
ovs-appctl (Open vSwitch) 1.11.0
Compiled Oct 28 2013 14:17:16

查看 OVS 支持的 OpenFlow 协议的版本


$ ovs-ofctl --version ovs-ofctl (Open vSwitch) 1.11.0 Compiled Oct 28 2013 14:17:17 OpenFlow versions 0x1:0x4

修改ovs支持OpenFLow版本:

sudo ovs-vsctl set Bridge A1 protocols=OpenFlow12,OpenFlow13


创建一个新的 OVS 交换机

$ ovs-vsctl add-br ovs-switch

·        查看交换机中的所有 Table

ovs-ofctl dump-tables ovs-switch

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

ovs−ofctl dump−flows ovs-switch

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

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

查看交换机上的端口信息

ovs-ofctl show ovs-switch

添加网桥:

#ovs-vsctl add-br br0

列出 open vswitch 中的所有网桥:

#ovs-vsctl list-br

判断网桥是否存在

#ovs-vsctl br-exists br0

将物理网卡挂接到网桥:

#ovs-vsctl add-port br0 eth0

列出网桥中的所有端口:

#ovs-vsctl list-ports br0

列出所有挂接到网卡的网桥:

#ovs-vsctl port-to-br eth0

查看 open vswitch 的网络状态:

#ovs-vsctl show

删除网桥上已经挂接的网口:

#vs-vsctl del-port br0 eth0

删除网桥:

#ovs-vsctl del-br br0

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

OVS 中,流表项作为 ovs-ofctl 的参数,采用如下的格式:字段=值。如果有多个字段,可以用逗号或者空格分开。一些常用的字段列举如下

一、两种 OVS fallback behavior 1. standalone 这种模式下,没有运行controller的情况下,OVS会自动调回普通switch模式,如果有controller的情况,ovs会自动变成 openflow switch 命令: ovs-vsctl set-fail-mode ovs-switch standalone ovs-switch替换成bridge的名字 2.secure 这种模式下,无论有没有controller, ovs都会作为openflow switch运行,也就是所有interface在bridge上,等待controller或者用户添加flow到switch来进行通信 ovs-vsctl set-fail-mode ovs-switch secure 二、 OVS常用的两个 command line tool ovs-vsctl 用来查询和配置ovs-vswitchd ovs-ofctl 管理配置openflow switch 1. 显示bridge的信息,连接到bridge上的interface,tap和端口号(port) ovs-ofctl show ovs-switch (ovs-switch代表bridge的名字,也就是虚拟的switch,下同) 2. 显示flow entries ovs-ofctl dump-flows ovs-switch 3. 添加flow ovs-ofctl add-flow ovs-switch "in_port=2,actions=output:8" flow有很多syntax, 一半来说actions之前都是match的部分,常用的一般是 in_port: switch的端口 dl_src: 源mac地址 dl_dst:目的mac地址 dl_type:以太网协议类型 0x0806是arp packet 0x0800是ip packet nw_src:源IP nw_dst:目的ip nw_proto:协议类型,注意和dl_type区分,同时也需要和dl_type一起使用,比如dl_type是ip(0x0800),那么nw_proto=1就表示icmp packet tp_src: tcp udp源端口 tp_dst: tcp udp目的端口
 

ip

 

Same as dl_type=0x0800.

 
 

icmp

 

Same as dl_type=0x0800,nw_proto=1.

 
 

tcp

 

Same as dl_type=0x0800,nw_proto=6.

 
 

udp

 

Same as dl_type=0x0800,nw_proto=17.

 
 

arp

 

Same as dl_type=0x0806.

 
 

rarp

 

Same as dl_type=0x8035.

actions: output:port controller(key=value) 送到controller作为packet-in 消息,括号内的key value pair可以是: reason= reason reason 可以是action,no_match,invalid_ttl id=controller-id 默认是0,特殊的controller会有一个16位的id
 

mod_dl_src:mac

 

Sets the source Ethernet address to mac.

 

mod_dl_dst:mac

 

Sets the destination Ethernet address to mac.

 

mod_nw_src:ip

 

Sets the IPv4 source address to ip.

 

mod_nw_dst:ip

 

Sets the IPv4 destination address to ip.

 

mod_tp_src:port

 

Sets the TCP or UDP source port to port.

 

mod_tp_dst:port

 

Sets the TCP or UDP destination port to port.

4. 删除所有flow ovs-ofctl del-flows ovs-switch


你可能感兴趣的:(环境配置)