[РЕШЕНО, SOLVED] tc filter + iptables mark, почему-то не работает
Всем доброго времени суток!
Хочу построить шейпер на базе маркирования пакетов в iptables. Но, что странно, на одной машине у меня все работает, а на двух других - нет. Не пойму, в чем дело. Пробовал в качестве теста простенький пример. Что делаю:
1.
IPTABLES:
iptables -t mangle -A POSTROUTING -o eth0 -d 192.168.200.77 -j MARK --set-mark 0x2ff
2.
TC:
tc qdisc add dev eth0 root handle 1 r2q 3 default 0
tc class add dev eth0 parent 1: classid 1:2 htb rate 100Mbit
tc class add dev eth0 parent 1:2 classid 1:3 htb rate 256Kbit
tc filter add dev eth0 parent 1:0 protocol ip prio 100 handle 0x2ff fw classid 1:3
После последней команды выпадает сообщение:
RTNETLINK answers: Invalid argument.
We have an error talking to the kernel.
Странно - на одной машине все работает, а на двух других - нет. Ядра (в разделе QOS) - одинаковые.
Версии iproute2 одинаковые, --sync делал неделю назад.
Может, кто подскажет, где грабли?
- Для комментирования войдите или зарегистрируйтесь
Добавлю. На
Добавлю. На двух машинах одинаковые версии iproute2 и одинаковые конфиги ядра.
Различие только в архитектуре - i386 и x86_64.
На x86_64 - работает, на i386 - нет
alexpro пишет: tc
Разобрался. Все оказалось просто, как дверь военкомата. Правда, пришлось заниматься трассировкой кода ядра, чтобы выловить, где именно вылезают грабли.. Если prio изменить на любое другое значение, все работает. Выходит так, что если я уже применяю фильтры u32, то fw фильтр не может быть с тем же значением prio, что есть у u32. ИМХО, данные "грабли" заслуживают помещения в FAQ по iproute2.
Грабли были в части процитированной команды: "prio 100"
На указанном выше x86_64 вообще не было установлено ни одного фильтра (потому все и работало), а на i386 фильтры были. prio 100 u32 match ip dst
Всем спасибо за внимание :)