1. 程式人生 > >Iptables+tc 網咖每IP 限速指令碼

Iptables+tc 網咖每IP 限速指令碼

#!/bin/sh
# xiaoh www.linuxbyte.org
 
#  定義進出裝置(eth0 內網,eth1外網)
IDEV="eth0"
ODEV="eth1"
 
#  定義總的上下頻寬
UP="50mbit"
DOWN="50mbit"
 
#  定義每個受限制的IP上下頻寬
#rate 起始頻寬
UPLOAD="4mbit"
DOWNLOAD="5mbit"
#ceil 最大頻寬
MUPLOAD="5mbit"
MDOWNLOAD="10mbit"
 
#內網IP段
INET="192.168.0."
 
# 受限IP範圍,IPS 起始IP,IPE 結束IP。
IPS="1" 
IPE="114"
  # 清除網絡卡原有佇列規則 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