码迷,mamicode.com
首页 > 系统相关 > 详细

Linux 下内网流量控制工具

时间:2018-01-10 17:34:34      阅读:251      评论:0      收藏:0      [点我收藏+]

标签:class   ####   isp   去除   清除   mes   $1   images   详细   

CentOS-TC(流量控制)

技术分享图片

单IP限制下载命令:

tc qdisc add dev eth1 root handle 1: htb r2q 1

tc class add dev eth1 parent 1: classid 1:1 htb rate 1800kbit burst 10k

tc filter add dev eth1 parent 1: protocol ip prio 16 u32 match ip dst 192.168.0.131 flowid 1:1

 

查看TC的状态

tc -s -d qdisc show dev eth0

tc -s -d class show dev eth0

删除限制下载命令:

tc qdisc del dev eth1 root 

窗体顶端

窗体底端

流量实时查看iftop

iftop -i eth1 -F 192.168.0.0/24 -B -P

 

=>发送数据      <=接收数据

 

TX发送数据流量  RX接收数据流量   total发送接收全部流量

窗体顶端

窗体底端

流量限速脚本 简单版(已剔除服务器IP)

以下脚本中调用/usr/local/tcip   tcip脚本内容

 

#!/bin/bash

##给192.168.15网段的IP做限速

##外网网卡

IN=eth0

##内网网卡

DEV=eth1

## 清除 eth1 所有队列规则

tc qdisc del dev $DEV root 2>/dev/null

 

#定义排队规则

tc qdisc add dev $DEV root handle 1: htb r2q 1

 

for i in {4..254}

do

   if [ $i -ge 5 ] && [ $i -le 8 ] || [ $i -eq 11 ] || [ $i -ge 17 ] && [ $i -le 30 ] || [ $i -eq 64 ] || [ $i -eq 164 ] || [ $i -eq 196 ]

|| [ $i -eq 197 ] || [ $i -eq 199 ] || [ $i -eq 200 ] || [ $i -eq 241 ] || [ $i -eq 251 ] || [ $i -eq 92 ] || [ $i -eq 102 ]

      then echo $i &> /dev/null

      else

#####下载控制在每人实际最大7mb/S左右 

tc class add dev $DEV parent 1: classid 1:$i htb rate 7mbit burst 15k

tc filter add dev $DEV parent 1: protocol ip prio 16 u32 match ip dst 192.168.0.$i flowid 1:$i

 fi

done

启停脚本

#!/bin/bash

#

##内网网卡

DEV=eth1

###定义启停服务

status() {

echo "1.show qdisc $DEV  (显示下行队列):----------------------------------------------"

tc -s qdisc show dev $DEV

echo "2.show class $DEV  (显示下行分类):----------------------------------------------"

tc class show dev $DEV

echo "3.以下 IP地址已被限速:"

IP=`tc -s -d class show dev $DEV | grep "1:" |awk -F: '{print $2}' | awk '{print $1}' | sort -n`

for a in $IP

do

 echo "192.168.0.$a 地址已被限速"

done

}

 

stop(){

echo -n "(删除所有队列......)"

( tc qdisc del dev $DEV root )

}

 

start(){

echo -n "(开启流量控制......)"

( sh /usr/local/tcip )

}

 

#显示帮助

usage() {

echo "使用方法(usage): `basename $0` [start | stop | restart | status ]"

echo "参数作用:"

echo "start   开始流量控制"

echo "stop    停止流量控制"

echo "restart 重启流量控制"

echo "status  显示队列流量"

}

 

case "$1" in

start)

( start && echo "开始流量控制! TC started!" ) || echo "error."

exit 0

;;

 

stop)

( stop && echo "停止流量控制! TC stopped!" ) || echo "error."

exit 0

;;

restart)

stop

start

echo "流量控制规则重新装载!"

;;

status)

status

;;

 

*) usage

exit 1

;;

esac

窗体顶端

窗体底端

tc限速脚本

tc.sh

#!/bin/bash

##给192.168.15网段的IP做限速

##外网网卡

IN=eth0

##内网网卡

DEV=eth1

start() {

## 清除 eth1 eth0 所有队列规则

tc qdisc del dev $DEV root 2>/dev/null

tc qdisc del dev $IN  root 2>/dev/null

##定义总的上下带宽

tc qdisc add dev $DEV root handle 2: htb

tc class add dev $DEV parent 2: classid 2:1 htb rate 20000kbit

tc qdisc add dev $IN root handle 1: htb

tc class add dev $IN parent 1: classid 1:1  htb rate 20000kbit

for (( i=2; i<=253; i=i+1 ))

do

#####下载控制在每人实际最大100k/S左右

tc class add dev $DEV parent 2:1 classid 2:2$i htb rate 100kbit ceil 500kbit burst 15k

tc qdisc add dev $DEV parent 2:2$i handle 2$i: sfq

tc filter add dev $DEV parent 2:0 protocol ip prio 4 u32 match ip dst 192.168.0.$i flowid 2:2$i

#####上传控制在每人实际最大34K/S左右

tc class add dev $IN parent 1:1 classid 1:1$i htb rate 100kbit ceil 300kbit burst 15k

tc qdisc add dev $IN parent 1:1$i handle 1$i: sfq

tc filter add dev $IN parent 1:0 protocol ip prio $i handle $i fw classid 1:1$i

iptables -t mangle -A PREROUTING -s 192.168.0.$i -j MARK --set-mark 0x$i

done

 

}

stop(){

echo -n "(删除所有队列......)"

( tc qdisc del dev $DEV root &&

for (( i=2; i<=253; i=i+1 ))

do

/sbin/iptables -t mangle -D PREROUTING -s 192.168.0.$i -j MARK --set-mark 0x$i

done && echo "ok.删除成功!" ) || echo "error."

}

#显示状态

status() {

echo "1.show qdisc $DEV  (显示下行队列):----------------------------------------------"

tc -s qdisc show dev $DEV

echo "2.show class $DEV  (显示下行分类):----------------------------------------------"

tc class show dev $DEV

echo "3. tc -s class show dev $IN (显示上行队列和分类流量详细信息):------------------"

tc -s class show dev $IN

echo "说明:设置总队列下行和上行带宽 20M."

}

#显示帮助

usage() {

echo "使用方法(usage): `basename $0` [start | stop | restart | status ]"

echo "参数作用:"

echo "start   开始流量控制"

echo "stop    停止流量控制"

echo "restart 重启流量控制"

echo "status  显示队列流量"

}

case "$1" in

start)

( start && echo "开始流量控制! TC started!" ) || echo "error."

exit 0

;;

 

stop)

( stop && echo "停止流量控制! TC stopped!" ) || echo "error."

exit 0

;;

restart)

stop

start

echo "流量控制规则重新装载!"

;;

status)

status

;;

 

*) usage

exit 1

;;

esac

窗体顶端

窗体底端




 

cat  /usr/local/tcip

#!/bin/bash

##192.168.0网段的IP做限速

##外网网卡

IN=eth1

##内网网卡

DEV=eth0

## 清除 eth1 所有队列规则

tc qdisc del dev $DEV root 2>/dev/null

 

#定义排队规则

tc qdisc add dev $DEV root handle 1: htb r2q 2

 

for i in {4..254}

do

#去除不受限制的IP地址

   if  [ $i -eq 3 ] || [ $i -eq 4 ]

      then echo $i &> /dev/null

      else

#####下载控制在每人实际最大6mb/S左右 

tc class add dev $DEV parent 1: classid 1:$i htb rate 2mbit burst 8k

tc filter add dev $DEV parent 1: protocol ip prio 16 u32 match ip dst 192.168.0.$i flowid 1:$i

 fi

done

 

 

 


tcip 服务启停脚本

cat /etc/init.d/tcip

#!/bin/bash

#

##内网网卡

DEV=eth0

###定义启停服务

status() {

echo "1.show qdisc $DEV  (显示下行队列):----------------------------------------------"

tc -s qdisc show dev $DEV

echo "2.show class $DEV  (显示下行分类):----------------------------------------------"

tc class show dev $DEV

echo "3.以下 IP地址已被限速:"

IP=`tc -s -d class show dev $DEV | grep "1:" |awk -F: '{print $2}' | awk '{print $1}' | sort -n`

for a in $IP

do

 echo "192.168.0.$a 地址已被限速"

done

}

 

stop(){

echo -n "(删除所有队列......)"

( tc qdisc del dev $DEV root )

}

 

start(){

echo -n "(开启流量控制......)"

( sh /usr/local/tcip )

}

 

#显示帮助

usage() {

echo "使用方法(usage): `basename $0` [start | stop | restart | status ]"

echo "参数作用:"

echo "start   开始流量控制"

echo "stop    停止流量控制"

echo "restart 重启流量控制"

echo "status  显示队列流量"

}

 

case "$1" in

start)

( start && echo "开始流量控制! TC started!" ) || echo "error."

exit 0

;;

 

stop)

( stop && echo "停止流量控制! TC stopped!" ) || echo "error."

exit 0

;;

restart)

stop

start

echo "流量控制规则重新装载!"

;;

status)

status

;;

 

*) usage

exit 1

;;

esac


Linux 下内网流量控制工具

标签:class   ####   isp   去除   清除   mes   $1   images   详细   

原文地址:http://blog.51cto.com/13017250/2059503

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!