поскольку Teamspeak версии 3 отправляет много пакетов на пользователя, а у нашего провайдера возникают проблемы с его инфраструктурой, превышающей 20 000 пакетов в секунду, мы должны ограничить это, чтобы наши серверы не закрывались.
Красный много говорил об iptables, но не смог найти правильных правил. Не могли бы вы посоветовать мне, как сделать так, чтобы сервер не отправлял более 19 тысяч пакетов в секунду?
Мы работаем на debian 4
Заранее спасибо
Тим
У вас есть несколько вариантов. iptables и формирование трафика. Для iptables ознакомьтесь с как. в Характеристики фильтрации В разделе есть пример использования Limit Extension для ограничения трафика.
Другой вариант - это формирование трафика, которое может быть (или есть?) Сложным. Взгляните на Linux Advanced Routing & Traffic Control HOWTO для введения, в частности Глава 9.
Другой вариант - настроить 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 пакетов в секунду.
К сожалению, слишком мало для моих нужд.
Я собираюсь проверить главу 9 Linux HOWTO. Может быть, я справлюсь с формированием трафика.
Если кто-нибудь знает, как это могло бы работать, дайте мне знать.
Вот решение этой проблемы.
Вы можете использовать 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
Это перенаправит все tor
трафик в очередь номер 1, а весь остальной трафик в очередь номер 0.
Следующий шаг - написать приложение для пользовательского пространства, которое будет считывать пакеты из очередей и выносить вердикты: ACCEPT
или DROP
.
[Вот отличное описание того, как создать такое приложение]. (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;
}