Перейти к содержимому
Калькуляторы

tc c хеш фильтрами использование хеш фильтров в одной подсети

Здравствуйте,

Решил оптимизировать свой шейпер и переписать правила для фильтров с использованием хеша. Трафик режется в пределах одной подсети, например 10.10.80.0/24.

И вместо 256 линейныйх правил (для каждого IP) хочу заменить хеш фильтрами. Прочитал что нашел про хеш фильтры и наткнулся на статью http://habrahabr.ru/blogs/sysadm/89002/ В ней меня заинтересовали правила для 13 хеш таблицы, вот одно из них:

 

/sbin/tc filter add dev eth1 parent 1:0 protocol ip prio 1 u32 ht 13:2: match ip dst 192.168.2.2/32 match ip protocol 1 0xff flowid 1:11

 

Скажите, пожалуйста, в принципе, зачем здесь ещё делать match для 192.168.2.2/32? Ведь по идее сюда (согласно ht 13:2) уже попадет пакет который имеет IP 192.168.2.2.

 

В этой статье http://ace-host.stuart.id.au/russell/files/tc/doc/cls_u32.txt как я понял, на похожий вопрос отвечают мол так: что это нужно если у тебя больше одной подсети и сюды может попасть из другой подсети.

Но не уверен что правильно понял. Просто конечная цель моя заменить это правило (match ip dst 192.168.2.2/32) другим – проверкой маркированного трафика в рамках этого IP. Т.е вместо match хочу сделать fw.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вот хороший пример по хэш-фильтрам: http://www.hazard.maks.net/blog/index.php?op=Default&Date=200802&blogId=1

 

/sbin/tc filter add dev eth1 parent 1:0 protocol ip prio 1 u32 ht 13:2: match ip dst 192.168.2.2/32 match ip protocol 1 0xff flowid 1:11

 

Скажите, пожалуйста, в принципе, зачем здесь ещё делать match для 192.168.2.2/32? Ведь по идее сюда (согласно ht 13:2) уже попадет пакет который имеет IP 192.168.2.2.

Затем, что там стоит flowid 1:11, это номер класса обслуживания (очереди), в которую попадает трафик для IP 192.168.2.2. В других фильтрах номер очереди не фигурирует.

 

В этой статье http://ace-host.stuart.id.au/russell/files/tc/doc/cls_u32.txt как я понял, на похожий вопрос отвечают мол так: что это нужно если у тебя больше одной подсети и сюды может попасть из другой подсети.

Но не уверен что правильно понял. Просто конечная цель моя заменить это правило (match ip dst 192.168.2.2/32) другим – проверкой маркированного трафика в рамках этого IP. Т.е вместо match хочу сделать fw.

Зачем что-то маркировать на шейпере?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вот хороший пример по хэш-фильтрам: http://www.hazard.maks.net/blog/index.php?op=Default&Date=200802&blogId=1

 

/sbin/tc filter add dev eth1 parent 1:0 protocol ip prio 1 u32 ht 13:2: match ip dst 192.168.2.2/32 match ip protocol 1 0xff flowid 1:11

 

Скажите, пожалуйста, в принципе, зачем здесь ещё делать match для 192.168.2.2/32? Ведь по идее сюда (согласно ht 13:2) уже попадет пакет который имеет IP 192.168.2.2.

Затем, что там стоит flowid 1:11, это номер класса обслуживания (очереди), в которую попадает трафик для IP 192.168.2.2. В других фильтрах номер очереди не фигурирует.

 

В этой статье http://ace-host.stuart.id.au/russell/files/tc/doc/cls_u32.txt как я понял, на похожий вопрос отвечают мол так: что это нужно если у тебя больше одной подсети и сюды может попасть из другой подсети.

Но не уверен что правильно понял. Просто конечная цель моя заменить это правило (match ip dst 192.168.2.2/32) другим – проверкой маркированного трафика в рамках этого IP. Т.е вместо match хочу сделать fw.

Зачем что-то маркировать на шейпере?

 

1) Ну в flowid можно направлять и не только по match (u32), а и по марке через fw. Вот например:

tc filter add dev eth0 parent 1:0 protocol ip prio 90 handle 7 fw classid 1:10

(flowid и classid - одно и тоже. Т.е и для u32 мы можем использовать classid вместо flowid).

 

2) Ничего не маркируется на шейпере (да он этого и не умеет). Трафик перед попаданием на шейпер маркается в iptables.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Протестировал, как оказалось, действительно правило match ip dst 192.168.2.2/32 не обязательно. Ставил вместо этого match ip dst 0.0.0.0/0 и трафик только для 192.168.2.2 идет именно сюда.

Для маркированных пакетов, вместо fw можно использовать u32 match mark.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

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

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.