用tc模拟慢速连接


9

我有一个Linux盒子(Centos 5.5),我想在上面限制网络流量。我有一个分发给客户端的应用程序,我想在最小建议带宽256Mbit / sec上对其进行测试。到目前为止,我看过的tc教程似乎允许您根据某些条件限制带宽,但是我想在所有情况下限制带宽(与所有IP地址/从所有IP地址开始,无论IP标头是什么样的等等)。

建议我使用一个教程:

tc filter add dev eth0 protocol ip parent 10: prio 2 flowid 10:2

但我收到以下错误:

Unknown filter "flowid", hence option 10:2 is unparsable

关于在任何情况下如何限制进入/离开eth0的带宽的任何想法?

Answers:


11

如果要对所有出站流量应用限制,则完全不需要过滤器。只需将qdisc添加到接口根句柄即可,如下所示:

tc qdisc add dev eth0 root handle 1: tbf rate 256mbit latency 1ms burst 1540

如果您想调整/调整入站流量,则要复杂一些。您需要使用例如IFB接口:

modprobe ifb
ip link set dev ifb0 up
tc qdisc add dev eth0 ingress
tc filter add dev eth0 parent ffff: protocol ip u32 match u32 0 0 action mirred egress redirect dev ifb0
#  ^- this is a dummy filter, match u32 0 0 matches all traffic
tc qdisc add dev ifb0 root handle 1: tbf rate 256mbit latency 1ms burst 1540

这是使用两种简单过滤器的另一种方法:

tc qdisc add dev eth0 ingress
tc filter add dev eth0 root         protocol ip u32 match u32 0 0 police rate 256mbit burst 10k drop flowid :1
tc filter add dev eth0 parent ffff: protocol ip u32 match u32 0 0 police rate 256mbit burst 10k drop flowid :1

我一直在研究您的解决方案,但无法正常工作。我正在运行您的命令,打开Firefox,开始下载和下载的速度太快。当我执行ifconfig时,是否应该在ifb0下看到一些RX和TX数据包(因为我没有)?谢谢。
rancidfishbreath

我添加了另一种方法,该方法无需ifb接口即可工作。
al。

使用两个简单过滤器的第二种方法效果很好!非常感谢。我非常喜欢此解决方案,因为它简单易懂。
rancidfishbreath

真棒谢谢你,福利局问题,我怎么能删除后运行的限制:tc qdisc add dev eth0 root handle 1: tbf rate 256mbit latency 1ms burst 1540?谢谢!
SSH

如何关闭节流并将其恢复原状?如果您愿意,请回答“使用两个简单过滤器的不同方法”版本。“ man tc”像往常一样压倒一切。
Geoffrey Anderson


0

您已经添加了1个像这样的标尺tc qdisc add dev eth0 root handle 10:htb default 20

喜欢你的事

tc过滤器添加dev eth0协议ip父级10:prio 2 flowid 10:2

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.