Linux, ограничение скорости интерфейса

Недавно мне потребовалось ограничить скорость скачивания и отдачи на сервере. В интернете готового решения “из коробки” найти не получилось, поэтому пришлось разбираться с самого начала. Результатом стал простенький скрипт.

#!/bin/bash

speedUp=$1
speedDown=$2

# Удаление очередей
/sbin/tc qdisc del dev eth1 ingress
/sbin/tc qdisc del dev eth1 root handle 1:

# Ограничение скорости отдачи
/sbin/tc qdisc add dev eth1 root handle 1: htb default 10 r2q 1
/sbin/tc class add dev eth1 parent 1: classid 1:10 htb rate ${speedUp}kbit quantum 8000 burst 8k

# Ограничение скорости загрузки
/sbin/tc qdisc add dev eth1 handle ffff: ingress
/sbin/tc filter add dev eth1 parent ffff: protocol ip prio 50 u32 match ip src 0.0.0.0/0 police rate ${speedDown}kbit burst 12k drop flowid :1

Заменяем eth1 на ваш интерфейс и сохраняем, например, под именем shapeSpeed.sh, в /sbin.

Запускаем так:

/sbin/shapeSpeed.sh 5000 1000

Указанный пример ограничит скорость скачивания до 1000 кбит/с, а скорость отдачи - до 5000 кбит/с