如何配置每个 IP 的 QoS?

Nee*_*eel 5 linux qos bandwidth tc nat

我们已经说过,专用网络中的用户通过正在执行的地址( NAT)4连接到互联网。我必须配置为向用户提供访问权限,但对用户的带宽进行限制,而对其他用户则没有限制。Linux routerpublic IPnetwork address translationQoSInternet2

eth0:121.51.26.35
eth1:10.239.107.1
Run Code Online (Sandbox Code Playgroud)

eth0Linux Router一个10Mbps链接。eth1连接到switch4节点连接到switch。我想配置tc2 nodes仅限制一组用户的带宽(XyZ in picture)以仅3Mbps累积使用。(当1个用户下载/上传时,他/她必须收到3Mbps,但当3个用户同时下载/上传时,他们必须收到1MBps

首先请告诉我这个要求是否可以实现,如果是的话我该如何进行?

下面是拓扑图

在此输入图像描述

fro*_*utz 4

您需要选择一个类感知 qdisc,例如 HFSC 或 HTB。

然后你必须构建一个像这样的类树:

Root Class (10MBit)
|
\--- XyZ Class (rate 3Mbit ceil 3Mbit)
|    |
|    \--- Client 10 (rate 1.5Mbit ceil 3Mbit)
|    \--- Client 11 (rate 1.5Mbit ceil 3Mbit)
|
\--- Client 30 (rate 3.5Mbit ceil 10Mbit)
\--- Client 40 (rate 3.5Mbit ceil 10Mbit)
Run Code Online (Sandbox Code Playgroud)

并且在两个接口上(用于上传和下载整形)。

使用 HTB 来获得可预测的结果,您应该确保子级之和始终等于父级。因此 Root 有 10Mbit,其直接子级相等 (Xyz 3Mbit + Client30 3.5Mbit + Client40 + 3.5Mbit == 10Mbit)。同样,XyZ 有 3Mbit 及其子 Client10+Client11。

很多年前,我写了一个脚本,做了类似的事情:

https://github.com/frostschutz/FairNAT

今天它已经无人维护,但也许它可以给你一些想法。

Linux 中的流量整形是一个被忽视/深奥的领域,也很难找到好的文档。不确定这是否改变了......

http://lartc.org/ (忽略wondershaper部分)

和内核数据包传输图http://www.docum.org/docum.org/kptd/(也是常见问题解答)

或者,如果这一切都太复杂,也许像 ESFQ 这样的无状态 qdisc 就能满足您的需要。它试图在客户端之间实现某种平衡,而不实际应用任何硬带宽限制。

祝你好运。

  • eth0:上传,eth1:下载。如果要塑造两个方向,则需要在两个接口上使用 qdisc。您只能间接影响下载(延迟或丢弃 tcp 数据包并希望另一方会接受提示)。 (3认同)