需要对网关做流量控制,针对IP和网段做控制,也有结合iptables实现方式,可能也有针对内外网的服务器,规则明白了,都很容易。
可以查看这篇参考文章,讲的很详细,下面是我改写的shell脚本,非iptables方式:
-
#!/bin/bash
-
# Set the following values to somewhat less than your actual download
-
# and uplink speed. In kilobits. Also set the device that is to be shaped.
-
#INGOING traffic (gateway)
-
IN=eth0
-
#what ip do you want to limit
-
INET="192.168.138."
-
IPS="100"
-
IPE="254"
-
#Total DOWNLINK
-
DOWN="100mbit"
-
#ensure rate speed of DOWNLINK
-
DOWNLOADrate="100kbit"
-
#Allow max rate speed of DOWNLINK
-
DOWNLOADceil="250kbit"
-
start(){
-
#clean eth1 eth0 existing down- and uplink qdiscs, hide errors
-
/sbin/tc qdisc del dev $IN root 2>/dev/null
-
# install root htb of downlink and uplink
-
# main class
-
/sbin/tc qdisc add dev $IN root handle 1: htb
-
/sbin/tc class add dev $IN parent 1: classid 1:1 htb rate $DOWN ceil $DOWN
-
#simgle ip limit
-
/sbin/tc class add dev $IN parent 1:1 classid 1:2 htb rate $DOWNLOADrate ceil $DOWNLOADrate
-
/sbin/tc qdisc add dev $IN parent 1:2 sfq perturb 2
-
/sbin/tc filter add dev $IN protocol ip parent 1: prio 49 u32 match ip dst 192.168.138.10 flowid 1:2
-
/sbin/tc filter add dev $IN protocol ip parent 1: prio 49 u32 match ip dst 192.168.2.0/32 flowid 1:2
-
#net1 limit
-
for (( i=$IPS; i<=$IPE; i=i+1 ))
-
do
-
#####Control DOWNLINK
-
/sbin/tc class add dev $IN parent 1:1 classid 1:1$i htb rate $DOWNLOADrate ceil $DOWNLOADceil
-
/sbin/tc qdisc add dev $IN parent 1:1$i sfq perturb 1$i
-
/sbin/tc filter add dev $IN protocol ip parent 1: prio 50 u32 match ip dst $INET$i flowid 1:1$i
-
done
-
#net2 limit
-
#for (( i=$IPS; i<=$IPE; i=i+1 ))
-
#do
-
# #####Control DOWNLINK
-
# /sbin/tc class add dev $IN parent 1:1 classid 1:2$i htb rate $DOWNLOADrate ceil $DOWNLOADceil
-
# /sbin/tc qdisc add dev $IN parent 1:2$i sfq perturb 2$i
-
# /sbin/tc filter add dev $IN protocol ip parent 1: prio 50 u32 match ip dst $INET$i flowid 1:2$i
-
#done
-
#Other traffic
-
/sbin/tc filter add dev $IN protocol ip parent 1: prio 2 u32 match ip dst 0.0.0.0/32 flowid 1:1
-
}
-
stop(){
-
echo -n "(Delete all qdisc......)"
-
(/sbin/tc qdisc del dev $IN root 2>/dev/null && echo "ok.Delete sucessfully!") || echo "error."
-
}
-
#show status
-
status() {
-
echo "1.show qdisc $IN:----------------------------------------------"
-
/sbin/tc -s qdisc show dev $IN
-
echo "2.show class $IN:----------------------------------------------"
-
N1=`/sbin/tc class show dev $IN | wc -l`
-
if [ $N1 == 0 ];then
-
echo "NULL, OFF Limiting "
-
else
-
/sbin/tc -s class show dev $IN
-
echo "It work"
-
fi
-
}
-
#show help
-
usage() {
-
echo "(usage): `basename $0` [start | stop | restart | status ]"
-
echo "help:"
-
echo "start -- TC Flow Control start"
-
echo "stop -- TC Flow Control stop"
-
echo "restart -- TC Flow Control restart"
-
echo "status -- TC Show all TC Qdisc and class"
-
}
-
case "$1" in
-
start)
-
( start && echo "Flow Control! TC started!" ) || echo "error."
-
exit 0
-
;;
-
-
stop)
-
( stop && echo "Flow Control TC stopped!" ) || echo "error."
-
exit 0
-
;;
-
restart)
-
stop
-
start
-
echo "Flow Control restart"
-
;;
-
status)
-
status
-
;;
-
-
*) usage
-
exit 1
-
;;
- esac
测试:
开启流量控制TC:
- # ./tc_last.sh start
-
# ifconfig eth0
-
eth0 Link encap:Ethernet HWaddr 00:0C:29:DA:56:1C
-
inet addr:192.168.138.131 Bcast:192.168.138.255 Mask:255.255.255.0
-
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
-
RX packets:1811422 errors:0 dropped:0 overruns:0 frame:0
-
TX packets:1083449 errors:0 dropped:0 overruns:0 carrier:0
-
collisions:0 txqueuelen:1000
-
RX bytes:943250761 (899.5 MiB) TX bytes:87045802 (83.0 MiB)
-
-
# wget http://ftp13.enet.com.cn:88/pub/multimedia/video/uvs9_trial_e_rtm.rar
-
--2013-08-08 17:44:01-- http://ftp13.enet.com.cn:88/pub/multimedia/video/uvs9_trial_e_rtm.rar
-
Resolving ftp13.enet.com.cn... 122.224.6.16
-
Connecting to ftp13.enet.com.cn|122.224.6.16|:88... connected.
-
HTTP request sent, awaiting response... 200 OK
-
Length: 180175741 (172M) [application/octet-stream]
- Saving to: `uvs9_trial_e_rtm.rar.17
无限制IP:192.168.138.99
-
# ifconfig eth0
-
eth0 Link encap:Ethernet HWaddr 00:0C:29:88:EC:85
-
inet addr:192.168.138.99 Bcast:192.168.138.255 Mask:255.255.255.0
-
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
-
RX packets:88578 errors:0 dropped:0 overruns:0 frame:0
-
TX packets:43771 errors:0 dropped:0 overruns:0 carrier:0
-
collisions:0 txqueuelen:1000
-
RX bytes:19401052 (18.5 MiB) TX bytes:6876868 (6.5 MiB)
-
-
# wget http://ftp13.enet.com.cn:88/pub/multimedia/video/uvs9_trial_e_rtm.rar
-
--2013-07-16 22:57:10-- http://ftp13.enet.com.cn:88/pub/multimedia/video/uvs9_trial_e_rtm.rar
-
Resolving ftp13.enet.com.cn... 122.224.6.16
-
Connecting to ftp13.enet.com.cn|122.224.6.16|:88... connected.
-
HTTP request sent, awaiting response... 200 OK
-
Length: 180175741 (172M) [application/octet-stream]
- Saving to: `uvs9_trial_e_rtm.rar.2
效果还是很显著的,就是和设置的流量范围有偏差,有待继续研究!