как лучше всего в linux ограничить пропускную способность на конкретном порту на входящий трафик для каждого айпи?

У меня debian 9, и есть публичный сервер, который работает на порту 3000.

Я хочу сделать так, чтобы клиенты, которые подключаются к этому серверу, не могли слать трафик быстрее 200кб/c. Но при этом чтобы сервер клиентам мог отправлять трафик без ограничений.

Лимит на каждого клиента отдельный, т.е. два клиента могут вместе сделать трафик 400кб/с, но по отдельности только максимум 200кб/c.

Ну и важно, чтобы этот лимит работал только на порту 3000.

Как мне подойти к этой задаче? Какие посоветуете инструменты?


Ответы (1 шт):

Автор решения: eri

Всетаки рекомендую работать с ограничением на уровне приложения. Если его модифицировать сложно, то поставьте перед ним прокси. Хороший и готовый к бою NGINX.

Сервер для tcp определяется директивой stream, а ограничить скорость легко директивой proxy_upload_rate, которая работает в этом контексте. https://nginx.org/ru/docs/stream/ngx_stream_proxy_module.html#proxy_upload_rate

Ограничение скорости средствами iptables или tc возможно только через отбрасывание уже полученных пакетов или набивание очередей, с отбрасываением того что в очередь не поместилось. Конечно tcp поймет что скорости не хватает и будет писать медленнее, но будет много повторов отправки что можт сказаться на производительности сети.

→ Ссылка