限制每秒输出的UDP数据包的速率

因为Teamspeak版本3每个用户发送大量数据包,而我们的提供商在基础设施上面遇到每秒20.000个数据包的问题,​​我们必须限制它,我们的服务器不会被closures。

红了很多关于iptables,但无法find正确的规则。 你能给我一个build议如何pipe理服务器不会发送超过19k数据包每秒?

我们正在运行debian 4

提前致谢
蒂姆

你有几个select。 iptables和stream量整形。 对于iptables,请查看操作指南 。 在“ 过滤规范”部分中,有一个使用限制扩展来限制stream量的示例。

另一种select是stream量整形,可以是(是)复杂的。 请看Linux高级路由和stream量控制HOWTO的介绍,特别是第9章 。

另一个select是调整TeamSpeak。 尝试将使用的编解码器更改为质量较低的编解码器。 我相信TeamSpeak客户端有带宽限制选项。 看看服务器是否也是如此。

谢谢你的回复!

我结束了这个iptables的代码:

/sbin/iptables -A OUTPUT -p udp -m state --state NEW -j ACCEPT /sbin/iptables -A OUTPUT -p udp -m limit --limit 10000/s -j ACCEPT /sbin/iptables -A OUTPUT -p udp -j DROP 

限制模块中的最大数据包数似乎为10.000 pps。
不幸的是低到我的需求。

我将要检查Linux HOWTO的第9章。 也许我可以通过stream量整形来处理。
如果有人知道另一种方式可以工作,请让我知道它。

这是解决这个问题的方法。

你可以用这种方式使用iptables

 sudo iptables -I OUTPUT 1 -m owner --uid-owner debian-tor -j NFQUEUE --queue-num 1 sudo iptables -A OUTPUT -j NFQUEUE --queue-num 0 

这会将所有的stream量redirect到队列号1,而所有其他的stream量redirect到队列号0。

下一步是编写一个用户空间的应用程序,它将从队列中读出数据包并发出判断: ACCEPTDROP

[这是一个很好的描述如何build立这样的应用程序]( https://home.regit.org/netfilter-en/using-nfqueue-and-libnetfilter_queue/

这里是这个应用程序的实现 。 该应用程序的主要部分是在TScheduler::operator()

 TVerdictAction Action; if(QueueNum != TorClass) { Action = TVerdictAction::Accept; } else { Action = CurrentRate > d->OverallRate ? TVerdictAction::Drop : TVerdictAction::Accept; }