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 1tc 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 绑定到过滤器上 对这部分数据进行流控