Jump to content

Recommended Posts

Posted

Добрый день.

Ситуация следующая.

Debian, kernel 2.6.31.4, сервер представлет собой nat-сервер + шейпер (tc).

В kern.log вываливается куча записей следующего вида.

Nov 27 17:10:23 shaper kernel: [2620259.510149] rule prio 0 protocol 800 reclassify loop, packet dropped

Поискал, так и не нашёл внятного описания того, из за чего может возникать данная проблема.

Если бы это было пара записей я бы может и забил. Но за день накапливается лог размером на пару мегабайт.

 

Не подскажете ли где искать корень проблемы ?

 

Шейпер выглядит вот так:

#! /bin/sh
echo "del qdisc"
tc qdisc del dev eth3 root      2> /dev/null > /dev/null
tc qdisc del dev eth3 ingress   2> /dev/null > /dev/null

echo "create root handle"
tc qdisc add dev eth3 root handle 10: htb default 9000 r2q 20
tc class add dev eth3 parent 10: classid 10:1 htb rate 500mbit ceil 550mbit
tc qdisc add dev eth3 handle ffff: ingress


#Hash filter
echo "create hash filter"
tc filter add dev eth3 parent 10: prio 5 protocol ip u32
tc filter add dev eth3 parent 10: prio 5 handle 2: protocol ip u32 divisor 256
echo "Load rules"

#192.168.51.126
tc filter add dev eth3 protocol ip parent 10: prio 5 u32 ht 2:7E match ip dst 192.168.51.126/32 flowid 10:611
tc class add dev eth3 parent 10:1 classid 10:611 htb rate 272kbit ceil 272kbit
tc filter add dev eth3 protocol ip parent ffff: prio 5 u32 match ip src 192.168.51.126/32 police rate 10240kbit burst 1024k flowid :611

#192.168.51.41
tc filter add dev eth3 protocol ip parent 10: prio 5 u32 ht 2:29 match ip dst 192.168.51.41/32 flowid 10:612
tc class add dev eth3 parent 10:1 classid 10:612 htb rate 272kbit ceil 272kbit
tc filter add dev eth3 protocol ip parent ffff: prio 5 u32 match ip src 192.168.51.41/32 police rate 10240kbit burst 1024k flowid :612

....

echo "create match map"
tc filter add dev eth3 protocol ip parent 10: prio 5 u32 ht 800:: match ip dst 192.168.0.1/16 hashkey mask 0x000000ff at 16 link 2:
tc filter add dev eth3 protocol ip parent 10: prio 4 u32 ht 800:: match ip dst 10.0.0.0/16 hashkey mask 0x000000ff at 16 link 2:

Posted (edited)
nat-сервер + шейпер (tc).
Не стоит совмещать шейпер и NAT. Кроме того, фильтры для полисинга

tc filter add dev eth3 protocol ip parent ffff: prio 5 u32 match ip src 192.168.51.126/32 police rate 10240kbit burst 1024k flowid :611

не хэшируются и поэтому создают нагрузку. Нужно делать шейпинг на двух разных интерфейсах. Далее, хэш-фильтр

tc filter add dev eth3 protocol ip parent 10: prio 4 u32 ht 800:: match ip dst 10.0.0.0/16 hashkey mask 0x000000ff at 16 link 2:

указывает на те же дочерние фильтры, что и для сети 192.168.0.0/16. IP из сети 10.0.0.0/16 будут ходить по фильтрам с match ip dst 192.168.x.x/32, что тоже неправильно.

Edited by photon
Posted (edited)

photon cпасибо за статью.

Проблема всё же оказалась не в хешировании, а в ingress policing, я так понял, что не хватает потоков (максимально используемый id 5100).

Но их же должно быть ffff тоесть 65к. Или я что то снова не так понимаю ?

Ни кто не знает как решить эту проблему без выноса НАТа на отдельный сервер или редиректа исходящего трафика на вирт. интерфейсы (imq / ifb) ?

Хотелось бы продолжить использовать ingress в том виде в котором он есть.

 

Edited by pchol
Posted

Еще нужно заметить, что все номера ключей хэширующих фильтров должны быть в шестнадцатеричном формате. Делать редирект на IFB при per user shaping более оптимально, т.к. для классификации можно сделать такой же хэш, как и для исходящего трафика.

Posted

+ использование ifb даёт возможность продавать пакеты вида не "1мбит вход/1мбит исход" а например "1.5мбит суммарной полосы". И клиент как хочет, так и утилизирует.

  • 1 year later...
Posted
tc filter add dev eth3 protocol ip parent ffff: prio 5 u32 match ip src 192.168.51.126/32 police rate 10240kbit burst 1024k flowid :611
Проблема тут.

Ибо по умолчанию если пакет попадает под шейпер то он реклассифицируется. Т.е. если посмотреть конфигурацию фильтра:

lark ~ # tc filter add dev vlan40 parent ffff: protocol ip prio 50 u32 match ip src 0.0.0.0/0 police rate 128kbit burst 102400

lark ~ # tc -s filter show dev vlan40 parent ffff: protocol ip prio 50

filter u32

filter u32 fh 800: ht divisor 1

filter u32 fh 800::800 order 2048 key ht 800 bkt 0 terminal flowid ??? (rule hit 3 success 3)

match 00000000/00000000 at 12 (success 3 )

police 0x3 rate 128000bit burst 100Kb mtu 2Kb action reclassify overhead 0b

ref 1 bind 1

 

Если создать фильтр:

lark ~ # tc filter add dev vlan40 parent ffff: protocol ip prio 50 u32 match ip src 0.0.0.0/0 police rate 128kbit burst 102400 action drop

lark ~ # tc -s filter show dev vlan40 parent ffff: protocol ip prio 50

filter u32

filter u32 fh 800: ht divisor 1

filter u32 fh 800::800 order 2048 key ht 800 bkt 0 terminal flowid ??? (rule hit 2 success 2)

match 00000000/00000000 at 12 (success 2 )

police 0x4 rate 128000bit burst 100Kb mtu 2Kb action drop overhead 0b

ref 1 bind 1

Тогда в логах пусто.

 

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 и с Политикой конфиденциальности.