基于IFB对网络入口流量设置Qos策略

实验目的:Open vSwitch对入口流量的QoS只能做限速操作,本实验是为了能实现像出口流量一样的QoS

实验方法:使用Linux内核直接支持的IFB(Intermediate Functional Block device)虚拟网络设备,将所有网络接口(物理 or 虚拟)的入口流量导入IFB设备,利用TC工具(利用linux内核的提供的Traffic Control 功能)在IFB设备上设置qdisc\class\filter,对流量进行分类处理

实验环境:主机G450:运行3台虚拟主机(VirtualBox + Archlinux ) + OVS

安装虚拟机
安装Virtual Box
sudo apt-get install virtualbox
下载archlinux ISO镜像文件
http://mirrors.163.com/archlinux/iso/2013.07.01/archlinux-2013.07.01-dual.iso
创建虚拟机
配置虚拟机网络连接方式:host-only
选择此方式后,会相应的在物理主机中创建一个vboxnet1虚拟网络设备,该设备与虚拟机的网卡eth0是连通的
因为本实验创建的三个虚拟机,需要所以创建三个vboxnet虚拟设备,是指如下
Virtual Box主界面 --->管理--->全局设定--->网络--->添加vboxnet2 / vboxnet3两个虚拟设备
启动虚拟机VM1 VM2 VM3
配置网络参数:
IP地址:ifconfig eth0 192.168.10.141 or ip addr add 192.68.10.141 dev eth0
VM1:192.168.10.141
VM2:192.168.10.142
VM3:192.168.10.143
主机G450:192.168.10.106(可用dhclient eth0获取)
路由表:
ip route 显示路由表
ip route add to 192.168.10.0/24 dev eth0
ip route add to default via 192.168.10.1 dev eth0
虚拟机其它配置:
更改源列表: /etc/pacman.d/mirrorslist
设置DNS: /etc/resolv.conf
安装iperf网络性能测试工具:pacman -S iperf
启动ssh server:systemctl start sshd
备份虚拟机


1.安装Open vSwitch
./configure --with-linux=/lib/modules/`uname -r`/build
make
sudo make install
sudo insmod datapath/linux/openvswitch.ko
sudo make modules_install
sudo mkdir -p /usr/local/etc/openvswitch
sudo ovsdb-tool create /usr/local/etc/openvswitch/conf.db vswitchd/vswitch.ovsschema

2.启动Open vSwitch
sudo ovsdb-server --remote=punix:/usr/local/var/run/openvswitch/db.sock \
--remote=db:Open_vSwitch,manager_options \
--private-key=db:SSL,private_key \
--certificate=db:SSL,certificate \
--bootstrap-ca-cert=db:SSL,ca_cert \
--pidfile --detach

ovs-vsctl --no-wait init

ovs-vswitchd --pidfile --detach

3.配置OVS网桥和流表

ovs-vsctl add-br ovsbr

ovs-vsctl add-port ovsbr vboxnet1

ovs-vsctl add-port ovsbr vboxnet2

ovs-vsctl add-port ovsbr vboxnet3

ovs-vsctl add-port ovsbr eth0

ovs-vsctl add-port ovsbr ifb0

-------------------查看网络设备的vport号---------------------

sudo ovs-dpctl show

port 0: ovsbr (internal)
port 1: vboxnet1
port 2: vboxnet2
port 3: vboxnet3
port 4: eth0
port 5: ifb0

---------------------------------------------------------------------

添加flow规则

sudo ovs-ofctl add-flow ovsbr priority=65535,idle_timeout=0,ip,in_port=ANY,nw_src=ANY,nw_dst=192.168.10.141,actions=output:1

sudo ovs-ofctl add-flow ovsbr priority=65535,idle_timeout=0,ip,in_port=ANY,nw_src=ANY,nw_dst=192.168.10.142,actions=output:2

sudo ovs-ofctl add-flow ovsbr priority=65535,idle_timeout=0,ip,in_port=ANY,nw_src=ANY,nw_dst=192.168.10.143,actions=output:3

sudo ovs-ofctl add-flow ovsbr priority=65535,idle_timeout=0,ip,in_port=ANY,nw_src=ANY,nw_dst=192.168.10.106,actions=normal

sudo ovs-ofctl add-flow ovsbr priority=60000,idle_timeout=0,ip,in_port=ANY,nw_src=ANY,nw_dst=192.168.10.0/24,actions=output:4

sudo ovs-ofctl add-flow ovsbr priority=50000,idle_timeout=0,ip,in_port=ANY,nw_src=ANY,nw_dst=0.0.0.0/0.0.0.0,actions=output:4

4. 停止 Open vSwitch

kill `cd /usr/local/var/run/openvswitch && cat ovsdb-server.pid ovs-vswitchd.pid

5.说明

1)priority值越大,优先级越高

2)注意各条流表的优先级

3)注意不要删除了系统默认的那条流表,系统默认的那条流表能保证Open vSwitch能项普通的交换机一样工作,如果删除了该流表,只设置了上面那些流表规则,网络不能通,原因是首次与其他主机通信,主机会先发送ARP报文,上述的那些流表规则并未对ARP报文进行处理,所以无法通信。默认的流表规则能对ARP报文进行处理

 

加载IFB内核模块,创建ifb虚拟设备

sudo modprobe ifb numifbs=1 (numifbs: ifb数量)

将所有的入口流量导入到ifb0

eth0 vboxnet1 vboxnet2 vboxnet3

以eth0为例

1).创建入队列

tc qdisc add dev eth0 handle ffff: ingress

2).把eth0的入口流量导入ifb0

tc filter add dev eth0 parent ffff: protocol ip u32 match u32 0 0 action mirred egress redirect dev ifb0

TC工具对ifb0设置QoS规则

tc qdisc add dev ifb0 root handle 1: htb default 20
tc class add dev ifb0 parent 1: classid 1:1 htb rate 50mbit
tc class add dev ifb0 parent 1:1 classid 1:10 htb rate 800kbit
tc class add dev ifb0 parent 1:1 classid 1:11 htb rate 5mbit

tc class add dev ifb0 parent 1:1 classid 1:12 htb rate 30mbit

tc class add dev ifb0 parent 1:1 classid 1:20 htb rate 14mbit
tc filter add dev ifb0 protocol ip parent 1:0 prio 1 u32 match ip src 192.168.10.141 flowid 1:10

tc filter add dev ifb0 protocol ip parent 1:0 prio 1 u32 match ip src 192.168.10.142 flowid 1:11

tc filter add dev ifb0 protocol ip parent 1:0 prio 1 u32 match ip src 192.168.10.143 flowid 1:12

----------------------------------------------------------------------------------------------------------------------

tc qdisc/class/filter add/show/del/change 添加/显示/删除/修改 相应的队列规则/分类/过滤器

 

实验结果:

第一组实验:

对VM1限速:10KB/s    实测平均速度:10KB/s

对VM1限速:100KB/s  实测平均速度:92.9KB/s

对VM1限速:500KB/s  实测平均速度:462.6KB/s

对VM1限速:1MB/s     实测平均速度:925.2KB/s

对VM1限速:6MB/s     实测平均速度:5.4MB/s

对VM1限速:10MB/s   实测平均速度:6.6MB/s

第二组实验:

             VM1        VM2         VM3

限速: 100KB/s   625KB/s   3.75MB/s

优先级: 高            中              低

时速: 92.5KB/s  580KB/s   3.4MB/s

 

                   VM1        VM2         VM3

限速:       100KB/s  625KB/s   3.75MB/s

优先级:        低           中             高

实测速度:92.2KB/s  581KB/s   3.4MB/s

 

                VM1(TCP)     VM3(UDP)

指定速度:    9MB/s

限速:        100KB/s      3.75MB/s

优先级:         低               高

 实测速度:92.4KB/s      3.65MB/s

posted on 2013-10-22 10:36  杨Born  阅读(1778)  评论(0)    收藏  举报

导航