19,620
社区成员




#!/bin/bash
##清空所有的mangle 表
iptables -t mangle -F
###
##清空vlan和外网网卡的规则根队列
tc qdisc del dev eth0 root
tc qdisc del dev eth1.20 root
tc qdisc del dev eth1.23 root
tc qdisc del dev eth1.24 root
#IP起始位置
IPS=1
#IP结束位置
IPE=241
##下载带宽 实际大概170KB/S 转换/8即可
DOWNLOAD=1500kbit
##上传带宽 实际20KB/S
#UPLOAD=150Kbit
##最大上传 实际50KB/S
MAXUP=500Kbit
##外网网卡
ODEV=eth0
##########################设置根规则
##上传根
tc qdisc add dev $ODEV root handle 50: cbq bandwidth 100Mbit avpkt 1000
#####download
net_rule(){
##下载根
tc qdisc add dev $1 root handle 10: cbq bandwidth 100Mbit avpkt 1000
tc class add dev $1 parent 10:0 classid 10:$2 cbq bandwidth 100Mbit rate 100Mbit allot 1514 weight 1Mbit prio 8 maxburst 20 avpkt 1000
#####upload
tc class add dev $ODEV parent 50:0 classid 50:$2 cbq bandwidth 100Mbit rate 100Mbit allot 1514 weight 1Mbit prio 8 maxburst 20 avpkt 1000
}
###下载队列和子队列以及过滤函数
net_down(){
COUNTER=$IPS
while [ $COUNTER -le $IPE ]
do
tc class add dev $1 parent 10:$3 classid 10:$3$COUNTER cbq bandwidth 100Mbit rate $DOWNLOAD allot 1514 weight 20Kbit prio 5 maxburst 20 avpkt 1000 bounded
tc qdisc add dev $1 parent 10:$3$COUNTER sfq quantum 1514b perturb 15
tc filter add dev $1 parent 10: protocol ip prio 99 u32 match ip dst $2$COUNTER flowid 10:$3$COUNTER
#############################
COUNTER=` expr $COUNTER + 1 `
done
}
#############################
##上传队列初始化
net_up(){
COUNTER=$IPS
while [ $COUNTER -le $IPE ]
do
##给需要上传的限制的IP做mangle 标记
iptables -t mangle -A PREROUTING -s $1$COUNTER -j MARK --set-mark $2$COUNTER
iptables -t mangle -A PREROUTING -s $1$COUNTER -j RETURN
tc class add dev $ODEV parent 50:$3 classid 50:$3$COUNTER cbq bandwidth 100Mbit rate $MAXUP allot 1514 weight 20Kbit prio 5 maxburst 20 avpkt 1000 bounded
#添加支类规则队列
tc qdisc add dev $ODEV parent 50:$3$COUNTER sfq quantum 1514b perturb 15
#建立网络包过滤器
tc filter add dev $ODEV parent 50: protocol ip prio 100 handle $2$COUNTER fw classid 50:$3$COUNTER
COUNTER=` expr $COUNTER + 1 `
done
}
##限速控制函数
net_rate(){
net_rule $1 $3
net_down $1 $2 $3
net_up $2 $4 $3
}
#net_rate "eth1.20" "192.168.20." "1" "100"
#对应的参数$1 $2 $3 $4 { "下载网卡" "下载网卡IP网段" "初始规则序号,请递增" "mangle 表初始规则,也请递增" }
net_rate "eth1.20" "192.168.20." "1" "100"
net_rate "eth1.23" "192.168.23." "2" "101"
net_rate "eth1.24" "192.168.24." "3" "102"