Ниже приведен еще один способ массово ограничить (shaping) скорость для нескольких тысяч абонентов с помошью IPMARK +HTB.
Допустим ip адреса клиентов из диапазона 192.168.0.0/16
1. Метим весь трафик (внутренний и внешний) с помошью IPMARK, используя для маркировки последние два октета
$IPT -t mangle -A POSTROUTING -o eth0 -j IPMARK --addr src --and-mask 0xffff --or-mask 0x10000
$IPT -t mangle -A POSTROUTING -o eth1 -j IPMARK --addr dst --and-mask 0xffff --or-mask 0x10000
–or-mask 0?10000 – указывает первую родительсткую дисциплину HTB
–and-mask 0xfff указывает на то, что метим последними двумя октетами
Пример: 192.168.136.2 получит метку 8802 (136 в десятичной системе это 88h в шестнадцатеричной, 2 так и останется 02)
2. Теперь создадим скриптик в который поместим правила HTB по ограничению скорости для всех необходимых IP адресов.
#!/bin/bash
dev_int="eth1"
dev_ext="eth0"
# Чистим очереди от предыдущих данных
tc qdisk del dev $dev_ext root
tc qdisk del dev $dev_int root
# Добавляем родительскую дисциплину для обоих интерфейсов
tc qdisc add dev $dev_ext root handle 1: htb
tc qdisc add dev $dev_int root handle 1: htb
# Добавляем фильтр fw (без параметров помещает пакет по указанными при помощи ipmark parent:classid в нужный класс.
)
tc filter add dev $dev_ext parent 1:0 protocol ip fw
tc filter add dev $dev_int parent 1:0 protocol ip fw
#########################################################
# SAMPLE CLIENT 1
# 192.168.136.1 -> 8801 (88: 136 hex; 01 - 1 hex)
#########################################################
tc class replace dev $dev_ext parent 1: classid 1:8801 htb rate 1024kbit
tc class replace dev $dev_int parent 1: classid 1:8801 htb rate 2048kbit
#########################################################
# SAMPLE CLIENT 2
# 192.168.136.2 -> 8802 (88: 136 hex; 02 - 2 hex)
#########################################################
tc class replace dev $dev_ext parent 1: classid 1:8802 htb rate 4090kbit
tc class replace dev $dev_int parent 1: classid 1:8802 htb rate 8192kbit
Собственно вот и все.