Tracert Posted March 15, 2012 Posted March 15, 2012 Задумал входящий трафик к клиентам равномерно распределить после получения его от магистралов. Для этих целей пытаюсь использовать DRR внутри HTB классов. Маркирую входящий трафик: $IPT -t mangle -A INET-incoming-mark -i eth0.150 -o eth1.32 -j MARK --set-mark 0x150 $IPT -t mangle -A INET-incoming-mark -i eth0.524 -o eth1.32 -j MARK --set-mark 0x524 $IPT -t mangle -A INET-incoming-mark -i eth0.408 -o eth1.32 -j MARK --set-mark 0x408 Создаю базовые классы $TC qdisc add dev eth1.32 root handle 1: htb r2q 512 $TC class add dev eth1.32 parent 1: classid 1:1 htb rate 1500Mbit ceil 1500Mbit $TC class add dev eth1.32 parent 1:1 classid 1:150 htb rate 500Mbit ceil 500Mbit $TC qdisc add dev eth1.32 parent 1:150 handle 150: drr $TC class add dev eth1.32 parent 1:1 classid 1:408 htb rate 500Mbit ceil 500Mbit $TC qdisc add dev eth1.32 parent 1:408 handle 408: drr $TC class add dev eth1.32 parent 1:1 classid 1:524 htb rate 500Mbit ceil 500Mbit $TC qdisc add dev eth1.32 parent 1:524 handle 524: drr После этого запускается скрипт который генерирует классы и очереди для каждого договора class add dev eth1.32 parent 150:0 classid 150:4 drr quantum 1600 qdisc add dev eth1.32 parent 150:4 bfifo limit 32768 class add dev eth1.32 parent 150:0 classid 150:5 drr quantum 1600 qdisc add dev eth1.32 parent 150:5 bfifo limit 32768 class add dev eth1.32 parent 150:0 classid 150:6 drr quantum 1600 qdisc add dev eth1.32 parent 150:6 bfifo limit 32768 class add dev eth1.32 parent 150:0 classid 150:7 drr quantum 1600 qdisc add dev eth1.32 parent 150:7 bfifo limit 32768 class add dev eth1.32 parent 150:0 classid 150:8 drr quantum 1600 qdisc add dev eth1.32 parent 150:8 bfifo limit 32768 class add dev eth1.32 parent 150:0 classid 150:9 drr quantum 1600 qdisc add dev eth1.32 parent 150:9 bfifo limit 32768 4 5 6 7 8 9 - номера договоров затем скриптом создаю фильтры чтобы трафик для определенных IP попадал в свой класс, у нас разрешено иметь несколько IP на договор, поэтому делаем так: filter add dev eth1.32 parent 1:0 prio 5 handle 10: protocol ip u32 divisor 256 filter add dev eth1.32 protocol ip parent 1:0 prio 5 u32 ht 800:: match ip dst 0.0.0.0/0 match mark 0x150 0xffff hashkey mask 0xff000000 at 16 link 10: #10 filter add dev eth1.32 parent 1:0 prio 5 handle 11: protocol ip u32 divisor 256 filter add dev eth1.32 protocol ip parent 1:0 prio 5 u32 ht 10:0a: match ip dst 0.0.0.0/0 hashkey mask 0xff0000 at 16 link 11: #10.2 filter add dev eth1.32 parent 1:0 prio 5 handle 12: protocol ip u32 divisor 256 filter add dev eth1.32 protocol ip parent 1:0 prio 5 u32 ht 11:02: match ip dst 0.0.0.0/0 hashkey mask 0xff00 at 16 link 12: #10.2.11 filter add dev eth1.32 parent 1:0 prio 5 handle 13: protocol ip u32 divisor 256 filter add dev eth1.32 protocol ip parent 1:0 prio 5 u32 ht 12:0b: match ip dst 0.0.0.0/0 hashkey mask 0xff at 16 link 13: filter add dev eth1.32 protocol ip parent 1:0 prio 5 u32 ht 13:20: match ip dst 0.0.0.0/0 flowid 150:2128 filter add dev eth1.32 protocol ip parent 1:0 prio 5 u32 ht 13:7f: match ip dst 0.0.0.0/0 flowid 150:455 filter add dev eth1.32 protocol ip parent 1:0 prio 5 u32 ht 13:5a: match ip dst 0.0.0.0/0 flowid 150:2944 filter add dev eth1.32 protocol ip parent 1:0 prio 5 u32 ht 13:47: match ip dst 0.0.0.0/0 flowid 150:2162 filter add dev eth1.32 protocol ip parent 1:0 prio 5 u32 ht 13:ce: match ip dst 0.0.0.0/0 flowid 150:1660 filter add dev eth1.32 protocol ip parent 1:0 prio 5 u32 ht 13:76: match ip dst 0.0.0.0/0 flowid 150:2049 filter add dev eth1.32 protocol ip parent 1:0 prio 5 u32 ht 13:66: match ip dst 0.0.0.0/0 flowid 150:1006 filter add dev eth1.32 protocol ip parent 1:0 prio 5 u32 ht 13:c8: match ip dst 0.0.0.0/0 flowid 150:1792 filter add dev eth1.32 protocol ip parent 1:0 prio 5 u32 ht 13:12: match ip dst 0.0.0.0/0 flowid 150:3770 filter add dev eth1.32 protocol ip parent 1:0 prio 5 u32 ht 13:7d: match ip dst 0.0.0.0/0 flowid 150:2055 filter add dev eth1.32 protocol ip parent 1:0 prio 5 u32 ht 13:10: match ip dst 0.0.0.0/0 flowid 150:2066 Собственно проблема вот в чем, фильтры работают, видно что пакеты попадают в нужные фильтры: filter parent 1: protocol ip pref 5 u32 fh 21:c:800 order 2048 key ht 21 bkt c flowid 150:3619 (rule hit 16 success 16) match 00000000/00000000 at 16 (success 16 ) Но до класса они не доходят tc -s -d class show dev eth1.32 classid 150:3619 class drr 150:3619 root leaf cc53: quantum 1600b Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) rate 0bit 0pps backlog 0b 0p requeues 0 deficit 0b При этом, если классы определять как 1:, а не как 150: все работает, но внешних каналов у меня несколько, а договоров тысячи и на многих весит несколько адресов. Чтобы не пересекались названия я и задумал их называть с указанием интерфейса откуда они пришли. Но не работает. Такое ощущение, что я не понимаю какого то базового принципа. Но вот какого... Вставить ник Quote
Tracert Posted March 17, 2012 Author Posted March 17, 2012 (edited) Упс разобрался, спасибо. Просто фильтры тоже должны иметь похожую на классы иерархию. Т.е. отправляет трафик фильром в один из классов, а на него уже отдельно вешаем еще один коневой фильтр с обязательным указанием в качестве родителя фильтра - имя класса на который мы его вешаем. Edited March 17, 2012 by Tracert Вставить ник Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.