HTB的最小速率和默认类问题

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

我的目标是限制本地networking用户的下载和上传速度。 networking的每个用户都有一个个域名列表,其域名速度不可超越。

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

现在我设置了一个很好的iptables / tc,但是规模很小,同时使用了2个或3个虚拟主机(不幸的是,我不能进行真正的大小testing)。

这里是我目前的结构(我只会在局域网的出口上显示一个,上传的只是这个的一个副本)

在接口上附加一个HTB qdisc(句柄2 :),默认stream量类是FFFF类。

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

默认的类2:FFFF作为2:1的孩子,速率为1kbsp,下载容量为ceil。

然后,当某个域对用户有一个新的限制时,还会有其他类dynamic添加,新增一个tc类来控制域中的下载速度。

现在,这是我做的:

创build一个具有唯一标识(从数据库中获取,而不是点)的新的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 -------------- 

所有正常的stream量(没有速度限制)应该转到默认的类别,并且被限制的stream量应该被发送到相应的tc类别。

我非常怀疑的一点是默认类和受限类使用最低1bps速率。 我无法控制将要创build的受限类的数量,我不希望限制类的总速率超过根类。

还有一点,我添加了默认的prio 0,而限制的类prio 1,所以万一默认类应该借用(几乎总是按照它的速度非常慢),这个类将在其他受限域之前被服务。 但是,如果我将默认类的内容保留为根类之一,那么这些域将不会挨饿吗?

我怎样才能成功地让用户在不受限制的使用情况下保持良好的交互性和带宽,同时限制几个域名/用户的速度?

我也想知道默认类是否有用,因为如果我不指定htb qdisc的默认类,那么不匹配filter的数据包将以硬件速度出列。 (但是在这里再次让限制类饿死?)

我对tc和networkingQoS确实很陌生,所以任何build议,批评(build设性的)都会受到欢迎。

文森特。

由于您没有包含分类,因此很难扣除您在每个class级中确切表示的stream量。 例如,传出的http或sshstream量对于交互性非常重要,传入的http不是那么多。

我会保证每个服务的一定的带宽说:我有x kbps的传入httpd的stream量,它被平分在用户之间。 如果你有10或100个用户,这是公平的。“如果你在这些服务中有高优先级用户或者低优先级用户,你需要为他们增加类和分类器。

(另外我希望你知道你只能从一个接口形成出站stream量,而不是stream入stream量,这意味着如果你想限制上行链路,你必须使用出口接口到Internet或使用中间排队设备 。 lartc.org指南是非常好的资源。)