什么是最好的基于 Linux 的 QoS 平台来实现这样的配置:所有 256Kbps DSL 客户端(都属于同一 IP 范围)都通过单一 QoS 规则获得 200Kbps 的保证速度?
答案1
标准的linux QoS/流量控制系统称为[tc][1]
(流量控制)。
您需要初始化一个链,设置它的属性,然后向其中添加您的 IP,如下所示:
#!/bin/bash
DEV=eth0
PATH=$PATH:/sbin
tc qdisc del dev $DEV root
tc qdisc add dev $DEV root handle 1: htb default 20
tc class add dev $DEV parent 1:1 classid 1:10 htb rate 2000kbps ceil 2000kbps burst 500kb quantum 1500
tc qdisc add dev $DEV parent 1:10 handle 10: sfq perturb 10
tc filter add dev $DEV parent 1:0 protocol ip prio 1 u32 match ip dst 10.10.10.1/24 flowid 1:10
tc filter add dev $DEV parent 1:0 protocol ip prio 1 u32 match ip src 10.10.10.1/24 flowid 1:10
答案2
并且,提到的配置是否会为范围内的每个 IP 分配所需的速度,而不需要为每个单独的 IP 制定单独的规则?
不会。HTB 的工作方式,您只能为整个 bucket 分配速率,而不是单个 IP。Caleb 试图做的是通过 SFQ qdisc 在您的 10 个客户之间均匀分配 2000 Kbps 的可用带宽。但是,这不会按预期工作 - SFQ 计算每个连接的调度,而不是每个 IP - 如果您的任何客户打开的带宽消耗大的连接比其他客户多,他将总共获得更多带宽。
还有另一个调度程序称为东南大学它扩展了 SFQ,使其能够按 IP 进行调度,但即便如此,你也只能调度目前活跃流量,而不会将任何给定用户的速度限制在 200 kbps。我不知道是否有任何现成的 qdisc 可以让你做到这一点,但考虑到不同 qdisc 项目的数量,我认为有。
另一个问题是 tc 只调度接口上的传出流量,从不考虑入站流量。中间排队设备 (IMQ)有助于解决这个限制。
答案3
对于保证和公平分配,HFSC 调度程序(从 BSD 的 altq 移植到 linux)是个好东西。(至少它不像 HTB 那么笨拙和繁琐。)遗憾的是,在 Linux 中设置任何流量整形都是一个痛苦的过程,具有残酷的学习曲线,而且因为 tc 界面不友好,我建议使用 MasterShaper 或一些类似的前端。
(PS:如果您决定自己管理 tc,请使用 IFB 内核功能进行上传整形 - 它类似于之前此处建议的 IMQ,但适用于较新的内核并且更适合整个框架)
答案4
也许,我之前与 Linux / QoS 相关的回答也可能对您有所帮助: