Добрый день.
Есть маршрутизатор и офис за ним.
Хочется решить вечную проблему разделения полосы пропускания.
Траффик приходит от провайдера и помечается:

iptables -t mangle -A PREROUTING -i eth0 -j MARK --set-mark 30

Затем для "локальных" ресурсов провайдера, скорость к которым не ограничена
метка изменяется:

for subnet in `</etc/peering-networks`
do
    iptables -t mangle -A PREROUTING -s $subnet -j MARK --set-mark 15
    iptables -t mangle -A PREROUTING -d $subnet -j MARK --set-mark 15
done

Помогите пожалуйста составить правила для шейпера, которые бы разделяли
траффик псевдосправедливым образом между пользователями локаной сети на
основе их IP-адреса (без учета портов, соединений и т.п.)

Интерфейсы на маршрутизаторе:

eth0 - провайдер
eth1 - сеть с серверами
eth2 - сеть с юзерами

Пока нарисовалось нечто для HTB + SFQ

tc qdisc del dev eth2 root
tc qdisc add dev eth2 root handle 1 htb default 50 r2q 10

tc class add dev eth2 parent 1: classid 1:2 htb rate 100Mbit

tc class add dev eth2 parent 1:2 classid 1:20 htb rate 200Kbit ceil 4Mbit
prio 10 #Гарантированя полоса для ssh
tc qdisc add dev eth2 parent 1:20 handle 20 sfq perturb 10
tc filter add dev eth2 parent 1:0 protocol ip prio 100 u32 match ip sport 22
0xffff classid 1:20

tc class add dev eth2 parent 1:2 classid 1:30 htb rate 3800Kbit ceil 4Mbit
prio 30 #Канал во внешний мир
tc qdisc add dev eth2 parent 1:30 handle 30 sfq perturb 10
tc filter add dev eth2 parent 1:0 protocol ip prio 200 handle 30 fw classid
1:30

tc class add dev eth2 parent 1:2 classid 1:40 htb rate 80Mbit ceil 100Mbit
prio 40 # Доступ к провайдерским сайтам
tc qdisc add dev eth2 parent 1:40 handle 40 sfq perturb 10
tc filter add dev eth2 parent 1:0 protocol ip prio 200 handle 15 fw classid
1:40

tc class add dev eth2 parent 1:2 classid 1:50 htb rate 85Mbit ceil 100Mbit
prio 50 # Все остальное
tc qdisc add dev eth2 parent 1:50 handle 50 sfq perturb 10

SFQ к сожалению работает не так как надо - хэш вычисляется по адресам
источника и отправителя + портам, что позволяет получить преимущество
пользователям многопоточных качалок.
Esfq - внея дистрибутивного ядра, да видимо для новых ядер патча и не будет.
-- 
WBR,  Bogdan B. Rudas

Ответить