pavel.odintsov Posted July 6, 2014 (edited) Всем привет! В процессе реализации вот этой штуки https://github.com/FastVPSEestiOu/openvz-network-shaper/blob/master/fastvps_openvz_shaper.pl (шейпера для OpenVZ VPS) уже очень давно столкнулся с неприятной штукой, а именно с неработоспособностью хендлов для IPv6 правил. Зачем мне хендлы? Очень просто - с ними очень удобно удалять правила, так как хендл явно связан в нашей системе с номером контейнера и я всегда могу в один подход найти и удалить/заменить правила по конкретному хендлу. Для IPv4 все создается идеально: /sbin/tc filter add dev eth0 handle 800::39 protocol ip parent 1: prio 1 u32 match ip dst "xx.yy.xx.31" flowid 1:290 А вот при попытке подсунуть тоже самое для IPv6: /sbin/tc filter add dev venet0 handle 800::66 protocol ipv6 parent 1: u32 match ip6 dst "1abb:aabb:150:9222::8" flowid 1:290 Вышибает вот такое: error: RTNETLINK answers: Invalid argument We have an error talking to the kernel Как только убираю handle все работает на ура: /sbin/tc filter add dev venet0 protocol ipv6 parent 1: u32 match ip6 dst "1abb:aabb:150:9222::8" flowid 1:290 Платформа: CentOS 6 + 2.6.32 родное. Спасайте =( Пытался разобраться с форматом хендлов в коде ядра, но не оилил :( Уточняю - все фильтры создаю с уникальными handle, то есть src и dst правила получают собственные номера, как для v4, так и для v6. Edited July 7, 2014 by pavel.odintsov Share this post Link to post Share on other sites More sharing options...
NiTr0 Posted July 6, 2014 Как вариант - матчить по u8/u16/u32 со смещением от начала пакета... Share this post Link to post Share on other sites More sharing options...
pavel.odintsov Posted July 7, 2014 Как-то это кривовато =( Да и неудобно будет потом разбираться без скрипта, у кого какие правила. Хотелось бы понять, почему оно себя вообще так ведет. Share this post Link to post Share on other sites More sharing options...
s.lobanov Posted July 7, 2014 сначала нужно проверить на актуальном ядре (3.15.4). да, там нет openvz, но проверить нужно, потом попытаться пропатчить ваше ядро, если в 3.15.4 такой проблемы нет Share this post Link to post Share on other sites More sharing options...
pavel.odintsov Posted July 7, 2014 (edited) Починено в общем. Баг был в двух местах, что усложняло его исправление. Хендлы для IPv6 должны иметь префикс 801::XX, а для IPv4 - 800::XX, кроме этого, если для одного и того же класса есть правила IPv4 и IPv6, то у них должны быть РАЗНЫЕ приоритеты. При этом допустимо, чтобы приоритет у src/dst правил на один и тот же айпи для одного протокола был идентичен. Вот так. Блин, tc - вечная криптомагия=) Edited July 7, 2014 by pavel.odintsov Share this post Link to post Share on other sites More sharing options...