用 tc 模拟慢速连接

ran*_*ath 10 linux traffic-shaping

我有一个 linux 机器(Centos 5.5),我想在上面限制网络流量。我有一个我们分发给客户端的应用程序,我想在 256Mbit/sec 的最小推荐带宽上测试它。到目前为止,我看到的 tc 教程似乎允许您根据某些标准限制带宽,但我想限制所有情况下的带宽(到/来自所有 IP 地址,无论 IP 标头是什么样子,等等)。

一个教程建议我使用:

tc filter add dev eth0 protocol ip parent 10: prio 2 flowid 10:2
Run Code Online (Sandbox Code Playgroud)

但我收到以下错误:

Unknown filter "flowid", hence option 10:2 is unparsable
Run Code Online (Sandbox Code Playgroud)

关于如何在所有情况下限制进出 eth0 的带宽的任何想法?

al.*_*al. 11

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

tc qdisc add dev eth0 root handle 1: tbf rate 256mbit latency 1ms burst 1540
Run Code Online (Sandbox Code Playgroud)

如果你想塑造/监管入站流量,那就有点复杂了。您需要使用例如 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
Run Code Online (Sandbox Code Playgroud)

这是一种不同的方法,使用两个简单的过滤器:

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
Run Code Online (Sandbox Code Playgroud)