摘自:
http://www.yandong.org/archives/485
http://blog.csdn.net/yahohi/article/details/6631934
Open vSwitch虚拟化网络架构图:
ovs-vsctl命令简介:
添加名为br0的网桥
ovs-vsctl add-br br0
删除名为br0的网桥
ovs-vsctl del-br br0
列出所有网桥
ovs-vsctl list-br
列出挂接到网桥br0上的所有网络接口
ovs-vsctl list-ports br0
将网络接口eth0挂接到网桥br0上
ovs-vsctl add-port br0 eth0
删除网桥br0上挂接的eth0网络接口
ovs-vsctl del-port br0 eth0
列出已挂接eth0网络接口的网桥
ovs-vsctl port-to-br eth0
VLAN建立与配置:
示例:
建立下图所示VLAN网络,
详见http://www.yandong.org/archives/485
虚拟机的虚拟网卡由tap或vif标记,同一VLAN下的虚拟机可实现互ping。
流规则:
每条流规则由一系列字段组成,分为基本字段、条件字段和动作字段三部分:
基本字段包括生效时间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 中的流规则将全部丢失,网络无法连接。其中dl是datalink的缩写,nw是network的缩写,tp是transport的缩写。
动作字段包括正常转发normal、定向到某交换机端口output:port、丢弃drop、更改源目的mac地址mod_dl_src/mod_dl_dst等,一条流规则可有多个动作,动作执行按指定的先后顺序依次完成。
ovs-ofctl命令简介:
查看虚拟交换机ovsbr0的信息
ovs-ofctl show ovsbr0
查看ovsbr0上各交换机端口的状态
ovs-ofctl dump-ports ovsbr0
查看ovsbr0上的所有流规则
ovs-ofctl dump-flows ovsbr0
丢弃从2号端口发来的所有数据包
ovs-ofctl add-flow ovsbr0idle_timeout=0,in_port=2,actions=drop
注意:in_port是指虚拟网卡号(vif,tap),而非传输层端口号。
删除条件字段中包含in_port=2的所有流规则
ovs-ofctl del-flows ovsbr0 in_port=2
丢弃所有收到的数据包
ovs-ofctl add-flow ovsbr0dl_type=*,nw_src=ANY,action=drop
注意:
(1)、流规则中可包含通配符和简写形式,任何字段都可等于*或ANY;
(2)、简写形式为将字段组简写为协议名,目前支持的简写有ip,arp,icmp,tcp,udp,与流规则条件字段的对应关系如下:
dl_type=0×0800 <=> ip
dl_type=0×0806 <=> arp
dl_type=0×0800,nw_proto=1<=> icmp
dl_type=0×0800,nw_proto=6<=> tcp
dl_type=0×0800,nw_proto=17<=> udp
应用场景设置:
QoS设置
针对网络接口的设置:
设置网络接口vif0.0的带宽为1000±100kbps
ovs-vsctl set interface vif0.0ingress_policing_rate=1000
ovs-vsctl set interface vif0.0ingress_policing_burst=100
其中,ingress_policing_rate为最大发送速率(单位均为kbps),ingress_policing_burst为超过ingress_policing_rate的最大浮动值。
针对交换机端口的设置:
1、创建在vif0.0端口上的linux-htbQoS。linux-htb QoS可以针对具有指定特征的数据包流设置最大最小带宽,且在最大带宽范围内,某一特征的数据包流可以借用其他特征数据包流未用完的带宽。
ovs-vsctl -- set port vif0.0 qos=@newqos
-- --id=@newqos create qos type=linux-htbother-config:
max-rate=100000000 queues=0=@q0,1=@q1
-- --id=@q0 create queue other-config:min-rate=100000000other-config:max-rate=100000000
-- --id=@q1 create queueother-config:min-rate=500000000
2、将带宽限制加于某特征数据包流上。假设vif0.0接在交换机1号端口上,
ovs-ofctl add-flow xenbr0"in_port=2,idle_timeout=0,actions=enqueue:1:0"
端口映射
将发往eth0端口和从eth1端口发出的数据包全部定向到eth2端口。假设eth0、eth1、eth2端口的uuid分别为:69ee0c09-9e52-4236-8af6-037a98ca704d;69ee0c09-9e52-4236-8af6-037a98ca704e;69ee0c09-9e52-4236-8af6-037a98ca704f。端口的uuid可以通过ovs-vsctllist port命令查看
ovs-vsctl -- set bridge xenbr0 mirrors=@m
-- --id=@m create mirror name=mymirror
select-dst-port=69ee0c09-9e52-4236-8af6-037a98ca704d
select-src-port=69ee0c09-9e52-4236-8af6-037a98ca704e
output-port=69ee0c09-9e52-4236-8af6-037a98ca704f
Sflow:
可实现流量导出,并结合snort,tcpdump对流量进行监控和分析。
示例:
建立如下监控环境,
详见http://www.yandong.org/archives/485
Open vSwitch不仅可以控制虚拟机(VM1, VM2),也可以控制物理机器(PY1)。
一些说明:
tap和vif的区别
Xen支持运行两种不同类型的虚拟机:半虚拟化(PV)和全虚拟化(HVM)。PV虚拟机只有一个vifX.N,而HVM虚机不安装PV Driver时会有两个网络接口vifX.N和tapX.N,实际上使用的是tapX.N。HVM虚机安装PV Driver并重启后,tapX.N会消失,使用vifX.N(若不重启还是使用tapX.N)。