Шейпинг в linux... Не работают фильтры с псевдоустройством IFB.. (однако же сам IFB очевидно работает..)

Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС.

Модераторы: SLEDopit, Модераторы разделов

Аватара пользователя
gard
Сообщения: 215

Шейпинг в linux... Не работают фильтры с псевдоустройством IFB..

Сообщение gard »

Здравствуйте! :)
Сегодня вот часа 2 уже воюю с этим скриптом:

Код: Выделить всё

#!/bin/bash

modprobe ifb
ip link set ifb0 up
RATE=1000kbit

# reset all qdisc
tc qdisc del dev ifb0 root     2> /dev/null > /dev/null
tc qdisc del dev ppp0 root        2> /dev/null > /dev/null
tc qdisc del dev ppp0 ingress     2> /dev/null > /dev/null
tc qdisc del dev eth1 root        2> /dev/null > /dev/null
tc qdisc del dev eth1 ingress     2> /dev/null > /dev/null

tc qdisc add dev ifb0 root handle 1: htb default 30
tc class add dev ifb0 parent 1: classid 1:1 htb rate $RATE burst 10k
tc class add dev ifb0 parent 1:1 classid 1:10 htb rate 64kbit ceil 128kbit burst 10k prio 2
tc class add dev ifb0 parent 1:1 classid 1:20 htb rate 64kbit ceil $RATE burst 10k prio 2
tc class add dev ifb0 parent 1:1 classid 1:30 htb rate 100kbit ceil 256kbit burst 10k prio 2
tc class add dev ifb0 parent 1:1 classid 1:40 htb rate 200kbit ceil $RATE burst 10k prio 1

tc filter add dev ifb0 parent 1: protocol ip prio 1 u32 match ip dst 192.168.1.0/24 flowid 1:10

#Перенаправление входящих пакетов с ppp0 на ifb0
tc qdisc add dev ppp0 ingress handle ffff:
tc filter add dev ppp0  parent ffff: protocol ip u32 match u32 0 0 action mirred egress redirect dev ifb0


Тестирую с компьютера-роутера (где это и делаю) и с ноута в локальной сети. Видно, что по-умолчанию пакеты классифицируются как 1:30, где скорость до 256кбит. Дак вот. эта скорость у меня и на роутере и в сетке держится, то есть ограничение работает. А вот фильтр:

Код: Выделить всё

tc filter add dev ifb0 parent 1: protocol ip prio 1 u32 match ip dst 192.168.1.0/24 flowid 1:10
Который должен всем клиентам моей локальной сети ограничивать скорость до 64-128кбит не работает! А фильтр есть, видит его, но не применяет:

Код: Выделить всё

root@gard-area51:/home/gard/run# tc -s filter show dev ifb0
filter parent 1: protocol ip pref 1 u32
filter parent 1: protocol ip pref 1 u32 fh 800: ht divisor 1
filter parent 1: protocol ip pref 1 u32 fh 800::800 order 2048 key ht 800 bkt 0 flowid 1:10
  dst 192.168.1.0/24
root@gard-area51:/home/gard/run#
Я уже весь мозг сломал, ну не понимаю в чем дело. С ограничениями без IFB с eth1 (смотрит в подсеть) все работает, в чем же дело? Подскажите, очень жду ответов.
Изображение Contacts: gard.area51@jabber.ru/org .. more: http://gardarea51.wordpress.com
Спасибо сказали:
Аватара пользователя
gard
Сообщения: 215

Re: Шейпинг в linux... Не работают фильтры с псевдоустройством IFB..

Сообщение gard »

Вот сидя у любимой под вендой сделал еще 1 шейпер, завтра буду проверять его:

Код: Выделить всё

################################################################################
##############
tc qdisc del dev eth1 root        2> /dev/null > /dev/null
tc qdisc del dev eth1 ingress     2> /dev/null > /dev/null

#modprobe ifb
#ifconfig ifb0 up
ip link set dev ifb0 up
#======interface ppp0======
#clear
tc qdisc del dev ppp0 ingress     2> /dev/null > /dev/null
tc qdisc del dev ppp0 root        2> /dev/null > /dev/null

tc qdisc add dev ppp0 ingress
#redirect
tc filter add dev ppp0 parent ffff: protocol ip prio 10 u32 match u32 0 0 flowid 1:1 action mirred egress redirect dev ifb0

#======interface ifb0======
#clear
tc qdisc del dev ibf0 root         2> /dev/null > /dev/null
tc qdisc del dev ibf0 ingress     2> /dev/null > /dev/null

tc qdisc add dev ifb0 root handle 1: htb default 120
    #root class
    tc class add dev ifb0 parent 1: classid 1:1 htb rate 256kbit ceil 256kbit
        #admin
        tc class add dev ifb0 parent 1:1 classid 1:10 htb rate 256kbit ceil 256kbit prio 1
            tc qdisc add dev ifb0 parent 1:10 handle 110: sfq perturb 10
        #all user (local network)
        tc class add dev ifb0 parent 1:1 classid 1:20 htb rate 128kbit ceil 128kbit prio 2
            #user 1
            tc class add dev ifb0 parent 1:20 classid 1:110 htb rate 64kbit ceil 128kbit prio 3
                tc qdisc add dev ifb0 parent 1:110 handle 110: sfq perturb 10
            #default
            tc class add dev ifb0 parent 1:20 classid 1:120 htb rate 64kbit ceil 64kbit prio 4
                tc qdisc add dev ifb0 parent 1:120 handle 120: sfq perturb 10

#filters
#admin ip
tc filter add dev ifb0 parent 1: protocol ip prio 1 u32 match ip dst 192.168.1.1 flowid 1:10
tc filter add dev ifb0 parent 1: protocol ip prio 2 u32 match ip dst 192.168.0.1 flowid 1:10
#users ip
tc filter add dev ifb0 parent 1: protocol ip prio 3 u32 match ip dst 192.168.1.0/24 flowid 1:20
#user1 ip
tc filter add dev ifb0 parent 1: protocol ip prio 4 u32 match ip dst 192.168.1.2 flowid 1:110
#default
tc filter add dev ifb0 parent 1: protocol ip prio 5 u32 match ip dst 192.168.1.2 flowid 1:120


Есть ли у кого-то какие-нибудь соображения, почему не работает фильтр?
Изображение Contacts: gard.area51@jabber.ru/org .. more: http://gardarea51.wordpress.com
Спасибо сказали:
expdot
Сообщения: 176
ОС: Fedora 13, Win Vista

Re: Шейпинг в linux... Не работают фильтры с псевдоустройством IFB..

Сообщение expdot »

извините за некропост, проблема актуальна

дело в том, что когда перенаправляется входящий траффик на превдоустройство, то работает не корректно

траффик не попадает в корневой класс:

Код: Выделить всё

tc qdisc add dev ifb0 root handle 666: htb
tc class add dev ifb0 parent 666: classid 666:1 htb rate 100mbit

tc -s qdisc show dev ifb0
qdisc htb 666: root r2q 10 default 0 direct_packets_stat 116655
 Sent 113659145 bytes 116655 pkt (dropped 0, overlimits 0 requeues 0)
 rate 0bit 0pps backlog 0b 0p requeues 0

tc -s class show dev ifb0
class htb 666:1 root prio 0 rate 100000Kbit ceil 100000Kbit burst 1600b cburst 1600b
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 rate 0bit 0pps backlog 0b 0p requeues 0
 lended: 0 borrowed: 0 giants: 0
 tokens: 125 ctokens: 125


но тем не менее tcpdump показывает активность на псевдоустройстве
и, да Debian Lenny
Спасибо сказали:
expdot
Сообщения: 176
ОС: Fedora 13, Win Vista

Re: Шейпинг в linux... Не работают фильтры с псевдоустройством IFB..

Сообщение expdot »

порыл интернеты везде пишут что нельзя заворачивать входящий траффик на ifb устройство.
как я понял, дело в том что tc не может определить куда дальше поступает траффик. очень жаль
для сведений. Fedora 11 ядро 2.6.29.6 iproute2-ss090324 ситуация аналогичная.

imq очень как не охота прикручивать. наверное придется входящий траффик ограничивать политикой, а с исходящим изворачиваться...
Спасибо сказали:
expdot
Сообщения: 176
ОС: Fedora 13, Win Vista

Re: Шейпинг в linux... Не работают фильтры с псевдоустройством IFB..

Сообщение expdot »

единственное в чем остались вопросы это:

Код: Выделить всё

tc filter add dev $DEV parent ffff: protocol ip u32 match u32 0 0 action mirred help
Usage: mirred <DIRECTION> <ACTION> [index INDEX] <dev DEVICENAME>
where:
        DIRECTION := <ingress | egress>
        ACTION := <mirror | redirect>
        INDEX  is the specific policy instance id
        DEVICENAME is the devicename


DIRECTION := <ingress как бы намекает что можно перенаправлять входящий траффик

но

Код: Выделить всё

tc filter add dev $DEV parent ffff: protocol ip u32 match u32 0 0 action mirred ingress mirror dev ifb1
mirred ingress not supported at the moment
bad action parsing
parse_action: bad value (5:mirred)!
Illegal "action"


mirred ingress not supported at the moment .... очень жаль. надеюсь в будущем допилят
Спасибо сказали: