`

C(HTB)+iptables作流量控制1

阅读更多
一、环境和要求:
线路:ADSL:2M/512K
eth0:10.0.0.136,外网口
eth1:192.168.1.1,内网口

业务需求:保证正常的网页浏览,FTP,SMTP,POP3,对其它的所有应用加以限制,以免影响正常业务的使用。

1、让交互数据包保持较低的延迟时间,也就是说上载或下载文件不会打扰SSH/telnet等。
2、上载或下载期间有合理的速率用于网页浏览,即使http属于一种大量数据传输,也不应受其它传输影响太大
3、对FTP-data限速,不会占用所有带宽
4、对SMTP,pop3限速
5、对未分类的进行限制,以免影响
6、保证上载不会影响下载,上载数据流会影响下载的速率,这是相当普遍的现象。
7、对每个IP的下载速率进行限制
8、取得空闲带宽的优先级别如:交互数据,FTP-data,smtp,pop3;网页浏览,其它业务优先级别最低


二、方法:

1、(eth0)使用HTB分成五类:如下图
+---------+
| root 1: |
+---------+
|
+--------------------------------+
| class 1:1 |
+--------------------------------+
| | | | | |
+----+ +----+ +----+ +----+ +----+
|1:11| |1:12| |1:13| |1:14| |1:15|
+----+ +----+ +----+ +----+ +----+

classid 1:11:

1)这个类优先权最高。拥有最低的延迟并最先取得空闲带宽,因此要设置这个类的峰值速率。
ssh、telnet、dns、quake3、irc,ftp控制,smtp命令和带有SYN标记的数据包都应属于这一类。

2)为了保证上行数据流不会伤害下行流,我们还要把ACK数据包排在队列前面。这就是当发生大批量数据流的时

候,双向传输均受到严重影响的原因。因为下行数据的ACK必须同上行流进行竞争,并在处理过程中被延迟。

3)限制上载速率:把上载速率限制在比可用带宽稍小一些的位置上,于是你的MODEM中就不会形成队列了。

4)排除了下行队列(除了偶尔的突发),保证交互数据包永远排在上行队列的最前面。

classid 1:12:大批量传输的类。主要用来处理浏览网页的数据包,目标端口80,8080,443,8443的包。

classid 1:13:此类是拥用最大吞吐TOS位的数据包。用于处理目的地址为xxxx的FTP-data。

classid

1:14:这里是邮件(SMTP、pop3)相关和TOS要求最小成本的数据流。用于处理目的地址为xxxx的smtp,pop3服务

classid 1:15:最后是经过NAT进行大批量传输的机器,以保证他们不会妨碍正常服务。

2、(eth0)限制下载速率:。丢掉那些太快到来的数据包,不让他们导致TCP/IP的速率低于我们期望的速率。因

为我们不希望轻易地丢弃数据包,所以我们要配置“burst”来容纳突发传输。

3、(eth1)限制下载速率:对每一个IP限制最高下载速率



三、
1、队列处理

#脚本:用384kbps作为峰值速率,调整CEIL为上行速率的75%。
#Set the following values to somewhat lesss than your actual download and uplink speed.
DOWNLINK=2000
UPLINK=384

#清空已有的队列,并把出错消息清空
#clean existing down and uplink qdiscs,put the errors to /dev/null
tc qdisc del dev eth0 root 2> /dev/null > /dev/null
tc qdisc del dev eth0 ingress 2> /dev/null > /dev/null
tc qdisc del dev eth1 root 2> /dev/null > /dev/null

########################################uplink###########################################

#建立HTB父类,默认数据由1:15这个类通走
#install root HTB,point default traffic to 1:15:
tc qdisc add dev eth0 root handle 1: htb default 15

#设定uplink的最大速率。
#shape everything at $UPLINK speed -this prevents huge queues in your DSL modem which destroy

latency:
# main class
tc class add dev eth0 parent 1: classid 1:1 htb rate $kbit ceil $kbit

#分类,1:11为最高优先级别,stmp,pop3,ftp-data次之,网页浏览再次之。并对每个类限制了最高速率。
#high prio class 1:11:
tc class add dev eth0 parent 1:1 classid 1:11 htb rate 128kbit ceil 128kbit prio 0
tc class add dev eth0 parent 1:1 classid 1:12 htb rate 128kbit ceil $kbit prio 2
tc class add dev eth0 parent 1:1 classid 1:13 htb rate 32kbit ceil $kbit prio 1
tc class add dev eth0 parent 1:1 classid 1:14 htb rate 32kbit ceil $kbit prio 1
#bulk & default class 1:15 -gets slightly less traffic,and a lower priority:
tc class add dev eth0 parent 1:1 classid 1:15 htb rate 16kbit ceil $kbit prio 3


可以在类下面再附加上另一个队列规定,以保证带宽的公平使用:
#bost get Stochastic Fairness:
tc qdisc add dev eth0 parent 1:12 handle 12: sfq perturb 10
tc qdisc add dev eth0 parent 1:13 handle 13: sfq perturb 10
tc qdisc add dev eth0 parent 1:14 handle 14: sfq perturb 10
tc qdisc add dev eth0 parent 1:15 handle 15: sfq perturb 10


2、分类:
上面的队列处理中等于把所有发出的数据包都送给了1:15
(tc qdisc add dev eth0 root handle 1: htb default 15)。
现在应该需要告诉机器那些数据包走哪条路。设置过滤器以便用iptables对数据包进行分类。
可以通过RETURN方法避免遍历所有的规则。
#TOS Mininum Delay (ssh,telnet) in 1:11:
tc filter add dev eth0 parent 1:0 protocol ip prio 1 handle 1 fw classid 1:11
#80,8080,443 in 1:12
tc filter add dev eth0 parent 1:0 protocol ip prio 2 handle 2 fw classid 1:12
#ftp-data in 1:13
tc filter add dev eth0 parent 1:0 protocol ip prio 3 handle 3 fw classid 1:13
#smtp,pop3 in 1:14
tc filter add dev eth0 parent 1:0 protocol ip prio 4 handle 4 fw classid 1:14
#
tc filter add dev eth0 parent 1:0 protocol ip prio 5 handle 5 fw classid 1:15

这样数据包会有一个特定的FWMARK标记值(hanlde x fw),表明它应该送给哪个类( classid x)。
后面要给数据包打标记。


3、丢掉那些太快到来的数据包,不让他们导致TCP/IP的速率低于我们期望的速率。因为我们不希望轻易地丢弃数据包,所以我们要配置“burst”来容纳突发传输。,
########################################DOWNLINK###########################################
# install the ingress qdisc on the ingress
tc qdisc add dev eth0 handle ffff: ingress
# DROP everything that's coming in too fast:
tc filter add dev eth0 parent ffff: protocol ip prio 50 u32 match ip src 0.0.0.0/0 police rate $kbit burst 10k drop flowid :1


4、对内网的IP速率进行限制
tc qdisc add dev eth1 root handle 2: htb
tc class add dev eth1 parent 2: classid 2:1 htb rate 128kbit ceil $kbit
tc qdisc add dev eth1 parent 2:1 sfq
tc filter add dev eth1 parent 2:0 protocol ip prio 4 u32 match ip dst 192.168.1.0/24 flowid 2:1
分享到:
评论

相关推荐

    htb+imq流量控制

    tc+htb+imq流量控制脚本

    tc+htb+imq流量控制

    htb+imq流量控

    5.X_HTB+PCQ智能流控精华版

    这个"5.X_HTB+PCQ智能流控精华版"脚本集成了HTB和PCQ的优点,为ROS 5.x用户提供了一套简洁而高效的流量控制方案。脚本包含了详细的教程说明,使得安装和配置过程变得简单,即便是没有深入技术背景的管理员也能快速...

    ROS HTB+PCQ 脚本

    ROS HTB+PCQ 脚本。很给力的一个脚本,本人已经试过,放心使用。

    ROS HTB+PCQ策略

    HTB(Hierarchical Token Bucket)和PCQ(Per Connection Queue)是ROS中两种重要的流量控制和调度策略,常用于优化网络带宽分配,确保不同服务的质量。 **HTB限速(游戏网页端口优先)** HTB是一种流量整形工具,...

    ROS3.30 +HTB+DSCP-L7

    ROS3.30 +HTB+DSCP-L7

    inux下TC+HTB流量控制.doc

    在Linux环境下,如果配置了两个网卡,如eth1作为外网接口,eth0作为内网接口,通常会在eth0上设置HTB流量控制。HTB是一种更高级的流量整形算法,它可以创建一个分层级的令牌桶,用于限制和管理不同级别的流量速率。 ...

    ros3.x的HTB+PCQ脚本

    ROS3.x的HTB+PCQ脚本是网络流量控制技术在RouterOS系统中的应用,主要目的是优化网络带宽管理,确保在10M网线的限制下,能够同时稳定支持100台设备的使用,并且不论是游戏还是网页浏览都能保持流畅。RouterOS是由...

    ROS3.30 4MADSL使用HTB+PCQ限速实例

    网上有大把的HTB+PCB脚本,但基本上都是针对大型网吧的脚本。这里就给个4M实例。单线ADSL带宽4M,线路损耗后实际速度3.5M左右,上传350k左右,由于ADSL满速下载、上传速度会变慢,配置ROS最高上传、下载最好不要超过...

    ros脚本HTB+PCQ

    HTB是Linux内核中的一个流量控制机制,用于在不同优先级的数据流之间分配带宽。它基于令牌桶算法,将数据流分到不同的层次(类),每个类有自己的令牌桶。每个类在允许发送数据前需要获取令牌,令牌数量决定了其可...

    ROS 6M单线 HTB+L7+DSCP+PCQ 全分离策略

    在给定的"ROS 6M单线 HTB+L7+DSCP+PCQ 全分离策略"中,涉及了网络流量控制和分类的多个核心概念,主要包括HTB(Hierarchical Token Bucket)、L7(Layer 7 Filter)、DSCP(Differentiated Services Code Point)和...

    6M单线HTB+L7+DSCP+PCQ网页-在线视频-下载全分离

    HTB允许更精细的带宽控制,确保高优先级的流量得到优先处理,同时避免低优先级流量对网络造成过度拥堵。 2. L7过滤(Layer 7 Filtering):在IP层(即第3层)和TCP/UDP层(即第4层)的基础上,L7过滤进一步深入到...

    ROS3x-5.x软路由多ADSL+光纤+HTB+七层协议脚本

    ROS3x-5.x软路由多ADSL+光纤+HTB+七层协议脚本

    linux htb流量控制使用实例

    3. 高度灵敏性:HTB 可以实时地监控和控制流量,确保网络的稳定性和安全性。 HTB 的应用场景包括: 1. 网络流量控制:HTB 可以用于控制网络流量,确保网络的稳定性和安全性。 2. 带宽管理:HTB 可以用于管理带宽,...

    ROS软路由 双线HTB流量控制教程

    这里我们介绍下双线的 HTB的操作方法,这里以电信和联通线路为例,双线的 HTB里我们可以加入对游戏端口的优先控制,即但个用户在下载时,玩游戏同样不会卡,我们这里重点讲解 HTB流控做法,双线的路由规则被忽略。...

    软路由ROS 普通QOS策略 HTB+PCQ 脚本 通过测试100﹪好用

    除夕夜200个人大部分在那看春晚直播,本来是用的那个元旦加强版的。 各种在线视频,风行,PPS,QQ直播,我滴个神啊, 那个卡的我啊,蛋都绿了。 随便开个网站,没有30秒别想出来字,网上看个电影,90分钟的一部...

    HTB linux queuing discipline manual--userguide[HTB 流量控制手册——用户指导]

    **Linux HTB流量控制手册——用户指导** 在Linux操作系统中,网络流量管理是至关重要的,尤其是在高带宽和多用户环境中。HTB(Hierarchical Token Bucket)是一种高级的队列调度算法,它允许系统对不同优先级的网络...

    最新ROS3.x-6.x脚本生成器(可生成单线多线HTB流控模式)

    1、可生成单线htb+pcq(即游戏网页下载优先级别+自动限速流控模式) 2、可生成多线htb+pcq(即游戏网页下载优先级别+自动限速流控模式) 3、生成电信联通策略(实现南北互通) 4、光纤一号多拔功能(可以拔N个号) 5...

    linux高级路由和流量控制HOWTO中文版(牛老师译)

    Linux中的流量控制机制包括`iptables`、`tc`(Traffic Control)和`netem`(Network Emulation)。 10. **iptables**:iptables是Linux内核防火墙的用户空间工具,可以实现包过滤、NAT(网络地址转换)和报文速率...

    TC(linux下流量控制工具)详细说明及应用实例借鉴.pdf

    1. 流量控制方式:TC 提供了多种流量控制方式,包括 Token Bucket Filter(TBF)、Hierarchical Token Bucket(HTB)等。 2. 流量控制处理对象:TC 可以对网络流量进行分类、过滤和修改,以达到流量控制的目的。 3. ...

Global site tag (gtag.js) - Google Analytics