LINUX.ORG.RU
ФорумAdmin

bdsm c imq, или как правильно шейпить трафик


0

0

Ядро 2.4.37, без возможности пересборки.

«типичная» ситуация - торрент качалка на сервере + небольшая локалка ,через нат выходящая в инет. Задача - шейпить трафик и серверный и пользовательский (не по отдельности, а как трафик одного вида).

И так: по умолчанию imq ловит трафик _до_ нат в prerouting => отловить по реальному ип не получится.

Что было предложено: форвардящиеся пакеты от каждого клиента snat'ить в заданный диапозон портов, те

iptables -t nat -A POSTROUTING -p tcp -o ppp0 -s 172.16.1.11 -j SNAT --to-source $INET_IP:6890-6895

Далее, через tc

tc qdisc del dev imq0 root tc qdisc add dev imq0 handle 1: root htb default 40

# root qdisc tc class add dev imq0 parent 1: classid 1:1 htb rate 1000kbit tc class add dev imq0 parent 1:1 classid 1:20 htb rate 100kbit ceil 100kbit prio 7 tc class add dev imq0 parent 1:1 classid 1:30 htb rate 100kbit ceil 200kbit prio 1 tc class add dev imq0 parent 1:1 classid 1:40 htb rate 100kbit ceil 800kbit prio 7

tc filter add dev imq0 parent 1:1 prio 1 protocol ip u32 match ip dport 0x1ae0 0x1ff0 flowid 1:30

те мы с помощью tc пытаемся выловить трафик на основании порта назначния; те мы форвардящиеся пакеты запихнули в диапозон портов 6880-6895, а затем через tc его выцепляем.

Но...ничего не выцепляется, не шейпится, в заданный класс ничего не попадает; хотя tc'шный фильтр и добавился, но всё равно трафик идёт в дефолтовый класс.

КАК РЕШИТЬ ЭТУ ***** ПРОБЛЕМУ???

Ответ на: комментарий от ventilator

iptables -t mangle -A PREROUTING -i ppp0 -j IMQ --todev 0

модули imq и ipt_imq загружены.

ps. пересобрал сейчас модули с подправленным поведением imq (т.е. хухи свои imq ставит после нат в прероутинге), полученным модулем заменил старый, перегрузил его - ничего не изменилось. мб за этим модулем какие-то другие тоже меняются...?

loginrl103
() автор топика
Ответ на: комментарий от ventilator

imq0 поднят, пакеты через него пробегают. ifb появился только в 2.6; 2.4 использую на встроенной железке (dir-320), 2.6 плохо дружит с конкретной моделью wifi.

нужно как то выкручиваться тем, что есть((

loginrl103
() автор топика
Ответ на: комментарий от loginrl103

ну что, никто не знает как решать проблему?

loginrl103
() автор топика

По хорошему, маска должна быть «0xfff0», а не «0x1ff0», хотя и так должно работать. А если в filter просто указывать ip-адрес, то работает?

mky ★★★★★
()
Ответ на: комментарий от mky

tc работает до nat, поэтому приходится выделять локальщиков по портам. если бы тс мог работать после нат - не было б проблем...

loginrl103
() автор топика
Ответ на: комментарий от loginrl103

Это понятно, просто может у вас вобще проблемы с imq или filter. Если просто по ip-адресу $INET_IP получится завернуть все пакеты в «1:30», то и по порту должно работать.

Ну ещё попробуйте посмотреть вывод «tc filter show dev imq0», может «tc filter» неправильно преобразует dport.

mky ★★★★★
()
Ответ на: комментарий от mky

по $inet_ip ловит пакеты, в фильтры тоже добавляется. странно всё это. проблема наверняка в какой-то мелочи

loginrl103
() автор топика

parent 1:0 для фильтра. И tc -s filter ls dev imq0 (по памяти) в студию.

as33 ★☆☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.