- 论坛徽章:
- 0
|
#Linux从kernel 2.1.105开始支持QOS
#不过,需要重新编译内核。运行 'make config'时将 EXPERIMENTAL _OPTIONS 设置成 'y'
#并且将Class Based Queueing (CBQ), Token Bucket Flow, Traffic Shapers 设置为 'y'
#运行 'make dep; make clean; make bzilo',生成新的内核
traffic control
#!/bin/bash
#
# 定义上下带宽
# 注意是 Kbit
DOWNLOAD=4000Kbit
UPLOAD=4000Kbit
# 定义内网IP段
INET=10.0.0.
# 定义限制的IP范围
IPS=10
IPE=254
# 定义进出设备 eth0 IS LOCAL NETWORK,eth1 IS WAN NETWORK
IDEV=eth0
ODEV=eth1
#
#
/sbin/tc qdisc del dev $IDEV root
/sbin/tc qdisc del dev $ODEV root
#
#我们配置了 eth0 的队列规定,root 表示这是根(root)规定
#其句柄 (handle)设定为 10:'。 其类型为 CBQ
#带宽为 100 Mbit(内)4Mbit(外),平均包大小为 1000 字节
#包间隔发送单元的大小为8字节,最小传输包大小为64字节
/sbin/tc qdisc add dev $IDEV root handle 10: cbq bandwidth 100Mbit avpkt 1000 cell 8 mpu 64
/sbin/tc qdisc add dev $ODEV root handle 20: cbq bandwidth 4Mbit avpkt 1000 cell 8 mpu 64
#
#生成root类
#prio 8 为先级,越小优先级越高
/sbin/tc class add dev $IDEV parent 10:0 classid 10:1 cbq bandwidth 100Mbit rate \
95Mbit allot 1514 weight 95Mbit prio 8 maxburst 20 avpkt 1000
#
/sbin/tc class add dev $ODEV parent 20:0 classid 20:1 cbq bandwidth 4Mbit rate \
3800Kbit allot 1514 weight 3800Kbit prio 8 maxburst 20 avpkt 1000
#
#限制下载速度
COUNTER=$IPS
while [ $COUNTER -le $IPE ]
do
# 以下三句限制各IP的下载带宽
/sbin/tc class add dev $IDEV parent 10:1 classid 10:1$COUNTER cbq bandwidth 100Mbit rate $DOWNLOAD allot 1514 \
weight 200Kbit prio 5 maxburst 20 avpkt 1000 bounded
/sbin/tc qdisc add dev $IDEV parent 10:1$COUNTER sfq quantum 1514b perturb 15
/sbin/tc filter add dev $IDEV parent 10:0 protocol ip prio 100 u32 match ip dst $INET$COUNTER flowid \
10:1$COUNTER
COUNTER=` expr $COUNTER + 1 `
done
#
#限制上传速度
COUNTER=$IPS
while [ $COUNTER -le $IPE ]
do
# 以下三句限制各IP的上传带宽
/sbin/tc class add dev $ODEV parent 20:1 classid 20:1$COUNTER cbq bandwidth 3800Kbit rate $UPLOAD allot 1514 \
weight 200Kbit prio 5 maxburst 20 avpkt 1000 bounded
/sbin/tc qdisc add dev $ODEV parent 20:1$COUNTER sfq quantum 1514b perturb 15
/sbin/tc filter add dev $ODEV parent 20:0 protocol ip prio 100 handle $COUNTER fw classid 20:1$COUNTER
COUNTER=` expr $COUNTER + 1 `
done
#特殊照顾的IP在以上范围的用户,可以借用未使用带宽
#优先级较高
NIP=78
#10.0.0.4 这个用户要大量下载,可以快一点
ND=400Kbit
NU=400Kbit
/sbin/tc class change dev $IDEV parent 10:1 classid 10:1$NIP bandwidth 100Mbit rate $ND allot 1514 weight 400Kbit \
prio 4 maxburst 20 avpkt 1000
/sbin/tc class change dev $ODEV parent 20:1 classid 20:1$NIP cbq bandwidth 4Mbit rate $NU allot 1514 weight 400Kbit \
prio 4 maxburst 20 avpkt 1000
#
NIP=1
# 10.0.0.100 增加自已的带宽
ND=1600Kbit
NU=1600Kbit
/sbin/tc class change dev $IDEV parent 10:1 classid 10:1$NIP bandwidth 100Mbit rate $ND allot 1514 weight 1600Kbit \
prio 4 maxburst 20 avpkt 1000
/sbin/tc class change dev $ODEV parent 20:1 classid 20:1$NIP cbq bandwidth 4Mbit rate $NU allot 1514 weight 1600Kbit \
prio 4 maxburst 20 avpkt 1000
#
#你的iptables中的set-mark必须和tc中的handle相对应
# 修改防火墙,增加上传限制
COUNTER=$IPS
while [ $COUNTER -lt $IPE ]
do
iptables -t mangle -A PREROUTING -i $IDEV -s $INET$COUNTER -j MARK --set-mark $COUNTER
COUNTER=` expr $COUNTER + 1 `
done
# 这里是NAT
iptables -t nat -A POSTROUTING -o $EXTIF -s 10.0.0.0/24 -j MASQUERADE
#监视流量
#tc -s qdisc ls dev eth0
#tc -s qdisc ls dev eth1
#tc -s class ls dev eth0
#tc -s class ls dev eth1 |
|