Найти в Дзене
WindowsProfs

Настройка ограничения полосы пропускания (QoS) на RHEL-based Linux системах

Устанавливаем на сервер и клиент iperf3:
apt-get install -y iperf3 На сервере в фоне (для удобства) включаем iperf3:
iperf3 -sD На клиенте измеряем скорость до сервера:
iperf3 -c <ip-адрес сервера iperf3> В конце вывод получаем примерно такие строчки:
[ ID] Interval Transfer Bitrate Retr
[5] 0.00-10.00 sec 23.1 GBytes 19.8 Gbits/sec 4 sender
[5] 0.00-10.00 sec 23.1 GBytes 19.8 Gbits/sec receiver Поделим на два наш результат (Bitrate), получим примерно 9.9 Гбит, и это далее укажем в фильтре на сервере:
tc qdisc add dev cli handle ffff: ingress
tc filter add dev cli parent ffff: protocol ip prio 1 u32 match ip protocol 1 0xff flowid :1
tc filter add dev cli parent ffff: protocol ip prio 2 u32 match ip src <ip-адрес клиента iperf3> police rate 9.9(половина от битрейта изначального)gbit burst 1m drop flowid :2 На клиенте проверяем применение правила:
iperf3 -c 172.16.200.1 Битрейт в этот раз должен быть не более то

Устанавливаем на сервер и клиент iperf3:
apt-get install -y iperf3

На сервере в фоне (для удобства) включаем iperf3:
iperf3 -sD

На клиенте измеряем скорость до сервера:
iperf3 -c <ip-адрес сервера iperf3>

В конце вывод получаем примерно такие строчки:
[ ID] Interval Transfer Bitrate Retr
[5] 0.00-10.00 sec 23.1 GBytes 19.8 Gbits/sec 4 sender
[5] 0.00-10.00 sec 23.1 GBytes 19.8 Gbits/sec receiver

Поделим на два наш результат (Bitrate), получим примерно 9.9 Гбит, и это далее укажем в фильтре на сервере:
tc qdisc add dev cli handle ffff: ingress
tc filter add dev cli parent ffff: protocol ip prio 1 u32 match ip protocol 1 0xff flowid :1
tc filter add dev cli parent ffff: protocol ip prio 2 u32 match ip src <ip-адрес клиента iperf3> police rate 9.9(половина от битрейта изначального)gbit burst 1m drop flowid :2

На клиенте проверяем применение правила:
iperf3 -c 172.16.200.1

Битрейт в этот раз должен быть не более того, что было указано в правиле:
[ ID] Interval Transfer Bitrate Retr
[5] 0.00-10.00 sec 10.4 GBytes 8.96 Gbits/sec 178934 sender
[5] 0.00-10.00 sec 10.4 GBytes 8.96 Gbits/sec receiver

Для того чтобы правило работало после перезапуска машины необходимо в записать эти правила в файл /etc/net/ifaces/cli/ifup-post:
tc qdisc add dev cli handle ffff: ingress
tc filter add dev cli parent ffff: protocol ip prio 1 u32 match ip protocol 1 0xff flowid :1
tc filter add dev cli parent ffff: protocol ip prio 2 u32 match ip src <ip-адрес клиента iperf3> police rate 9.9gbit burst 1m drop flowid :2

Делаем файл исполняемым:
chmod +x /etc/net/ifaces/cli/ifup-post

Перезапускаем машину и проверяем

tc используется, потому что он напрямую управляет потоком данных на сетевом уровне, даёт точный контроль скорости и умеет быстро сбрасывать лишний трафик. Другие инструменты или сложнее, или менее точные. Для стабильной работы сети без торможений — tc самый простой и надёжный вариант.