Linux-Networking

通過 iptables 處理 tc 警察速率數據包?

  • April 27, 2017

我想將任何 IP 的下載速度限制為 800kbit,(這可行)並且我想將標記數據包的下載速度限制為 400kbit。

我沒有收到任何錯誤,但它不會限制標有數字 30 的數據包的下載速度。我已使用 iptables-save -c 確認數據包已正確標記。所以我認為我的過濾句柄 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。淨/lartc-ddos

如果我手動為特定 IP 添加另一個規則,其優先級高於總括或更低優先級,那麼我可以將速度限制為 400kbit/s。但我想限制 iptables 標記/損壞的數據包的速度。

這是一組有效的命令,但問題是標記是在處理入口 qdisc 之後發生的。

引用自:https://serverfault.com/questions/843651