使用 tc/iptables 对出站客户端源 IP 进行流量整形

使用 tc/iptables 对出站客户端源 IP 进行流量整形

我的问题是,我想限制服务器上的用户带宽,想知道最好的方法是什么。在深入研究 tc/iptables 之前,我想知道是否可以就此获得任何建议,如果有人可以给我一个示例配置,我可以尝试一下,我将不胜感激。

据我所知,您可以使用 tc 制定规则,然后使用 mark 语句在 iptables 中应用这些规则。有些人建议使用 mangle postrouting 或 output,但不能 100% 确定哪一个最好,或者是否重要。我相信使用 tc 时我会使用 htb(令牌桶来限制带宽),但人们说存在性能权衡,我正在寻找延迟最低的方法。这些用户不在内部网络上,而是连接到服务器。

我有两种类型的用户,因此只需要两条规则来限制他们。到目前为止,我认为 tc/iptables 组合是我想要的,但我愿意听取替代方案的建议。

我认为对于 iptables,命令如下

带宽限制规则1

iptables -A PREROUTING -s xxx.xxx.xxx.xxx -t mangle -j MARK --set-mark 0x1

带宽限制规则2

iptables -A PREROUTING -s xxx.xxx.xxx.xxx -t mangle -j MARK --set-mark 0x2

我希望发生什么

  • 用户通过 eth0 接入(他们的 IP 是已知的,而不是随机 IP)
  • 向服务器请求信息
  • 服务器将应用规则后有关 eth0 的信息发送回给用户

答案1

使用 tc 是在 Linux 中进行整形的正确方法。最好的文档是拉拉训练中心。首先,您需要了解要调整哪种流量 - 出口流量还是入口流量。之后,您必须选择一个接口来执行此操作(根据 NAT 之前的源地址调整传出接口上的入口流量,根据 NAT 之后的目标地址调整本地接口上的出口流量更为简单)。此外,如果您为两种类型的用户使用不同的接口(可能是 VLAN 接口),则可能根本没有 iptables 规则。之后,您应该在所选接口上设置 qdiscs。如果您的用户按接口划分,则可能是无类的;如果您使用一个接口来调整少数用户类型的带宽,则可能是有类的。之后,您必须设置一个过滤器(如果您使用有类方案)。下面的链接中有很多示例。祝您好运...

相关内容