网桥管理
1.非ovsdb数据库操作
添加名为br0的网桥
root@ubuntu229:~# ovs-vsctl add-br br0
列出所有网桥
root@ubuntu229:~# ovs-vsctl list-br
判断网桥br0是否存在
root@ubuntu229:~# ovs-vsctl br-exists br0
echo $? //0表示存在,否则不存在
将网络接口eth0挂接到网桥br0上
root@ubuntu229:~# ovs-vsctl add-port br0 eth0
列出挂接到网桥br0上的所有网络接口
root@ubuntu229:~# ovs-vsctl list-ports br0
列出已挂接eth0网络接口的网桥
root@ubuntu229:~# ovs-vsctl port-to-br eth0
查看结果
root@ubuntu229:~# ovs-vsctl show
删除网桥br0上挂接的eth0网络接口
root@ubuntu229:~# ovs-vsctl del-port br0 eth0
删除名为br0的网桥
root@ubuntu229:~# ovs-vsctl del-br br0
2.vosdb数据库操作
ovsdb是一个非常轻量级的数据库,与其说它是一个数据库,不如说它是一个提供增删查改等功能的临时配置缓存,之所以这么说,是因为ovsdb数据库的根本就未使用多少数据库技术,如SQL语言查询、存储过程等等。ovsdb 数据库通过模式文件“openvswitch-1.1.0pre2/vswitchd/vswitch.ovsschema”,如要定制ovsdb数据库,可通过更改 vswitch.ovsschema 文件实现。
数据库操作的一般格式为
ovs-vsctl list/set/get/add/remove/clear/destroy table record column [value]
默认情况下ovsdb中有以下数据表
bridge, controller,interface,mirror,netflow,open_vswitch,port,qos,queue,ssl,sflow
查看bridge数据表中的所有记录
ovs-vsctl list bridge
获取bridge的_uuid字段值
ovs-vsctl get bridge br0 _uuid
设置bridge数据表datapath_type字段的值
ovs-vsctl set bridge br0 datapath_type="system"
清除bridge数据表flood_vlans字段的值
ovs-vsctl clear bridge br0 flood_vlans or
ovs-vsctl remove bridge br0 flow_tables 23
删除uuid为69ee0c09-9e52-4236-8af6-037a98ca704d的qos记录
ovs-vsctl destroy qos 69ee0c09-9e52-4236-8af6-037a98ca704d
流规则管理
1.流规则组成
条件字段包括输入端口号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.基本操作
查看虚拟交换机的信息
root@bogon:~# ovs-ofctl show br0
查看br0上各交换机端口的状态
root@bogon:~# ovs-ofctl dump-ports br0
注:输出的结果中包含了各网络接口上收到的数据包数,字节数,丢包数,错误数据包数等信息
添加一条流规则:丢弃从2号端口发来的所有数据包
root@bogon:~# ovs-ofctl add-flow br0 idle_timeout=120,in_port=2,actions=drop
查看br0上所有的流规则
root@bogon:~# ovs-ofctl dump-flows br0
删除一条流规则:删除条件字段中包含in_port=2的所有流规则
root@bogon:~# ovs-ofctl del-flows br0 in_port=2
3.应用场景设置
QoS设置
针对网络接口的设置:
设置网络接口eth4的带宽为1000±100kbps
ovs-vsctl set interface eth4 ingress_policing_rate=1000
ovs-vsctl set interface eth4 ingress_policing_burst=100
注:
ingress_policing_rate:最大发送速率(单位均为kbps)
ingress_policing_burst:超过ingress_policing_rate的最大浮动值
针对交换机端口的设置:
创建在vif0.0端口上的linux-htb QoS,linux-htb QoS可以针对具有指定特征的数据包流设置最大最小带宽,且在最大带宽范围内,某一特征的数据包流可以借用其他特征数据包流未用完的带宽。
ovs-vsctl -- set port vif0.0 qos=@newqos -- --id=@newqos create qos type=linux-htb other-config:
max-rate=100000000 queues=0=@q0,1=@q1 -- --id=@q0 create queue other-config:min-rate=100000000 other-config:max-rate=100000000 -- --id=@q1 create queue other-config:min-rate=500000000
端口映射
将发往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
命令如下
ovs-vsctl --set bridge br0 mirrors=@m-- --id=@m create mirror name=mymirror select-dst-port=a27e5ec3-5d78-437e-8e36-d6f81679132a select-src-port=be52eece-1f03-4ccf-a4c6-b0b68cb25f8a output-port=bc38e1c3-60a1-468e-89d7-e4b45585b533
网站屏蔽
屏蔽由Open vSwitch管理的任何主机对主机119.75.213.50的访问,但只屏蔽ip数据包(由dl_type=0x0800指定),即所有主机将无法访问该主机上所有基于IP协议的服务,如万维网服务、FTP访问等
ovs-ofctl add-flow br0 idle_timeout=0,dl_type=0x0800,nw_src=119.75.213.50,actions=drop
注:简写形式为将字段组简写为协议名,目前支持的简写有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等服务。
ovs-ofctl add-flow br0 idle_timeout=0,dl_type=0x0800,nw_proto=1,actions=output:4
去除VLAN tag
去除从3号端口发来的所有VLAN数据包中的tag,然后转发
ovs-ofctl add-flow br0 idle_timeout=0,in_port=3,actions=strip_vlan,normal
更改数据包源IP地址后转发
将从3号端口收到的所有IP包的源IP字段更改为192.168.28.225
ovs-ofctl add-flow br0 idle_timeout=0,in_port=3,actions=mod_nw_src:192.168.28.225,normal
阅读(4068) | 评论(2) | 转发(2) |