Пытаюсь наваять скрипт для шейпинга торрент трафика. Использую IMQ и l7-layer.
modprobe imq
modprobe ipt_IMQ
modprobe xt_connmark
modprobe ipt_connmark
modprobe imq numdevs=2
ip link set imq0 up
ip link set imq1 up
##############################################################ingress##############################################################
tc qdisc add dev imq0 root handle 1: htb default 1
tc class add dev imq0 parent 1: classid 1:1 htb rate 1100Kbit # общая пропускная способность - 10%
tc class add dev imq0 parent 1:1 classid 1:10 htb rate 512kbit ceil 1100kbit # HTTP
tc class add dev imq0 parent 1:1 classid 1:11 htb rate 100kbit ceil 300kbit # Torrent
tc qdisc add dev imq0 parent 1:10 handle 10: sfq perturb 10 # дисциплины
tc qdisc add dev imq0 parent 1:11 handle 11: sfq perturb 10 # дисциплины
tc filter add dev imq0 parent 1:0 protocol ip prio 1 handle 2 fw flowid 1:10 # Распихиваем, метка 2 - HTTP
tc filter add dev imq0 parent 1:0 protocol ip prio 2 handle 1 fw flowid 1:11 # Распихиваем, метка 1 - Torrent
iptables -t mangle -A PREROUTING -i ppp0 -j IMQ --todev 0 # Перенаправляем трафик на IMQ
####### метим #######
iptables -t mangle -A PREROUTING -m layer7 --l7proto http -j CONNMARK --set-mark 0x2
iptables -t mangle -A PREROUTING -m layer7 --l7proto bittorrent -j CONNMARK --set-mark 0x1
Проблема в том, что tc почему-то не понимает помеченные CONNMARK пакеты, в результате ничего не шейпится, классы 10-11 по нулям (tc -s qdisc ls dev imq0 показывает, что все запихивается в дефолтный класс.) Если метить пакеты через MARK, то в классы 10 и 11 что-то попадает, но 80% торрент-трафика все равно идет через дефолтный, хотя должна идти в 11.
Как можно маркировать все пакеты в соединении, чтобы это было понятно tc?