iptables利用hashlimit限速

对于linux系统限速有多种方法:
方法一:tc方法,此方法配置复杂
方法二:wondersharper软件限速,配置简单,针对物理端口限速
方法三: iptables限速,主要依据令牌桶算法,主要有limit与hashlimit,limit不支持8mb/s这种写法
什么是hashlimit
hashlimit是iptables的一个拓展模块,其本身是一个匹配模块,不具有其他功能,需要结合其他模块来完成复杂任务。

什么是令牌桶
hashlimit使用的算法叫做令牌桶算法。

令牌桶(token bucket),顾名思义,可以理解为有一个桶,里面装满了令牌(token)。当请求来到时,可理解为人群来到,只有拿到令牌的人才能参加活动(例如购买某种物品)。令牌桶的容量是一个固定值,且令牌桶也会在不满时以一定速率生成新的令牌,令牌的生成速率也是一个固定值。

所以,例如使用一个令牌桶来限制人群购买商品的速率,例如假设令牌桶的容量是50,生成速率是每秒100个,人群的购买欲望是无穷的(尽可能达到大的购买速率)。于是,在开放购买的瞬间,人群瞬间抢完了50个令牌(突发速率),而之后人群以每秒100人的速率购买,正好与令牌生成速度相同(限制的最高速率),同时令牌桶容量一直为0,这样一来就成功将人群购买速率限制为令牌生成速率。

实操
看过了上面什么是令牌桶的解释,相信你也意识到了,令牌桶生成速率就是我们限制的网络速率。

下面以一个简单的场景来讲解:

A(一个多个不同IP的客户端)→ B(流量中转机器)→ C(流量目标机器)

假设A、B、C的IP地址分别为1.1.1.1,2.2.2.2,3.3.3.3。

在此场景中,要求限制A通过B的网络速率的总合为上下对等100Mbps。(无论多用户还是单用户,多线程还是单线程,总速率限制为100Mbps)

在B上操作:

限制C→B→A速率

`iptables -A INPUT -p tcp -s 3.3.3.3 -m hashlimit \
--hashlimit-name limitDownLink \
--hashlimit-upto 12500kb/s \
--hashlimit-mode srcip \
--hashlimit-burst 12500kb \
-j ACCEPT

iptables -A INPUT -p tcp -s 3.3.3.3 -j DROP`
部分解释:

--hashlimit-name不仅是个“名字”,他是令牌桶独一无二的标志,如果两条命令用了一个名字,他们将共享这个令牌桶(可以知道速率也会共享),所以请保证使用独一无二的名字。

--hashlimit-upto制定了令牌生成速率。(这里kb/s是kByte/s)

--hashlimit-mode是匹配模式,这里指定srcip模式则是每个源IP一个令牌桶,因为这里源IP只有C的3.3.3.3,所以令牌桶只有一个。模式有:srcip、srcport、dstip、dstport。

--hashlimit-burst制定了令牌桶的大小(iptables规定了令牌桶大小必须大于等于生成速率(设置的不对iptables会告诉你最小值,最小值也不一定是生成速率))。

为什么要两条命令?

被第一条命令匹配成功的数据报(拿到令牌的)被ACCEPT,其余的数据报被第二条匹配而丢弃。如果没有第二条规则,则数据包被INPUT链默认策略匹配(绝大多数情况以及默认情况下是ACCEPT),故而根本没有起到限速作用。

限制A→B→C速率

`iptables -A OUTPUT -p tcp -d 3.3.3.3 -m hashlimit \
--hashlimit-name limitUpLink \
--hashlimit-upto 12500kb/s \
--hashlimit-mode dstip \
--hashlimit-burst 12500kb \
-j ACCEPT

iptables -A OUTUT -p tcp -d 3.3.3.3 -j DROP`
其他
灵活的限速

参照实操部分的例子,你可以灵活的设置自己的规则,例如加入匹配端口等其他匹配规则

limit限速方法
`iptables -A OUTPUT -p tcp -d 3.3.3.3 -m limit \
--limit 100/s \
--limit-burst 10 \
-j ACCEPT

iptables -A OUTUT -p tcp -d 3.3.3.3 -j DROP`
--limit 指定令牌桶速度,指包的个数,单个包最大1500字节,100 1500 8=1.14Mb/s

--hashlimit-above与--hashlimit-upto两者的区别根据文档一个是min,一个是max,min以上允许,max以下允许

赞(0) 打赏
未经允许不得转载:IT火车 » iptables利用hashlimit限速

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

1元打赏送给作者

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫打赏

微信扫一扫打赏