Traffic shaping

Пытаюсь ограничить исходящий p2p-трафик, в простейшем виде примерно так:

iptables -A OUTPUT -t mangle -m ipp2p --ipp2p --debug -j CONNMARK --set-mark 0x01

tc qdisc add dev eth0 root handle 1: htb default 10
tc class add dev eth0 parent 1: classid 1:1 htb rate 100mbit
tc class add dev eth0 parent 1:1 classid 1:10 htb rate 10mbit ceil 100mbit
tc class add dev eth0 parent 1:1 classid 1:20 htb rate 128kbit ceil 256kbit
tc filter add dev eth0 protocol ip parent 1:0 prio 2 handle 1 fw classid 1:20 

- и ничего не получается. Где я не прав?

iptables -A PREROUTING -t

 iptables -A PREROUTING -t mangle -p tcp -j CONNMARK --restore-mark
 iptables -A PREROUTING -t mangle -p tcp -m mark ! --mark 0 -j ACCEPT
 iptables -A PREROUTING -t mangle -p tcp -m ipp2p --ipp2p -j MARK --set-mark 1
 iptables -A PREROUTING -t mangle -p tcp -m mark --mark 1 -j CONNMARK --save-mark

Или вот еще хинт интересный:
http://parallel.imm.uran.ru/stud/MarshrutizacijaIOgranichenieTrafika
А вообще гугл в помощь.

Попробовал, но

Попробовал, но никакого эффекта, к сожалению.
За ссылку спасибо, буду изучать.

А по этому

А по этому правилу iptables пакеты вообще проходят?
iptables -t mangle -L -n -v

вот: iptables -t mangle

вот:


iptables -t mangle -L -n -v
Chain PREROUTING (policy ACCEPT 670K packets, 1483M bytes)
pkts bytes target prot opt in out source destination
796K 1640M CONNMARK tcp -- * * 0.0.0.0/0 0.0.0.0/0 CONNMARK restore
127K 157M ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 MARK match !0x0
231 27839 MARK tcp -- * * 0.0.0.0/0 0.0.0.0/0 ipp2p v0.8.2 --ipp2p MARK set 0x1
231 27839 CONNMARK tcp -- * * 0.0.0.0/0 0.0.0.0/0 MARK match 0x1 CONNMARK save

Chain INPUT (policy ACCEPT 797K packets, 1640M bytes)
pkts bytes target prot opt in out source destination

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination

Chain OUTPUT (policy ACCEPT 781K packets, 1510M bytes)
pkts bytes target prot opt in out source destination

Chain POSTROUTING (policy ACCEPT 781K packets, 1510M bytes)
pkts bytes target prot opt in out source destination

Нет, уберите

Нет, уберите правило из PREROUTING. Вообще у вас всё было правильно изначально в первом посте, кроме действия iptables: вместо CONNMARK нужно было использовать MARK.

Это с чего бы MARK

Это с чего бы MARK использовать? Чтобы по первому пакету только резать? Представляю себе ограничение скорости до 256Кбит 1го пакета, который <=1500 байт...
Вообще видно что p2p траффик отлавливается какой-то:
127K 157M ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 MARK match !0x0
157Mb было.
Значит iproute2 фильтр не цепляет в нужный класс. Покажи желательно еще tc -d -s class show dev eth0.
Соб-на у меня подозрение что tc не подцепляет CONNMARK. Тут уже можно выкрутиться с помощью цели CLASSIFY (по ссылке что я давал выше так и сделано):

iptables -t mangle -A POSTROUTING -o eth0 -m mark --mark 1 -j CLASSIFY --set-class 1:20

Вы

Вы заблуждаетесь насчёт действия MARK. Оно применяется к каждому пакету в потоке.

Действие MARK

Действие MARK применяется к тому пакету, который попадает под правило iptables. Модуль правила для p2p сетей может определить p2p соединения только по первому пакету, где присутствует заголовок присущий p2p соединению. Все остальные пакеты будут выглядеть как мусор. Для этого и нужно действие CONNMARK - чтобы нумеровать не только найденый первый пакет p2p, но и соответсвенно все следующие за ним на данном соединении.
Учите мат. часть, тут ведь правило не по порту отлавливает например.

Да,

Да, действительно. Я то у себя отлавливал пакеты в iptables совсем другим правилом. Спасибо за объяснение.

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".