我的目标是限制本地网络中用户的下载和上传速度.
网络的每个用户都有一个域名的个人列表,其域名的上下速度不能超过.
这意味着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命令:
@H_403_25@-------------- 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的新手,所以任何建议,评论家(建设性的;)都会受到欢迎.
文森特.