因为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。
下一步是编写一个用户空间的应用程序,它将从队列中读出数据包并发出判断: ACCEPT或DROP 。
[这是一个很好的描述如何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; }