使用TC实现基于Linux系统的流量管理

Red Hat Linux 7.3 内核 2.4.18 以上。在服务器的eth0 绑定了外部地址 eth0:192.168.1.3,eth1 绑定了内部地址 eth1:1 172.17.1.1,eth1:2 172.18.1.1,eth1:3 172.19.1.1。

现在要实现的功能就是整个出口限制在512kbit(上传流量) , 172.17网段的下载流量下载到512Kbit ,172.18 网段限制在128kbit,172.19的网段限制到 3Mbit。

方法如下:

首先绑定相应的地址,实现路由设定,使用iptables实现。

# iptables ?A input -F
# iptables -A output -F
# iptables -A forward -F
#echo 1 > /proc/sys/net/ipv4/ip_forward
#允许转发
# iptables -A input ?j accept
# iptables -A output -j accept
# iptables -A forward -j accept
# iptables -t nat -A POSTROUTING -s 172.17.0.0/16 -j MASQUERADE
# iptables -t nat -A POSTROUTING -s 172.18.0.0/16 -j MASQUERADE
# iptables -t nat -A POSTROUTING -s 172.19.0.0/16 -j MASQUERADE

进行IP地址伪装,使得内部的主机的数据包能通过服务器与外界联系。进行流量管理:

#tc qdisc add dev eth0 root tbf rate 512k lantency 50ms burst 1540

在网卡eth0上使用tbf(TokenBucket Filter)过滤队列,将出口限制在512kbit,延迟50ms,突发数据1540,rate指定的数值就是限制的带宽。继续在eth1做限制:

#tc qdisc add dev eth1 root handle 1:0 cbq bandwidth 100Mbit avpkt 1000 cell 8

创建队列,指明网卡为100M网卡,这个跟流量限制无关,用于计算使用。

#tc class add dev eth1 parent 1:0 classid 1:1
cbq bandwidth 100Mbit rate 5Mbit weight
6Mbit prio 8 allot 1514 cell 8 maxburst 20 avpkt 1000 bounded

创建根分类,带宽限制在5Mbit,并且不允许借用别的带宽。Prio 后面的参数为优先级,指定数据包处理的顺序。

#tc class add dev eth1 parent 1:1 classid 1:3 cbq
bandwidth 100Mbit rate 512kbit weight 5Mbit prio 5 allot
1514 cell 8 maxburst 20 avpkt 1000 bounded

在跟类底下,创建分类1:3 限制带宽为512kbit,不允许借用带宽,用于172.17网段。

#tc class add dev eth1 parent 1:1 classid
1:4 cbq bandwidth 100Mbit rate 128kbit weight 5Mbit
prio 5 allot 1514 cell 8 maxburst 20 avpkt 1000 bounded

在跟类底下,创建分类1:4 限制带宽为128kbit,不允许借用带宽,用于172.18网段。

#tc class add dev eth1 parent 1:1 classid 1:5
cbq bandwidth 100Mbit rate 3Mbit weight 10Mbit prio
5 allot 1514 cell 8 maxburst 20 avpkt 1000 bounded

在跟类底下,创建分类1:5 限制带宽为3Mbit,不允许借用带宽,用于172.19网段。

#tc qdisc add dev eth1 parent 1:3 handle 30: sfq
#tc qdisc add dev eth1 parent 1:4 handle 40: sfq
#tc qdisc add dev eth1 parent 1:5 handle 50: sfq

在每个分类底下,创建队列,使用sfq(Stochastic Fareness Queueing)随即公平队列。

#tc filter add dev eth1 parent 1:0 protocol
ip prio 1 u32 match ip dst 172.17.0.0/16 flowid 1:3
#tc filter add dev eth1 parent 1:0 protocol
ip prio 1 u32 match ip dst 172.18.0.0/16 flowid 1:4
#tc filter add dev eth1 parent 1:0 protocol
ip prio 1 u32 match ip dst 172.19.0.0/16 flowid 1:5

使用u32过滤器,对目的地址进行分类,对应已经创建的队列。通过以上方式实现了简单的流量控制,限制出口的上传流量以及内口的下载流量。172.18.1.2 进行下载 限制的是 128kbit,下载速率为 13-16.3kB。172.19.1.2 进行下载 限制的是 3Mbit,下载速率达到 180-500kB。

注:不匹配任何规则的数据包,将已root 设定的规则发送。发现3M带宽的限制误差比较大。

以上的测试都是基于单机的,没有测试满负载的情况。以上的文章是匆忙之中写出来的,TC过滤器涉及到的东西极多,有很多中方法可以实现,基于ip地址或者基于端口都可以实现。

时间: 2024-08-03 13:55:19

使用TC实现基于Linux系统的流量管理的相关文章

基于Linux系统的包过滤防火墙(1)

第1 章.基于路由器的包过滤防火墙 1.1 包过滤防火墙的一般概念 1.1.1 什么是包过滤防火墙 包过滤防火墙是用一个软件查看所流经的数据包的包头(header),由此决定整个包的命运.它可能会决定丢弃(DROP)这个包,可能会接受(ACCEPT)这个包(让这个包通过),也可能执行其它更复杂的动作. 在Linux系统下,包过滤功能是内建于核心的(作为一个核心模块,或者直接内建),同时还有一些可以运用于数据包之上的技巧,不过最常用的依然是查看包头以决定包的命运. 1.1.2 包过滤防火墙的工作层

基于Linux系统的病毒

尽管在Linux里传播的病毒不多,但也是存在一些,我从一些安全站点搜集了一些资料. 1.病毒名称: Linux.Slapper.Worm 类别: 蠕虫 病毒资料: 感染系统:Linux 不受影响系统:Windows 3.x, Windows 95, Windows 98, Windows NT, Windows 2000, Windows XP, Windows Me, Macintosh 病毒传播: 端口:80, 443, 2002 感染目标:各版本Linux系统上的Apache Web服务器

基于Linux系统中查看硬件等信息的方法详解_Linux

本文介绍下,linux下查看硬件信息的命令与方法,包括主板序列号.cpu信息.内存信息.硬盘信息.网卡信息等.1,主板信息.查看主板的序列号 #使用命令dmidecode | grep -i 'serial number'#查看板卡信息cat /proc/pci 2,cpu信息 #通过/proc文件系统1) cat /proc/cpuinfo#通过查看开机信息2) dmesg | grep -i 'cpu'#3)dmidecode -t processor3,在linux系统中查看硬盘信息,常用

基于Linux系统的包过滤防火墙(3)

第3章.包过滤防火墙配置举例 3.1 建立包过滤防火墙 3.1.1网络结构 本节为一个的网络结构建立一个包过滤防火墙. 这个网络结构假设内部网有有效的Internet地址.为了将内部网段198.168.80.0/24与Internet隔离,在内部网络和 Internet之间使用了包过滤防火墙.防火墙的网接口是eth1(198.168.80.254),防火墙的Internet接口是eth0 (198.199.37.254).加外,内网中有3台服务器对外提供服务.分别为: → WWW服务器:IP地址

基于Linux系统的包过滤防火墙(2)

第2章.用用户空间命令iptables实现包过滤 2.1 相关的TCP/IP知识 2.1.1建立TCP连接(通过3次握手实现) 假如服务器A和客户机B通信. (1)B->;A.当B要和A通信时,B首先向A发一个SYN标记的包,告诉A请求建立连接.只有当A收到B发来的SYN包,才可以建立连接,除此之外别无它法.因此,如果你的防火墙丢弃所有的发往外网接口的SYN包,那么你将不能让外部任何主机主动建立连接. (2)B<-A.接着,A收到后会发一个对SYN包的确认包(SYN/ACK)回去,表示对第一个

Linux系统下安装谷歌Google拼音输入法的方法

  Linux系统下安装谷歌Google拼音输入法的方法.目前,网络上提供的拼音输入法非常多,不过,不少网友会觉得使用谷歌拼音输入法这款软件更顺手.那么,谷歌拼音输入法怎么安装使用呢?在今天的教程中,我们就以Linux系统为例子,给大家分享一下谷歌拼音输入法的安装方法.需要说明的是,本操作方法是基于Linux系统的CentOS 5进行的! 谷歌拼音输入法安卓版 推荐:谷歌拼音输入法安卓版 SCIM-GooglePinyin 项目试图将 Android 上的 Google 拼音输入法移植到 GNU

总结六条对我们学习Linux系统有用的忠告

接触linux需要的是端正自己的态度,这个玩意可不是一天两天就能拿得下的.学习个基础,能装系统.能装常见服务.能编译.能配置存储空间.能配置系统参数.能简单查看系统负载等基本够用.但这些只保证能做机房运维,真正和进阶的运维工作不在机房,真正的运维工作也不仅仅只是Linux.Linux只是基于Linux系统运行环境的基础知识,衡量一个好的Linux系统下运维工程师也不一定非得用Linux知识的深浅,当然Linux钻研得越深越好. 还要看工作内容,就拿我来说作为一个机房运维维护人员,机房运维分很多种

如何在 Linux 系统上安装 Suricata 入侵检测系统

如何在 Linux 系统上安装 Suricata 入侵检测系统 随着安全威胁的不断发生,入侵检测系统(IDS)在如今的数据中心环境中显得尤为必要.然而,随着越来越多的服务器将他们的网卡升级到10GB/40GB以太网,对如此线路上的硬件进行计算密集型的入侵检测越来越困难.其中一种提升入侵检测系统性能的途径是多线程入侵检测系统,它将 CPU 密集型的深度包检测工作并行的分配给多个并发任务来完成.这样的并行检测可以充分利用多核硬件的优势来轻松提升入侵检测系统的吞吐量.在这方面有两个知名的开源项目,分别

卡巴斯基发布操作系统Kaspersky OS:完全自主非基于Linux

为人熟知的网络安全和杀毒软件公司卡巴斯基推出了新的安全操作系统:Kaspersky OS.卡巴斯基CEO Eugene Kaspersky在博客文章开头就展示了一个黑盒子--一款三层交换机,这台设备就是采用了卡巴斯基的操作系统,其上赫然写着:Powered by KasperskyOS卡巴斯基操作系统."这款系统是为那些对数据安全有特别需求的网络准备的." 卡巴斯基发布操作系统Kaspersky OS:完全自主非基于Linux 据说Kaspersky OS的开发历经了14年之久,卡巴斯