[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Псевдосправедливая раздача траффика с интерфейса.



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

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

Reply to: