我们已经说过,专用网络中的用户通过正在执行的地址(NAT)4
连接到互联网。我必须配置为向用户提供访问权限,但对用户的带宽进行限制,而对其他用户则没有限制。Linux router
public IP
network address translation
QoS
Internet
2
eth0:121.51.26.35
eth1:10.239.107.1
eth0
是Linux Router
一个10Mbps
链接。eth1
连接到switch
且4
节点连接到switch
。我想配置为仅限制一组用户的tc
带宽以仅累积使用。 (当1个用户下载/上传时,他/她必须收到,但当3个用户同时下载/上传时,他们必须收到)2 nodes
(XyZ in picture)
3Mbps
3Mbps
1MBps
首先请告诉我这个要求是否可以实现,如果是,我该如何进行?
下面是拓扑图
答案1
您需要选择一个类感知 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)
并且在两个接口上(用于上传和下载整形)。
使用 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 就能满足您的需要。它试图在客户端之间实现某种平衡,而不实际应用任何硬带宽限制。
祝你好运。