Jump to content
Калькуляторы

tc hashkey, почему не обрабатывает?

Кусок кода, пытаюсь найти почему он не работает.

Может кто ткнет где ошибка? уже пару дней кручу и не соображу, кучу доки прокурил.

 

# Удаляем все обработчики на интерфейсе
/sbin/tc qdisc del dev eth1 root  2>/dev/null
/sbin/tc qdisc del dev eth1 ingress  2>/dev/null
/sbin/tc qdisc del dev ifb0 root  2>/dev/null
/sbin/tc qdisc del dev ifb0 ingress  2>/dev/null



$tc qdisc add dev eth1 root handle 1: htb default 1024
$tc class add dev eth1 parent 1:0 classid 1:1 htb rate 100Mbit
$tc class add dev eth1 parent 1:1 classid 1:10 htb rate 20Mbit

$tc filter add dev eth1 parent 1:0 protocol ip u32

#Создаем 4 хеш таблицы для каждого октета
$tc filter add dev eth1 parent 1:0 handle 101: protocol ip u32 divisor 256
$tc filter add dev eth1 parent 1:0 handle 102: protocol ip u32 divisor 256
$tc filter add dev eth1 parent 1:0 handle 103: protocol ip u32 divisor 256



#Создаем фильтр направлящий весь трафик в хеш таблицу с ID 10
$tc filter add dev eth1 parent 1:0 protocol ip u32 ht 800:: match ip dst 0.0.0.0/0 hashkey mask 0xff000000 at 16 link 101:

#Добавляем правило в 10 хеш таблицу, если первый октет равен 192, то оправляем пакет в 11 хеш таблицу
$tc filter add dev eth1 parent 1:0 protocol ip u32 ht 101:c0: match ip dst 192.0.0.0/8  hashkey mask 0xff0000 at 16 link 102:

#Добавляем правило в 11 хеш таблицу, если второй октет равен 168, то оправляем пакет в 12 хеш таблицу
$tc filter add dev eth1 parent 1:0 protocol ip u32 ht 102:a8: match ip dst 192.168.0.0/16 hashkey mask 0xff00 at 16 link 103:


# Добавляем для подсетей
$tc filter add dev eth1 parent 1:0 handle 104: protocol ip u32 divisor 256
$tc filter add dev eth1 protocol ip parent 1:0 u32 ht 103:5: match ip dst 192.168.5.0/24 hashkey mask 0xff at 12 link 104:

$tc filter add dev eth1 parent 1:1 protocol ip u32 ht 104:81: match ip dst 192.168.5.129/32 flowid 1:2

 

root@gateway:/shaper_htb_hash/old# tc -p -s filter  show dev eth1
filter parent 1: protocol ip pref 49143 u32
filter parent 1: protocol ip pref 49143 u32 fh 105: ht divisor 1
filter parent 1: protocol ip pref 49143 u32 fh 809: ht divisor 1
filter parent 1: protocol ip pref 49144 u32
filter parent 1: protocol ip pref 49144 u32 fh 808: ht divisor 1
filter parent 1: protocol ip pref 49145 u32
filter parent 1: protocol ip pref 49145 u32 fh 104: ht divisor 256
filter parent 1: protocol ip pref 49145 u32 fh 807: ht divisor 1
filter parent 1: protocol ip pref 49146 u32
filter parent 1: protocol ip pref 49146 u32 fh 806: ht divisor 1
filter parent 1: protocol ip pref 49147 u32
filter parent 1: protocol ip pref 49147 u32 fh 805: ht divisor 1
filter parent 1: protocol ip pref 49148 u32
filter parent 1: protocol ip pref 49148 u32 fh 804: ht divisor 1
filter parent 1: protocol ip pref 49149 u32
filter parent 1: protocol ip pref 49149 u32 fh 103: ht divisor 256
filter parent 1: protocol ip pref 49149 u32 fh 103:5:800 order 2048 key ht 103 bkt 5 link 104:  (rule hit 58 success 0)
 match IP dst 192.168.5.0/24 (success 58 )
   hash mask 000000ff at 12
filter parent 1: protocol ip pref 49149 u32 fh 803: ht divisor 1
filter parent 1: protocol ip pref 49150 u32
filter parent 1: protocol ip pref 49150 u32 fh 102: ht divisor 256
filter parent 1: protocol ip pref 49150 u32 fh 102:a8:800 order 2048 key ht 102 bkt a8 link 103:  (rule hit 4163 success 0)
 match IP dst 192.168.0.0/16 (success 4163 )
   hash mask 0000ff00 at 16
filter parent 1: protocol ip pref 49150 u32 fh 802: ht divisor 1
filter parent 1: protocol ip pref 49151 u32
filter parent 1: protocol ip pref 49151 u32 fh 101: ht divisor 256
filter parent 1: protocol ip pref 49151 u32 fh 104:81:800 order 2048 key ht 101 bkt 81 flowid 1:2  (rule hit 0 success 0)
 match IP dst 192.168.5.129/32 (success 0 )
filter parent 1: protocol ip pref 49151 u32 fh 101:c0:800 order 2048 key ht 101 bkt c0 link 102:  (rule hit 4165 success 0)
 match IP dst 192.0.0.0/8 (success 4165 )
   hash mask 00ff0000 at 16
filter parent 1: protocol ip pref 49151 u32 fh 801: ht divisor 1
filter parent 1: protocol ip pref 49152 u32
filter parent 1: protocol ip pref 49152 u32 fh 80a: ht divisor 1
filter parent 1: protocol ip pref 49152 u32 fh 800: ht divisor 1
filter parent 1: protocol ip pref 49152 u32 fh 800::800 order 2048 key ht 800 bkt 0 link 101:  (rule hit 4168 success 0)
 match IP dst 0.0.0.0/0 (success 4168 )
   hash mask ff000000 at 16
root@gateway:/shaper_htb_hash/old#

 

смущает вот это:

 

filter parent 1: protocol ip pref 49151 u32 fh 104:81:800 order 2048 key ht 101 bkt 81 flowid 1:2  (rule hit 0 success 0)
 match IP dst 192.168.5.129/32 (success 0 )

Но это мой ip компа предприятия, гоняется трафик.

Share this post


Link to post
Share on other sites

Проблема оказалась в at

 

 

12 — смещение от начала, по которому находится начало блока данных. Если этот параметр не указан, то смещение считается равным нулю. В самом начале работы фильтра нулевая граница считается началом заголовка сетевого уровня, например IPv4. Возможны и отрицательные смещения.

Но вопрос. А как правильно должно задавать смещение или как оно вычисляется?

Edited by Megas

Share this post


Link to post
Share on other sites

Для входящего интерфейса с фильтрами по dst - смещение 16, для исходящего с src - 12. Это адрес нужных байт в пакете.

А у вас все в перемешку, потому и не работает.

Edited by kayot

Share this post


Link to post
Share on other sites

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.