我目前无法在 IPTables 上设置规则来限制某些数据包的速率。我不能只使用 iptables 上的常规限制模式,因为这必须针对 dstip 和 dstport。
规则如下:
iptables -A PREROUTING -t raw -p udp -m hashlimit -m u32 --u32 "0x0>>0x16&0x3c@0x9&0xff=0x55" --dport 27015:27105 --hashlimit-mode dstip,dstport --hashlimit-above 500/sec --hashlimit-name PLAYERQUERY -j DROP
这似乎可以正常工作,并且当有大量数据进入时会进行速率限制,但是我可以看到即使在低于 500/秒的限制时也会丢弃随机数据包。我正在通过跨节点使用 wireshark 来验证这一点,我每秒只看到大约 20 个数据包。
另外两个数据包丢失过早的例子:另一条规则下的相同随机丢失:
iptables -A INPUT -m hashlimit -m tcp -p tcp --dport 80 -i eth0 --hashlimit-above 256/sec --hashlimit-burst 512 --hashlimit-mode srcip --hashlimit-name reg_html1 -m state --state NEW -j DROP
而在 lo 上(与 eth0 相比),第一个匹配的数据包全部被丢弃!