Megas Posted March 29, 2012 Posted March 29, 2012 Кусок кода, пытаюсь найти почему он не работает. Может кто ткнет где ошибка? уже пару дней кручу и не соображу, кучу доки прокурил. # Удаляем все обработчики на интерфейсе /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 компа предприятия, гоняется трафик. Вставить ник Quote
Megas Posted March 29, 2012 Author Posted March 29, 2012 (edited) Проблема оказалась в at 12 — смещение от начала, по которому находится начало блока данных. Если этот параметр не указан, то смещение считается равным нулю. В самом начале работы фильтра нулевая граница считается началом заголовка сетевого уровня, например IPv4. Возможны и отрицательные смещения. Но вопрос. А как правильно должно задавать смещение или как оно вычисляется? Edited March 29, 2012 by Megas Вставить ник Quote
kayot Posted March 29, 2012 Posted March 29, 2012 (edited) Для входящего интерфейса с фильтрами по dst - смещение 16, для исходящего с src - 12. Это адрес нужных байт в пакете. А у вас все в перемешку, потому и не работает. Edited March 30, 2012 by kayot Вставить ник Quote
taf_321 Posted March 30, 2012 Posted March 30, 2012 ... filter ... ip src ... at 12 ... ... filter ... ip dst ... at 16 ... У вас там для dst смещения и 12 и 16. Вы уж определитесь, вы туда, или сюда фильтруете? Вставить ник Quote
vitalyb Posted March 30, 2012 Posted March 30, 2012 Megas http://ru.wikipedia.org/wiki/IP#.D0.92.D0.B5.D1.80.D1.81.D0.B8.D1.8F_4_.28IPv4.29 Вставить ник Quote
pavel.odintsov Posted October 28, 2014 Posted October 28, 2014 vitalyb, taf_321 огромное спасибо :) Сори за некропостинг :) Вставить ник 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.