Jump to content

Recommended Posts

Posted

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

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

 

# Удаляем все обработчики на интерфейсе
/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 компа предприятия, гоняется трафик.

Posted (edited)

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

 

 

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

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

Edited by Megas
Posted (edited)

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

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

Edited by kayot
  • 2 years later...

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