Linux TC流量控制 (自创)

kevin.Zhu 发布于:2013-12-25 23:44 分类:Tc流量控制  有 53 人浏览,获得评论 0 条  

需要限制一台服务器的带宽 (用户下载带宽

服务器有2个IP ,eth0 eth1 并且服务器用Openvz创建了一台虚拟机,虚拟机通过nat实现网络连通并把 eth0 作为网络出口

服务器 iptables 的设置如下:

iptables -t nat -I PREROUTING -d eth0 -j DNAT --to 虚拟机ip

iptables -t nat -I POSTROUTING -s 虚拟机ip -j SNAT --to eth0 ip

 

# 在服务器的外网网口上 创建一个队列

tc qdisc add dev eth0 root handle 1:  htb  default 1

 

#创建根分类

tc class add dev eth0 parent 1:  classid 1:1  htb rate 5Mbit  ceil 5Mbit

 

#可以创建上面分类的子分类 ,也可以不创建  (这里不创建)

 

#创建队列过滤器

tc filter add dev eth0 parent 1:  protocol ip prio 1  u32 match ip dst xxx.xx.xx.xx/xx ( 也可以是 all )  flowid 1:1 

 

 过滤器的用法还有很多 如: ip dport , ip sport , ip src , ip dst

如果需要对特定的数据做处理 可以配置防火墙的 --set-mark N ,

iptables -t mangle -I INPUT -d xx.xx.xx.xx/xx  -j MARK --set-mark N

然后:  tc filter add dev eth0 parent 1:  protocol ip prio 1  handle N fw  flowid 1:1 

 

常规使用的一个例子:

tc qdisc add dev eth0:1 root handle 1: htb default 1
tc class add dev eth0:1 parent 1: classid 1:1 htb rate 10Mbit ceil 10Mbit
tc class add dev eth0:1 parent 1:1 classid 1:2 htb rate 240kbit ceil 800kbit
tc qdisc add dev eth0:1 parent 1: handle 33 htb sfq perturb 10
tc filter add dev eth0:1 parent 1: prio 5 protocol ip handle 2 fw flowid 1:2

 

使用防火墙标记出需要进行流控的数据、然后使用 handle N fw 绑定到过滤器上 对这部分数据进行流控