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

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

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

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

现在我设置了一个非常好的iptables / tc对,但是在很小的范围内,同时使用2个或3个虚拟主机(不幸的是,我无法执行实际大小测试).

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

接口上附有HTB qdisc(句柄2 :),默认流量类为FFFF类.

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

默认类别2:FFFF为2:1的子级,速率为1kbsp,下行链路容量为ceil.

然后,当某个域中存在对用户的新限制时,会动态添加其他类,添加新的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的新手,所以任何建议,评论家(建设性的;)都会受到欢迎.

文森特.

解决方法

由于您没有包含分类器,因此很难扣除每个类中您确切含义的流量.
例如,传出的http或ssh流量对于交互性非常重要,传入的http不是那么多.

我会保证每个服务的某些带宽,说:我对传入的httpd流量有x kbps,并且它在用户之间平均分配.如果您有10个或100个用户,这是公平的.“如果您在每个服务中都有高优先级用户或低优先级用户,则需要为他们提供其他类和分类器.

(另外我希望你知道你只能塑造来自接口的传出流量,而不是传入.这意味着如果你想限制上行链路,你必须使用到互联网的传出接口或使用Intermediate Queuing Device. lartc.组织指南是一个非常好的资源.)

相关文章

linux常用进程通信方式包括管道(pipe)、有名管道(FIFO)、...
Linux性能观测工具按类别可分为系统级别和进程级别,系统级别...
本文详细介绍了curl命令基础和高级用法,包括跳过https的证书...
本文包含作者工作中常用到的一些命令,用于诊断网络、磁盘占满...
linux的平均负载表示运行态和就绪态及不可中断状态(正在io)的...
CPU上下文频繁切换会导致系统性能下降,切换分为进程切换、线...