как лучше всего в linux ограничить пропускную способность на конкретном порту на входящий трафик для каждого айпи?
У меня debian 9, и есть публичный сервер, который работает на порту 3000.
Я хочу сделать так, чтобы клиенты, которые подключаются к этому серверу, не могли слать трафик быстрее 200кб/c. Но при этом чтобы сервер клиентам мог отправлять трафик без ограничений.
Лимит на каждого клиента отдельный, т.е. два клиента могут вместе сделать трафик 400кб/с, но по отдельности только максимум 200кб/c.
Ну и важно, чтобы этот лимит работал только на порту 3000.
Как мне подойти к этой задаче? Какие посоветуете инструменты?
Ответы (1 шт):
Всетаки рекомендую работать с ограничением на уровне приложения. Если его модифицировать сложно, то поставьте перед ним прокси. Хороший и готовый к бою NGINX.
Сервер для tcp определяется директивой stream, а ограничить скорость легко директивой proxy_upload_rate, которая работает в этом контексте. https://nginx.org/ru/docs/stream/ngx_stream_proxy_module.html#proxy_upload_rate
Ограничение скорости средствами iptables или tc возможно только через отбрасывание уже полученных пакетов или набивание очередей, с отбрасываением того что в очередь не поместилось. Конечно tcp поймет что скорости не хватает и будет писать медленнее, но будет много повторов отправки что можт сказаться на производительности сети.