HTB的最低费率和默认类别问题


29

我对正在使用的HTB结构有一些疑问。

我的目的是限制本地网络中用户的下载和上传速度。网络中的每个用户都有一个个人域列表,其中包含他不能超过的域的上下速度。

这意味着user1可以将slashdot.org上的访问权限限制为下载8KB,上传3KB,而user2可以将slashdot.org上的访问权限限制为4KB(向下)和1KB(向上)。

现在,我设置了一个iptables / tc夫妇,效果很好,但规模很小,同时使用2或3个虚拟主机(不幸的是,我无法执行实际大小测试)。

这是我当前的结构(我只会在LAN的出口上显示一个结构,用于上传的结构只是该结构的“副本”)

接口上连接的HTB qdisc(句柄2),默认流量类别为FFFF。

直接在HTB qdisc之下的根类2:1具有速率和上限DOWNLINK容量。

默认的2:FFFF类是2:1的子级,速率为1kbsp,下行容量为上限。

然后,当对来自某个域的用户有新限制时,会动态添加其他类,并添加新的tc类以控制从其域的下载速度。

现在,这是我所做的:

创建一个具有唯一ID(从数据库获取,此处不是重点)的新tc类,作为父类,类2:1,速率值为1bps,ceil值设置为有限的下载速度。

这是tc命令:

-------------- BEGIN SCRIPT --------------
DOWNLINK=800

## Setting up the static tc qdisc and class

$tc qdisc add dev $LAN_IFACE root handle 2: htb default 0xFFFF

# Main class so the default class can borrow bandwith from the others
$tc class replace dev $LAN_IFACE parent 0x2: classid 0x2:0x1 htb rate $DOWNLINK ceil $DOWNLINKkbps

# add the default class of class id 2:a under the main class of classid 2:1
$tc class replace dev $LAN_IFACE parent 0x2:0x1 classid 0x2:0xFFFF htb rate 1kbps ceil $DOWNLINKkbps prio 0

# add to the leaf class 2:10 for default traffic a sfq qdisc
$tc qdisc add dev $LAN_IFACE parent 0x2:0xFFFF handle 0xFFFF: sfq perturb 10

## The dynamic part called each time a new restriction for a couple domain/user is added
$tc class replace dev $LAN_IFACE parent 0x2:0x1 classid 0x2:0x$idHex htb rate 1bps ceil $speedDownkbps prio 1

# Add the sfq at the leaf class 2:1$id
$tc qdisc add dev $LAN_IFACE parent 0x2:0x$idHex handle 0x$idHex: sfq perturb 10

# $id is the mark added by iptables for this couple domain/user
$tc filter replace dev $LAN_IFACE parent 0x2:0 protocol ip prio 3 handle 0x$id fw flowid 0x2:0x$idHex
-------------- END SCRIPT --------------

所有正常流量(无速度限制)应转到默认类别,而受限流量应发送到其对应的tc类别。

我严重怀疑的一点是,默认类和受限类使用的最小1bps速率。我无法控制将要创建的受限类的数量,并且我不希望受限类的总比率超过根类之一。

还有一点,我添加了默认值prio 0和受限类prio 1,因此,如果默认类应该借用(几乎总是根据其非常慢的速率),则该类将在其他受限域之前提供。但是,如果我将默认类的ceil保留为根类之一,这些域是否会挨饿?

我如何才能成功地允许用户在不受限制的使用情况下保持良好的交互性和带宽,同时又限制了几个域/用户的速度?

我还想知道默认类是否在这里有用,因为如果我不为htb qdisc指定默认类,则不匹配过滤器的数据包将以硬件速度出队。(但这里又让受限类饿了吗?)

我真的是tc和网络QoS的新手,因此欢迎任何建议,批评家(建设性的;))。

文森特

Answers:


2

由于您未包含分类器,因此很难推断出您在每个班级中的确切流量。例如,传出的HTTP或SSH流量对于交互性非常重要,传入的HTTP则不是那么重要。

我可以这样说来保证每个服务的一定带宽:我有x kbps的传入httpd流量,它在用户之间平均分配。如果您有10或100个用户,这是公平的。”如果您在每个服务中都有高优先级用户或低优先级用户,则需要为它们提供其他类和分类器。

(另外,我希望您知道您只能调整来自接口的传出流量,而不是传入的流量。这意味着,如果您想限制上行链路,则必须使用到Internet的传出接口或使用中间队列设备。) lartc.org指南是非常好的资源。)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.