LINUX.ORG.RU
ФорумAdmin

tc: нарезка канала для каждого IP


0

1

Есть сеть 192.168.0.0/16, разбитая на подсети разной длины.
нужно выделять гарантированную полосу (разную) для каждого ip из этих сетей.

т.е. допустим есть сетка 192.168.1.0/24 :
Надо выдать каждому ip из этой сети гарантированную полосу допустим 1mbit. + выставить общее ограничение на всю сеть - 10mbit.

прочитав, LATRC, понял, что стандартно можно нарезать канал (с помощью htb) только на всю сеть:

tc filter add dev $OUT_IF protocol ip parent 1:0 prio 1 u32 match ip dst 192.168.1.0/24 flowid 1:10
tc class add dev $OUT_IF parent 1:1 classid 1:10 htb rate 512kbit ceil 1mbit

Но при этом, вся сеть будет получать гарантированно 512кбит с возможностью увеличения до 1мбит.

дисциплина sfq не подходит, ибо там идет разделение по flows, а не ip
забивать скриптом статиком каждый ip из /16 сети имхо бред.

★★★★★

только вчера задавался подобным вопросом. на сколько понял - нужно пользовать ESFQ и, как следствие, патчить ядро + iproute

cac2s ()
Ответ на: комментарий от cac2s

блин. невнимательность...
там ниже есть:

tc qdisc add dev ${MAIN_IFACE} parent 1:10 handle 10: sfq
tc filter add dev ${MAIN_IFACE} parent 10: protocol ip handle 1 flow hash keys nfct-dst divisor 256 baseclass 1:10

cac2s ()
Ответ на: комментарий от cac2s

только что проверил у себя на шлюзе - работает! :)

$TC filter add dev $DEV_IN parent 1:0 prio 30 protocol ip handle 30 fw flowid 1:30
    $TC filter add dev $DEV_IN parent 30: protocol ip handle 1 flow hash keys dst divisor 512
з.ы.: если используется conntrack - %s/dst/nfct-dst/g

cac2s ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.