使用 iptables 命令仅标记超过特定速率的 udp 流量

使用 iptables 命令仅标记超过特定速率的 udp 流量

我正在尝试实现以下场景:

使用 iptables 命令,使用 Expedited Forwarding PHB (46) 的建议 DSCP 值标记通过 Linux 路由器的目标端口为 1234 的 UDP 流量,以防此类流量的输入速率超过 2Mbps。(我不想将流量降到 2mbps 以下,只是为了不被标记为 DSCP 值 46)。

我正在努力寻找一种方法来仅标记超过 2Mbps 的流量。没有直接的方法可以使用 iptables 根据速率限制流量,但我发现您可以使用 limit 或 hashlimit 来获得类似的效果。Limit 和 hashlimit 允许您指定数据包/秒的速率,因此假设一个数据包有 1500 字节 => 2mbps = 2.000.000/1500/8 = 大约 167 个数据包/秒。

这是我目前尝试过的方法,但我的所有流量(包括低于 2mbps 的流量)仍然标记为 DSCP 值 46:

使用限制:

sudo iptables -A OUTPUT -p udp --dport 1234 -m limit --limit 167/s -j ACCEPT
sudo iptables -t mangle -A OUTPUT -p udp --dport 1234 -m recent --name above_limit --set -j DSCP --set-dscp 46

使用哈希限制:

sudo iptables -A OUTPUT -m udp -p udp --dport 1234 -m hashlimit --hashlimit-upto 167/sec --hashlimit-mode srcip --hashlimit-name above_2mbps -j ACCEPT
sudo iptables -t mangle -A OUTPUT -p udp --dport 1234 -m recent --name above_limit --set -j DSCP --set-dscp 46

如果您有任何其他建议,请随时与我分享。

谢谢你!

相关内容