Chinaunix首页 | 论坛 | 博客
  • 博客访问: 413398
  • 博文数量: 89
  • 博客积分: 1386
  • 博客等级: 中尉
  • 技术积分: 827
  • 用 户 组: 普通用户
  • 注册时间: 2011-06-20 10:32
个人简介

12年 linux 系统运维工程师,网络架构设计、优化,故障处理。

文章分类

全部博文(89)

文章存档

2019年(1)

2015年(2)

2014年(11)

2013年(14)

2012年(2)

2011年(59)

分类: 系统运维

2011-11-15 16:49:18

                            linux网关上TC给内网做限速脚本

#!/bin/bash
##给192.168.13网段的IP做限速
##外网网卡
IN=eth1
##内网网卡
DEV=eth0 
start() {
## 清除 eth1 eth0 所有队列规则
tc qdisc del dev $DEV root 2>/dev/null
tc qdisc del dev $IN  root 2>/dev/null
##定义总的上下带宽
tc qdisc add dev $DEV root handle 2: htb
tc class add dev $DEV parent 2: classid 2:1 htb rate 3000kbit
tc qdisc add dev $IN root handle 1: htb
tc class add dev $IN parent 1: classid 1:1  htb rate 3000kbit
for (( i=2; i<=253; i=i+1 ))
do
#####下载控制在每人实际最大100k/S左右
tc class add dev $DEV parent 2:1 classid 2:2$i htb rate 100kbit ceil 500kbit burst 15k
tc qdisc add dev $DEV parent 2:2$i handle 2$i: sfq
tc filter add dev $DEV parent 2:0 protocol ip prio 4 u32 match ip dst 192.168.13.$i flowid 2:2$i
#####上传控制在每人实际最大34K/S左右
tc class add dev $IN parent 1:1 classid 1:1$i htb rate 100kbit ceil 300kbit burst 15k
tc qdisc add dev $IN parent 1:1$i handle 1$i: sfq
tc filter add dev $IN parent 1:0 protocol ip prio $i handle $i fw classid 1:1$i
iptables -t mangle -A PREROUTING -s 192.168.13.$i -j MARK --set-mark 0x$i
done

}
stop(){
echo -n "(删除所有队列......)"
( tc qdisc del dev $DEV root &&
for (( i=2; i<=253; i=i+1 ))
do
/sbin/iptables -t mangle -D PREROUTING -s 192.168.13.$i -j MARK --set-mark 0x$i
done && echo "ok.删除成功!" ) || echo "error."
}
#显示状态
status() {
echo "1.show qdisc $DEV  (显示下行队列):----------------------------------------------"
tc -s qdisc show dev $DEV
echo "2.show class $DEV  (显示下行分类):----------------------------------------------"
tc class show dev $DEV
echo "3. tc -s class show dev $IN (显示上行队列和分类流量详细信息):------------------"
tc -s class show dev $IN
echo "说明:设置总队列下行和上行带宽 3M."
}
#显示帮助
usage() {
echo "使用方法(usage): `basename $0` [start | stop | restart | status ]"
echo "参数作用:"
echo "start   开始流量控制"
echo "stop    停止流量控制"
echo "restart 重启流量控制"
echo "status  显示队列流量"
}
case "$1" in
start)
( start && echo "开始流量控制! TC started!" ) || echo "error."
exit 0
;;

stop)
( stop && echo "停止流量控制! TC stopped!" ) || echo "error."
exit 0
;;
restart)
stop
start
echo "流量控制规则重新装载!"
;;
status)
status
;;

*) usage
exit 1
;;
esac

阅读(1655) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~