无法获得 tc 来限制网络流量

Ter*_*ior 6 networking qos tc

根据Linux 高级路由和流量控制 HOWTO 的这一部分,我无法tc限制计算机的网络速度。

路由器是摩托罗拉 SurfBoard 调制解调器,具有一些路由功能和防火墙。我想限制流量的机器是192.168.0.5,脚本也是从192.168.0.5运行的。

这是我对上面链接中的命令的改编/etc/NetworkManager/dispatcher.d/

#!/bin/sh -eu

# clear any previous queuing disciplines (qdisc)
tc qdisc del dev wlan0 root 2>/dev/null ||:

# add a cbq qdisc; see `man tc-cbq' for details
if [ $2 = up ]; then
    # set to a 3mbit interface for more precise calculations
    tc qdisc add dev wlan0 root handle 1: cbq avpkt 1000  \
        bandwidth 3mbit

    # leave 30KB (240kbps) to other machines in the network
    tc class add dev wlan0 parent 1: classid 1:1 cbq      \
        rate 2832kbit allot 1500 prio 5 bounded isolated

    # redirect all traffic on 192.168.0.5 to the previous class
    tc filter add dev wlan0 parent 1: protocol ip prio 16 \
        u32 match ip dst 192.168.0.5 flowid 1:1

    # change the hashing algorithm every 10s to avoid collisions
    tc qdisc add dev wlan0 parent 1:1 sfq perturb 10
fi
Run Code Online (Sandbox Code Playgroud)

问题是我尝试将2832kbit设置为非常小的测试值(如16kbit),但我仍然可以高速浏览网页。问题不在NetworkManager,因为我正在手动测试脚本。

编辑:我发现通过更改dst 192.168.0.5src 192.168.0.5,上传速度受到了可靠的限制,但我仍然没有想出如何使下载速度起作用,这对我来说是最重要的。

Ian*_*osh 2

您无法限制目标计算机上的传入流量,因为它已经到达。

为了正确地做你想做的事,你需要把它tc放到你的网关上。这可能不适合您,但这是方法。

入口流量只能受到监管,因为它会丢弃超过速度限制的数据包。这是低效的,因为您现在需要更多带宽才能再次接收相同的数据包。这有点粗略,因为 TCP 旨在通过在数据包丢失时减慢速度来处理流量丢失,但随着 TCP 扩展,您最终会不断变慢和变快,正如您最近的评论显示您正在经历的那样。

然而,有一种方法可以通过将“中间功能块设备”推入您的网络路径,使您的系统成为自身的网关。我建议阅读它,然后尝试进行入站速率限制。

请参阅Gentoo 站点上有关 INGRESS / EGRESS 整形/监管的“理论”讨论。