歡迎您光臨本站 註冊首頁

TC+IPTables實現下載和上傳帶寬限制腳本

←手機掃碼閱讀     火星人 @ 2014-03-12 , reply:0
   

每個IP單獨限制,好隨時修改。如果是用撥號上網的,請把以下內容加到/etc/ppp/ip-up.local中,否則斷線重撥後會沒有上傳限制,對BT光限制下載是不夠的。

 

#!/bin/bash

#

# zyx@zyx.2288.org

#

# 定義上下帶寬

# 注意是 Kbit

DOWNLOAD=800Kbit

UPLOAD=160Kbit

# 定義內網IP段

INET=192.168.0.

# 定義限制的IP範圍

IPS=1

IPE=253

# 定義本伺服器IP

ServerIP=254

# 定義進出設備

IDEV=eth0

ODEV=ppp0

#

#

#

/sbin/tc qdisc del dev $IDEV root handle 10:

/sbin/tc qdisc del dev $ODEV root handle 20:

#

/sbin/tc qdisc add dev $IDEV root handle 10: cbq bandwidth 100Mbit avpkt 1000

/sbin/tc qdisc add dev $ODEV root handle 20: cbq bandwidth 1Mbit avpkt 1000

#

/sbin/tc class add dev $IDEV parent 10:0 classid 10:1 cbq bandwidth 100Mbit rate 100Mbit allot 1514 weight 1Mbit prio 8 maxburst 20 avpkt 1000

/sbin/tc class add dev $ODEV parent 20:0 classid 20:1 cbq bandwidth 1Mbit rate 1Mbit allot 1514 weight 10Kbit prio 8 maxburst 20 avpkt 1000

#

# 不限制內網從本伺服器下載。

# 注意如本伺服器上有代理,用戶可通過代理繞過帶寬限制,

# 可取消以下三句限制從本伺服器下載。

/sbin/tc class add dev $IDEV parent 10:1 classid 10:10 cbq bandwidth 100Mbit rate 95Mbit allot 1514 weight 20Kbit prio 5 maxburst 20 avpkt 1000 bounded

/sbin/tc qdisc add dev $IDEV parent 10:10 sfq quantum 1514b perturb 15

/sbin/tc filter add dev $IDEV parent 10:0 protocol ip prio 50 u32 match ip src $INET$ServerIP flowid 10:10

#

#限制下載速度

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 20Kbit 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 1Mbit rate $UPLOAD allot 1514 weight 4Kbit 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

#192.168.0.78 這傢伙天天BT

ND=200Kbit

NU=50Kbit

/sbin/tc class change dev $IDEV parent 10:1 classid 10:1$NIP bandwidth 100Mbit rate $ND allot 1514 weight 20Kbit prio 5 maxburst 20 avpkt 1000 bounded

/sbin/tc class change dev $ODEV parent 20:1 classid 20:1$NIP cbq bandwidth 1Mbit rate $NU allot 1514 weight 4Kbit prio 5 maxburst 20 avpkt 1000 bounded

#

NIP=1

# 192.168.0.1 增加我自已的帶寬

ND=1500Kbit

NU=500Kbit

 

/sbin/tc class change dev $IDEV parent 10:1 classid 10:1$NIP bandwidth 100Mbit rate $ND allot 1514 weight 20Kbit prio 5 maxburst 20 avpkt 1000 bounded

/sbin/tc class change dev $ODEV parent 20:1 classid 20:1$NIP cbq bandwidth 1Mbit rate $NU allot 1514 weight 4Kbit prio 5 maxburst 20 avpkt 1000 bounded

# ...................

#

#

# 修改防火牆,增加上傳限制

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 192.168.0.0/24 -j MASQUERADE

(責任編輯:A6)



[火星人 ] TC+IPTables實現下載和上傳帶寬限制腳本已經有705次圍觀

http://coctec.com/docs/net/show-post-68329.html