我有一台 Linux 机器(Centos 5.5),我想限制其网络流量。我有一个分发给客户的应用程序,我想在建议的最低带宽 256Mbit/秒上对其进行测试。到目前为止,我看过的 tc 教程似乎允许您根据某些标准限制带宽,但我想在所有情况下限制带宽(往返所有 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 的带宽,有什么想法吗?
答案1
如果您想对所有出站流量应用限制,您根本不需要过滤器。只需将您的 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
答案2
这可能有点超出你的范围,但 WAN-emu 非常擅长模拟对吞吐量和延迟有奇怪要求的环境[1]
答案3
你已经添加了 1 个统治者,像这样 tc qdisc add dev eth0 root handle 10: htb default 20
之后就像你的
tc 过滤器添加 dev eth0 协议 ip 父级 10:prio 2 flowid 10:2