Jump to content

Recommended Posts

Posted

Задумал входящий трафик к клиентам равномерно распределить после получения его от магистралов. Для этих целей пытаюсь использовать 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: все работает, но внешних каналов у меня несколько, а договоров тысячи и на многих весит несколько адресов. Чтобы не пересекались названия я и задумал их называть с указанием интерфейса откуда они пришли. Но не работает. Такое ощущение, что я не понимаю какого то базового принципа. Но вот какого...

Posted (edited)

Упс разобрался, спасибо.

 

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

Edited by Tracert

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...
На сайте используются файлы cookie и сервисы аналитики для корректной работы форума и улучшения качества обслуживания. Продолжая использовать сайт, вы соглашаетесь с использованием файлов cookie и с Политикой конфиденциальности.