Linux 下内网流量控制工具

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

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

时间: 2024-10-08 05:32:48

Linux 下内网流量控制工具的相关文章

解决linux下内网域名的ping结果和nslookup结果不一致

今天在linux服务器下遇到一个奇怪的问题:内网域名的ping结果居然和nslookup结果不一致,特将解决过程记录如下. 确认/etc/resolv.conf配置是否正确:没问题: 确认/etc/hosts中是否添加了额外域名:没问题: 确认域名服务器中正确的内网域名对应的IP,并和同事确认发现内网域名更新过,ping的结果指向了旧的IP,nslookup的解析结果正确: 确认本地域名缓存服务nscd状态:处于运行中,重启没有解决问题,看起来缓存还是很顽固的: # service nscd s

linux下TC+HTB流量控制

C规则涉及到 队列(QUEUE) 分类器(CLASS) 过滤器(FILTER),filter划分的标志位可用U32或iptables的set-mark来实现 ) 一般是"控发"不控收 linux下有两块网卡,一个eth1是外网,另一块eth0是内网.在eth0上做HTB.(注 意:filter划分标志位可用u32打标功能或iptables的set-mark功能,如果用iptables来打标记的话,下行速LV在eth0处 控制,但打标应在进入eth0之前进行,所以,"-i et

linux下的数据备份工具rsync讲解

linux下的数据备份工具 rsync(remote sync 远程同步) 名词解释: sync(Synchronize,即"同步")为UNIX操作系统的标准系统调用,功能为将内核文件系统缓冲区的所有数据(也即预定将通过低级I/O系统调用写入存储介质的数据)写入存储介质(如硬盘). sync 是一个linux同步命令,含义为迫使缓冲块数据立即写盘并更新超级块.在linux系统中,为了加快数据的读取速度,默认情况下,某些数据将不会直接写 入硬盘,而是先暂存内存中,如果一个数据被重复写,这

linux 下的 crontab 定时任务工具

以下内容转自:https://www.cnblogs.com/longjshz/p/5779215.html 在LINUX中,周期执行的任务一般由cron这个守护进程来处理[ps -ef|grep cron].cron读取一个或多个配置文件,这些配置文件中包含了命令行及其调用时间.cron的配置文件称为"crontab",是"cron table"的简写. 一.cron服务 cron是一个linux下 的定时执行工具,可以在无需人工干预的情况下运行作业. servi

浅析 Linux 下的 arm 交叉编译工具

什么是交叉编译工具 http://elinux.org/Toolchains 要解释交叉编译工具,我们首先要理解三个基本概念: 编译平台:是指该编译器是在哪个平台编译出来的 编译主机:编译器运行在哪个平台 目标平台:编译器为哪个平台产生代码 比如我们在 Ubuntu(Linux) 下编译 arm 开发板的程序,那么: 编译平台就是 X86,该编译器在 x86上运行 编译主机就是这台运行 Ubuntu Linux 的电脑 目标平台就是 arm 开发板 所以通常所指的交叉编译,就是在该平台编译生成在

【调试】Linux下超强内存检测工具Valgrind

[调试]Linux下超强内存检测工具Valgrind 内容简介 Valgrind是什么? Valgrind的使用 Valgrind详细教程 1. Valgrind是什么? Valgrind是一套Linux下,开放源代码(GPLV2)的仿真调试工具的集合.Valgrind由内核(core)以及基于内核的其他调试工具组成. 内核类似于一个框架(framework),它模拟了一个CPU环境,并提供服务给其他工具:而其他工具则类似于插件 (plug-in),利用内核提供的服务完成各种特定的内存调试任务.

【one day one linux】linux下的软件包管理工具

Linux 下的软件包管理工具 linux下的软件安装可以通过两种方式,一种是直接使用自带的软件包管理工具安装,另外一种通过编译源码安装. 1.软件包的种类 Red Hat和Fedora:redhat最早发行的个人版本的Linux,自从Red Hat 9.0版本发布后,RedHat 公司就不再开发桌面版的 Linux发行套件,Red Hat Linux停止了开发,而将全部力量集中在服务器版的开发上,也就是 Red Hat Enterprise Linux 版.2004年4月30日,Red Hat

MySQL Study之--Linux下安装MySQL workbench工具

MySQL Study之--Linux下安装MySQL workbench工具 系统环境:      操作系统: RedHat EL6.4(64)      WorkBench: mysql-workbench-community-6.0.9 MySQL Workbench是一款专为MySQL设计的ER/数据库建模工具.它是著名的数据库设计工具DBDesigner4的继任者.你可以用MySQL Workbench设计和创建新的数据库图示,建立数据库文档,以及进行复杂的MySQL 迁移. MySQ

Linux下的屏幕录制工具XVidCap

Linux下的屏幕录制工具XVidCap Jun 05, 2008 XVidCap是Linux下的屏幕录制工具,是讲解软件使用方法.演示电脑操作的必备秘技. XVidCap大概是X windows Video Capture的缩写,未经考证. 之前是在Open Source Alternative这个网站搜索screencast找到的,准备动笔介绍一下时发现keke已经介绍过了. 文章中说下载个deb包安装就好了,我之前下载的是tar.gz,安装也着实非常麻烦,于是再罗嗦几句. 首先在这里下载,