Created
May 20, 2014 00:41
-
-
Save Akagi201/df538094bc178e8b93cd to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/sh | |
# 定义进出设备(IDEV 内网接口, ODEV外网接口) | |
IDEV="br-lan" | |
ODEV="pppoe-wan" | |
# 定义总的上下带宽 | |
UP="7.52mbit" | |
DOWN="9.55mbit" | |
# 定义每个受限制的IP上下带宽 | |
# rate起始带宽(默认限制, 单IP限制带宽) | |
UPLOAD="0.5mbit" | |
DOWNLOAD="0.5mbit" | |
# ceil最大带宽(当带宽有富余时单IP可借用的最大带宽, 这个也是所有受限IP总带宽) | |
MUPLOAD="1mbit" | |
MDOWNLOAD="1mbit" | |
# 内网IP段 | |
INET="192.168.10." | |
# 受限IP范围, IPS: 起始IP, IPE: 结束IP. | |
IPS="100" | |
IPE="200" | |
# 清除网卡原有队列规则, 不显示错误 | |
tc qdisc del dev $ODEV root 2>/dev/null | |
tc qdisc del dev $IDEV root 2>/dev/null | |
# 定义最顶层(根)队列规则, 并指定default类别编号 | |
tc qdisc add dev $ODEV root handle 10: htb default 256 | |
tc qdisc add dev $IDEV root handle 10: htb default 256 | |
# 定义第一层的 10:1 类别 (上行/下行 总带宽) | |
tc class add dev $ODEV parent 10: classid 10:1 htb rate $UP ceil $UP | |
tc class add dev $IDEV parent 10: classid 10:1 htb rate $DOWN ceil $DOWN | |
# 开始iptables打标和设置具体规则 | |
i=$IPS; | |
while [ $i -le $IPE ] | |
do | |
tc class add dev $ODEV parent 10:1 classid 10:2$i htb rate $UPLOAD ceil $MUPLOAD prio 1 | |
tc qdisc add dev $ODEV parent 10:2$i handle 100$i: pfifo | |
tc filter add dev $ODEV parent 10: protocol ip prio 100 handle 2$i fw classid 10:2$i | |
tc class add dev $IDEV parent 10:1 classid 10:2$i htb rate $DOWNLOAD ceil $MDOWNLOAD prio 1 | |
tc qdisc add dev $IDEV parent 10:2$i handle 100$i: pfifo | |
tc filter add dev $IDEV parent 10: protocol ip prio 100 handle 2$i fw classid 10:2$i | |
iptables -t mangle -A PREROUTING -s $INET$i -j MARK --set-mark 2$i | |
iptables -t mangle -A PREROUTING -s $INET$i -j RETURN | |
iptables -t mangle -A POSTROUTING -d $INET$i -j MARK --set-mark 2$i | |
iptables -t mangle -A POSTROUTING -d $INET$i -j RETURN | |
i=`expr $i + 1` | |
done |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment