Псевдосправедливая раздача траффика с интерфейса.
Добрый день.
Есть маршрутизатор и офис за ним.
Хочется решить вечную проблему разделения полосы пропускания.
Траффик приходит от провайдера и помечается:
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: