分享

OVS操作总结

desehawk 发表于 2015-3-3 19:10:28 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 16 250654

问题导读


1.本文讲了ovs哪些重要概念?
2.网桥管理涉及哪些命令?
3.流规则由哪三部分组成?







Open vSwitch(下面简称为 OVS)是由 Nicira Networks 主导的,运行在虚拟化平台(例如 KVM,Xen)上的虚拟交换机。在虚拟化平台上,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,执行对应的操作, 例如转发数据到另外的端口。


网桥管理

非ovsdb数据库操作:
  1. #添加网桥
  2. ovs-vsctl add-br br-int
  3. #列出网桥
  4. ovs-vsctl list-br
  5. #给网桥添加端口
  6. ovs-vsctl add-port br-int tap-xxx
  7. #列出挂载某网络接口的所有网桥
  8. ovs-vsctl port-to-br tap-xxx
  9. #查看全部信息
  10. ovs-vsctl show
复制代码


ovsdb数据库操作:

  1. #通用格式为
  2. ovs-vsctl list/set/get/add/remove/clear/destroy table record column [value]
  3. #默认情况下ovsdb中包含的数据表
  4. bridge, controller,interface,mirror,netflow,open_vswitch,port,qos,queue,ssl,sflow
  5. #举例 查看所有网桥
  6. ovs-vsctl list bridge
  7. #举例 删除一条qos记录
  8. ovs-vsctl destroy qos <qos-id>
  9. #修改端口 p1 的 VLAN tag 为 101,使端口 p1 成为一个隶属于 VLAN 101 的端口
  10. ovs-vsctl set Port p1 tag=101
复制代码


流规则管理

每条流规则由一系列字段组成,分为基本字段、条件字段和动作字段三部分。
基本字段包括:
  • 生效时间 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 等,一条流规则可有多个动作,动作执行按指定的先后顺序依次完成。
示例:


  1. #查看某网桥信息
  2. ovs-ofctl show br-tun
  3. #查看某网桥上所有端口的状态
  4. ovs-ofctl dump-ports br-tun
  5. #添加一条流表规则 丢弃从port2上发来的所有数据表
  6. ovs-ofctl add-flow br-tun idle_timeout=120,in_port=2,actions=drop
  7. #查看某网桥上面的流表规则
  8. ovs-ofctl dump-flows br-tun
  9. #屏蔽所有进入 OVS 的以太网广播数据包
  10. ovs-ofctl add-flow ovs-switch "table=0, dl_src=01:00:00:00:00:00/01:00:00:00:00:00, actions=drop"
  11. #屏蔽 STP 协议的广播数据包
  12. ovs-ofctl add-flow ovs-switch "table=0, dl_dst=01:80:c2:00:00:00/ff:ff:ff:ff:ff:f0, actions=drop"
复制代码


Qos设置

Qos可以针对网络接口,也可以针对端口设置:
  1. #针对网络接口  1000±100kbps
  2. ovs-vsctl set interface tap-xxx ingress_policing_rate=1000
  3. ovs-vsctl set interface tap-xxx ingress_policing_burst=100
复制代码
官方参考 http://openvswitch.org/support/c ... /qos-rate-limiting/


端口映射
将发往 p0 端口和从 p1 端口发出的数据包全部定向到 p2 端口,用 ovs-vsctl list port 命令查看 p0、p1、p2 端口的 uuid 分别为id1、id2、id3:
  1. ovs-vsctl --set bridge br0 mirrors=@m-- --id=@m create mirror name=mymirror  \
  2. select-dst-port=id_1 \
  3. select-src-port=id_2 \
  4. output-port=id_3
复制代码


其他设置

屏蔽对目的主机访问:

  1. ovs-ofctl add-flow br0 idle_timeout=0,dl_type=0x0800,nw_src=xx.xx.xx.xx,actions=drop
复制代码



http://openvswitch.org/support/

http://www.opencloudblog.com/?p=300










已有(17)人评论

跳转到指定楼层
wzf2012 发表于 2015-3-12 19:52:06
可以评论吗?
回复

使用道具 举报

跟着大王去巡山 发表于 2015-4-23 10:04:07
ovs-vsctl add-br br-ex的时候
提示:cannot create a bridge named br-ex because a bridge named br-ex already exists,
然后ovs-vsctl add-port br-ex eth2
提示:cannot create a port named eth2 because a port named eth2 already exists on bridge br-ex
继续ethtool -K eth2 gro off
提示:Cannot get device feature names: No such device


版主这个是因为端口的原因吗??如果是的话,这里应该怎么设置?

点评

ip a看下是否已经存在eth2,如果存在,是其原因引起的。  发表于 2015-5-1 20:25
回复

使用道具 举报

arsenduan 发表于 2015-5-1 20:43:47
本帖最后由 arsenduan 于 2015-5-1 20:47 编辑

ovs支持一下功能:
  • Visibility into inter-VM communication via NetFlow, sFlow(R), IPFIX, SPAN, RSPAN, and GRE-tunneled mirrors
  • LACP (IEEE 802.1AX-2008)
  • Standard 802.1Q VLAN model with trunking
  • BFD and 802.1ag link monitoring
  • STP (IEEE 802.1D-1998)
  • Fine-grained QoS control
  • Support for HFSC qdisc
  • Per VM interface traffic policing
  • NIC bonding with source-MAC load balancing, active backup, and L4 hashing
  • OpenFlow protocol support (including many extensions for virtualization)
  • IPv6 support
  • Multiple tunneling protocols (GRE, VXLAN, IPsec, GRE and VXLAN over IPsec)
  • Remote configuration protocol with C and Python bindings
  • Kernel and user-space forwarding engine options
  • Multi-table forwarding pipeline with flow-caching engine
  • Forwarding layer abstraction to ease porting to new software and hardware platforms



Open vSwitch的特性
1 支持通过NetFlow sFlow IPFIX, SPAN, RSPAN, 和 GRE-tunneled镜像使虚拟机内部通讯可以被监控;
2 支持LACP (IEEE 802.1AX-2008)(多端口绑定)协议;
3 支持标准的 802.1Q VLAN模型以及 trunk模式;
4 支持 BFD 和 802.1ag 链路状态监测;
5 支持STP (IEEE 802.1D-1998);
6 支持细粒度的Qos;
7 支持HFSC系统级别的流量控制队列;
8 支持每虚拟机网卡的流量的流量控制策略;
9 支持基于源MAC负载均衡模式、主备模式、L4哈希模式的多端口绑定;
10 支持OpenFlow协议(包括许多虚拟化的增强特性);
11 支持IPV6
12 支持多种隧道协议((GRE, VXLAN, IPsec, GRE and VXLAN over IPsec)
13 支持通过C或者Pthon接口远程配置;
14 支持内核态和用户态的转发引擎设置;
15 支持多列表转发的发送缓存引擎;
16 支持转发层抽象以容易的定向到新的软件或者硬件平台;

回复

使用道具 举报

arsenduan 发表于 2015-5-1 20:49:22
Open vSwitch的含义


顾名思义,Open vSwitch即开放虚拟交换标准!具体点说,Open vSwitch是在开源的Apache2.0许可下的产品级质量的多层虚拟交换标准!它旨在通过编程扩展,使庞大的网络自动化(配置、管理、维护),同时还支持标准的管理接口和协议(如NetFlow, sFlow, SPAN, RSPAN, CLI, LACP, 802.1ag)。总的来说,它被设计为支持分布在多个物理服务器,例如VMware的vNetwork分布式vSwitch或思科的Nexus1000V。
那么什么是虚拟交换?虚拟交换就是利用虚拟平台,通过软件的方式形成交换机部件。跟传统的物理交换机相比,虚拟交换机同样具备众多优点,一是配置更加灵活。一台普通的服务器可以配置出数十台甚至上百台虚拟交换机,且端口数目可以灵活选择。例如,VMware的ESX一台服务器可以仿真出248台虚拟交换机,且每台交换机预设虚拟端口即可达56个;二是成本更加低廉,通过虚拟交换往往可以获得昂贵的普通交换机才能达到的性能,例如微软的Hyper-V平台,虚拟机与虚拟交换机之间的联机速度轻易可达10Gbps。[1]
2Open vSwitch的优点


Open vSwitch可以作为一个在管理程序上运行的软开关,也可以作为开关控制堆栈。它已经被移植到多种虚拟化平台和交换芯片。它是XenServer的“波士顿”计划Xen云平台的>默认交换机并且还支持的Xen,KVM,Proxmox VE和VirtualBox。它也被许多虚拟管理系统包括openQRM,OpenNebula使用。
由于大部分的代码是使用平台独立的C写成,所以可移植性非常好。
3Open vSwitch运行原理


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

回复

使用道具 举报

跟着大王去巡山 发表于 2015-5-4 08:41:52
跟着大王去巡山 发表于 2015-4-23 10:04
ovs-vsctl add-br br-ex的时候
提示:cannot create a bridge named br-ex because a bridge named br-ex  ...

不存在的!只有eth0
回复

使用道具 举报

Ankse 发表于 2015-5-15 15:36:22
题主  你好,OPenstack'能够使用这个帖子的方法控制实例的带宽吗?具体的端口怎么查?
安装的都是按照官方文档走的
回复

使用道具 举报

langke93 发表于 2015-5-15 15:53:43
Ankse 发表于 2015-5-15 15:36
题主  你好,OPenstack'能够使用这个帖子的方法控制实例的带宽吗?具体的端口怎么查?
安装的都是按照官方 ...

Qos可以设置

Qos可以针对网络接口,也可以针对端口设置:
回复

使用道具 举报

Ankse 发表于 2015-5-15 16:30:23
打开 vSwitch 为速率限制使用 Linux"流量控制"功能。如果您没有看到已配置的速率限制有任何的效果,请确保您的内核装有"入口 qdisc"启用,并验证已安装的用户空间工具 (例如, /sbin/tc)。
这个怎么确定?
回复

使用道具 举报

langke93 发表于 2015-5-15 17:38:42
Ankse 发表于 2015-5-15 16:30
打开 vSwitch 为速率限制使用 Linux"流量控制"功能。如果您没有看到已配置的速率限制有任何的效果,请确保 ...



tc qdisc命令试试

[mw_shl_code=bash,true]#加载模块:
insmod xt_IPID
insmod cls_u32                                                                                         
insmod cls_fw  
insmod sch_htb
insmod sch_sfq
insmod sch_prio
#启用IMQ虚拟网卡
ip link set imq0 up
ip link set imq1 up
#删除旧队列
tc qdisc del dev imq0 root
tc qdisc del dev imq1 root
#上传设置
#增加根队列,未标记数据默认走26
tc qdisc add dev imq0 root handle 1: htb default 26
#增加总流量规则
tc class add dev imq0 parent 1: classid 1:1 htb rate 350kbit
#增加子类
tc class add dev imq0 parent 1:1 classid 1:20 htb rate 80kbit ceil 250kbit prio 0
tc class add dev imq0 parent 1:1 classid 1:21 htb rate 80kbit ceil 250kbit prio 1
tc class add dev imq0 parent 1:1 classid 1:22 htb rate 80kbit ceil 250kbit prio 2
tc class add dev imq0 parent 1:1 classid 1:23 htb rate 80kbit ceil 250kbit prio 3
tc class add dev imq0 parent 1:1 classid 1:24 htb rate 80kbit ceil 250kbit prio 4
tc class add dev imq0 parent 1:1 classid 1:25 htb rate 50kbit ceil 250kbit prio 5
tc class add dev imq0 parent 1:1 classid 1:26 htb rate 50kbit ceil 150kbit prio 6
tc class add dev imq0 parent 1:1 classid 1:27 htb rate 50kbit ceil 100kbit prio 7
#为子类添加SFQ公平队列,每10秒重置
tc qdisc add dev imq0 parent 1:20 handle 20: sfq perturb 10
tc qdisc add dev imq0 parent 1:21 handle 21: sfq perturb 10
tc qdisc add dev imq0 parent 1:22 handle 22: sfq perturb 10
tc qdisc add dev imq0 parent 1:23 handle 23: sfq perturb 10
tc qdisc add dev imq0 parent 1:24 handle 24: sfq perturb 10
tc qdisc add dev imq0 parent 1:25 handle 25: sfq perturb 10
tc qdisc add dev imq0 parent 1:26 handle 26: sfq perturb 10
tc qdisc add dev imq0 parent 1:27 handle 27: sfq perturb 10
#添加过滤规则配合Iptables Mark标记
#tc filter add dev imq0 parent 1:0 protocol ip u32 match ip sport 22 0xffff flowid 1:10
#使用U32标记数据,下面使用Iptables mark,容易。
tc filter add dev imq0 parent 1:0 prio 0 protocol ip handle 20 fw flowid 1:20
tc filter add dev imq0 parent 1:0 prio 0 protocol ip handle 21 fw flowid 1:21
tc filter add dev imq0 parent 1:0 prio 0 protocol ip handle 22 fw flowid 1:22
tc filter add dev imq0 parent 1:0 prio 0 protocol ip handle 23 fw flowid 1:23
tc filter add dev imq0 parent 1:0 prio 0 protocol ip handle 24 fw flowid 1:24
tc filter add dev imq0 parent 1:0 prio 0 protocol ip handle 25 fw flowid 1:25
tc filter add dev imq0 parent 1:0 prio 0 protocol ip handle 26 fw flowid 1:26
tc filter add dev imq0 parent 1:0 prio 0 protocol ip handle 27 fw flowid 1:27
#上传数据转入特定链
iptables -t mangle -N MYSHAPER-OUT
iptables -t mangle -A POSTROUTING -o pppoe-wan -j MYSHAPER-OUT
iptables -t mangle -A MYSHAPER-OUT -j IMQ --todev 0
#为特定数据打上标记配合之前过滤规则
#iptables -t mangle -I MYSHAPER-OUT -s 192.168.1.16 -j MARK --set-mark 27 #限制特定IP上传速度
#iptables -t mangle -I MYSHAPER-OUT -s 192.168.1.16 -j RETURN
iptables -t mangle -A MYSHAPER-OUT -p tcp --tcp-flags SYN,RST,ACK SYN -j MARK --set-mark 20 #提高HTTP连接速度
iptables -t mangle -A MYSHAPER-OUT -p tcp --tcp-flags SYN,RST,ACK SYN -j RETURN
iptables -t mangle -A MYSHAPER-OUT -p udp --dport 53 -j MARK --set-mark 20 #DNS查询
iptables -t mangle -A MYSHAPER-OUT -p udp --dport 53 -j RETURN
iptables -t mangle -A MYSHAPER-OUT -p icmp -j MARK --set-mark 21 #ICMP数据
iptables -t mangle -A MYSHAPER-OUT -p icmp -j RETURN
iptables -t mangle -A MYSHAPER-OUT -p tcp -m length --length :64 -j MARK --set-mark 21 #小数据包
iptables -t mangle -A MYSHAPER-OUT -p tcp -m length --length :64 -j RETURN
iptables -t mangle -A MYSHAPER-OUT -p tcp --dport 22 -j MARK --set-mark 22 #SSH连接
iptables -t mangle -A MYSHAPER-OUT -p tcp --dport 22 -j RETURN
iptables -t mangle -A MYSHAPER-OUT -p udp --dport 1194 -j MARK --set-mark 22 #VPN连接
iptables -t mangle -A MYSHAPER-OUT -p udp --dport 1194 -j RETURN
iptables -t mangle -A MYSHAPER-OUT -p tcp --dport 80 -j MARK --set-mark 23 #HTTP连接
iptables -t mangle -A MYSHAPER-OUT -p tcp --dport 80 -j RETURN
iptables -t mangle -A MYSHAPER-OUT -p tcp --dport 443 -j MARK --set-mark 24 #HTTPS连接
iptables -t mangle -A MYSHAPER-OUT -p tcp --dport 443 -j RETURN
#上传设置完成

#下载设置
#增加根队列,未标记数据默认走24
tc qdisc add dev imq1 handle 1: root htb default 24
tc class add dev imq1 parent 1: classid 1:1 htb rate 3500kbit
#添加子类
tc class add dev imq1 parent 1:1 classid 1:20 htb rate 1000kbit ceil 1500kbit prio 0
tc class add dev imq1 parent 1:1 classid 1:21 htb rate 1500kbit ceil 2500kbit prio 1
tc class add dev imq1 parent 1:1 classid 1:22 htb rate 2000kbit ceil 3500kbit prio 2
tc class add dev imq1 parent 1:1 classid 1:23 htb rate 1000kbit ceil 1500kbit prio 3
tc class add dev imq1 parent 1:1 classid 1:24 htb rate 1000kbit ceil 1500kbit prio 4
#为子类添加SFQ公平队列
tc qdisc add dev imq1 parent 1:20 handle 20: sfq perturb 10
tc qdisc add dev imq1 parent 1:21 handle 21: sfq perturb 10
tc qdisc add dev imq1 parent 1:22 handle 22: sfq perturb 10
tc qdisc add dev imq1 parent 1:23 handle 23: sfq perturb 10
tc qdisc add dev imq1 parent 1:24 handle 24: sfq perturb 10
#过滤规则
tc filter add dev imq1 parent 1:0 prio 0 protocol ip handle 20 fw flowid 1:20
tc filter add dev imq1 parent 1:0 prio 0 protocol ip handle 21 fw flowid 1:21
tc filter add dev imq1 parent 1:0 prio 0 protocol ip handle 22 fw flowid 1:22
tc filter add dev imq1 parent 1:0 prio 0 protocol ip handle 23 fw flowid 1:23
tc filter add dev imq1 parent 1:0 prio 0 protocol ip handle 24 fw flowid 1:24
#下载数据转入特定链
iptables -t mangle -N MYSHAPER-IN
iptables -t mangle -A PREROUTING -i pppoe-wan -j MYSHAPER-IN
iptables -t mangle -A MYSHAPER-IN -j IMQ --todev 1
#分类标记数据
#iptables -t mangle -A MYSHAPER-IN -d 192.168.1.16 -j MARK --set-mark 23 #限制特定IP下载速度
#iptables -t mangle -A MYSHAPER-IN -d 192.168.1.16 -j RETURN
iptables -t mangle -A MYSHAPER-IN -p tcp -m length --length :64 -j MARK --set-mark 20 #小数据优先
iptables -t mangle -A MYSHAPER-IN -p tcp -m length --length :64 -j RETURN
iptables -t mangle -A MYSHAPER-IN -p icmp -j MARK --set-mark 20 #ICMP数据
iptables -t mangle -A MYSHAPER-IN -p icmp -j RETURN
iptables -t mangle -A MYSHAPER-IN -p tcp --sport 22 -j MARK --set-mark 21 #SSH连接
iptables -t mangle -A MYSHAPER-IN -p tcp --sport 22 -j RETURN
iptables -t mangle -A MYSHAPER-IN -p udp --sport 1194 -j MARK --set-mark 21 #VPN连接
iptables -t mangle -A MYSHAPER-IN -p udp --sport 1194 -j RETURN
iptables -t mangle -A MYSHAPER-IN -p tcp --sport 443 -j MARK --set-mark 22 #HTTPS连接
iptables -t mangle -A MYSHAPER-IN -p tcp --sport 443 -j RETURN
iptables -t mangle -A MYSHAPER-IN -p tcp --sport 80 -j MARK --set-mark 22 #HTTP连接
iptables -t mangle -A MYSHAPER-IN -p tcp --sport 80 -j RETURN
iptables -t mangle -A MYSHAPER-IN -p tcp --sport 0:1024 -j MARK --set-mark 23 #系统服务端口连接
iptables -t mangle -A MYSHAPER-IN -p tcp --sport 0:1024 -j RETURN
#下载设置完成[/mw_shl_code]
回复

使用道具 举报

12下一页
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条