我想将任何 IP 的下载速度限制为 800kbit,(这有效)并且我想将标记数据包的下载速度限制为 400kbit。
我没有收到任何错误,但它没有限制标有数字 30 的数据包的下载速度。我已使用 iptables-save -c 确认数据包的标记正确。因此,我认为我的 picker handle 30 的过滤器语法是错误的,即使没有错误。
/sbin/tc qdisc add dev $DEV handle ffff: ingress
/sbin/tc filter add dev $DEV parent ffff: prio 40 protocol ip handle 30 fw police rate 400kbit burst 10k drop flowid :1
#slightly different order of parameters, also doesn't work
/sbin/tc filter add dev $DEV parent ffff: protocol ip prio 40 handle 30 fw police rate 400kbit burst 10k drop flowid :1
#if I set the priority to 50 then I get an error saying "We have an error talking to the kernel"
#kernel is 4.4.50
/sbin/tc filter add dev $DEV parent ffff: protocol ip prio 50 u32 match ip src 0.0.0.0/0 police rate 800kbit burst 10k drop flowid :1
类似的 tc 命令(标记数据包的管制速率)如下例所示
$TC filter add dev $INDEV parent ffff: protocol ip prio 50 handle 1 fw police rate 1kbit burst 40 mtu 9k drop flowid :1
http://linuxdocs.org/HOWTOs/Adv-Routing-HOWTO-14.html
同样的例子也出现在这里
https://www.iplocation.net/lartc-ddos
如果我手动为特定 IP 添加另一条规则,其优先级与 catchall 相同或更低,那么我可以将速度限制为 400kbit/s。但我想限制 iptables 标记/损坏的数据包的速度。
答案1
这是一组有效的命令,但问题是标记发生在入口 qdisc 处理之后。