Jump to content
Калькуляторы

ifb и шейп входящего трафика Трафик заворачивается, но не шейпиться.

Доброго времени суток господа. Есть такая ситуация. Решил посмотреть как работает хешфильтры в tc.

Для этого поднял в виртуалке две машины с ubuntu server и windows xp.

На сервере:

eth0 - смотрящая в мир, на ней же нат.

eth1 - смотрит в локалку. ip - 192.168.200.254

На eth1 режим скорость закачки

На eth1 создаем ifb0 на котором режим отдачу

На винде айпи 192.168.200.10

На коленке написал такой скрипт:

#!/bin/bash
echo "1"
tc qdisc del dev eth1 root
tc qdisc del dev ifb0 root
echo "2"
tc qdisc del dev eth1 ingress
#download
echo "3"
tc qdisc add dev eth1 root handle 1: htb default 20
echo "4"
tc class add dev eth1 parent 1: classid 1:1 htb rate 1024kbit
#
echo "5"
tc filter add dev eth1 parent 1:0 prio 1 handle 10: protocol ip u32 divisor 256
echo "6"
tc filter add dev eth1 parent 1:0 protocol ip u32 ht 800:: match ip dst 192.168.200.0/24 hashkey mask 0x000000ff at 16 link 1
#
echo "7"
tc class add dev eth1 parent 1:1 classid 1:100 htb rate 256kbit ceil 512kbit prio 2 quantum 1536
echo "8"
tc qdisc add dev eth1 parent 1:100 handle 100: sfq perturb 10
#
echo "9"
tc filter add dev eth1 protocol ip prio 2 u32 ht 10:a: match ip dst 192.168.200.10/32 flowid 1:100
#upload
echo "10"
modprobe ifb
echo "11"
ip link set dev ifb0 up
echo "12"
tc qdisc add dev eth1 ingress
echo "13"
tc filter add dev eth1 parent ffff: protocol ip  u32 match u32 0 0 action mirred egress redirect dev ifb0
#
echo "14"
tc qdisc add dev ifb0 root handle 1: htb default 20
tc class add dev ifb0 parent 1: classid 1:1 htb rate 1024kbit
tc filter add dev ifb0 parent 1:0 prio 1 handle 10: protocol ip u32 divisor 256
tc filter add dev ifb0 parent 1:0 protocol ip u32 ht 800:: match ip dst 192.168.200.0/24 hashkey mask 0x000000ff at 16 link 1
tc class add dev ifb0 parent 1:1 classid 1:100 htb rate 256kbit ceil 512kbit prio 2 quantum 1536
tc qdisc add dev ifb0 parent 1:100 handle 100: sfq perturb 10
tc filter add dev ifb0 protocol ip prio 2 u32 ht 10:a: match ip dst 192.168.200.10/32 flowid 1:100

После всех этих манипуляций закачка режится, но отдача так и идет без ограничений.

Объясните, пожалуйста, где я тупанул.

Share this post


Link to post
Share on other sites

Нафига вы все городите ifb? Это чем-то обосновано? Сделай шейпер на исходящий траф для eth0 и eth1

Share this post


Link to post
Share on other sites
Нафига вы все городите ifb? Это чем-то обосновано? Сделай шейпер на исходящий траф для eth0 и eth1
eth0 - смотрящая в мир, на ней же нат.

На сколько я правильно понял, прочитав документацию и этот форум, на интерфейс, где весит нат, не получится повесить шейпер.

Я понимаю, что правильно разнести шейпер и нат на разные машины, а если нет возможности...

Если я ошибаюсь, и шейпер можно повесить на интерфейс с натом, то буду благодарен за информацию.

Share this post


Link to post
Share on other sites
eth0 - смотрящая в мир, на ней же нат.

На сколько я правильно понял, прочитав документацию и этот форум, на интерфейс, где весит нат, не получится повесить шейпер.

Я понимаю, что правильно разнести шейпер и нат на разные машины, а если нет возможности...

Если я ошибаюсь, и шейпер можно повесить на интерфейс с натом, то буду благодарен за информацию.

Не совсем правильно понимаете. Не получится нормально шейпинг + NAT на ifb или прямо на eth, а вот на imq - запросто.

Share this post


Link to post
Share on other sites
eth0 - смотрящая в мир, на ней же нат.

На сколько я правильно понял, прочитав документацию и этот форум, на интерфейс, где весит нат, не получится повесить шейпер.

Я понимаю, что правильно разнести шейпер и нат на разные машины, а если нет возможности...

Если я ошибаюсь, и шейпер можно повесить на интерфейс с натом, то буду благодарен за информацию.

Не совсем правильно понимаете. Не получится нормально шейпинг + NAT на ifb или прямо на eth, а вот на imq - запросто.

На сколько мне известно, то для работы с imq необходимо патчить ядро и трафик дута заворачивается посредством iptables. А хотелось бы не использовать для этих целей iptables.

Share this post


Link to post
Share on other sites

Если я ошибаюсь, и шейпер можно повесить на интерфейс с натом, то буду благодарен за информацию.

Маркировать пакеты до ната (к примеру в форвард если нат в построутинге), сортировать по классам - по меткам.

Share this post


Link to post
Share on other sites

У вас там нету редиректа интерфейсов, ifb сам посебе трафик перехватывать не будет.

Кстати - я делаю редирект только на интерных сетёвухах, в примере внешний - eth0 и он в шейпере даже невспоминается.

Пример:

 

ip l set dev ifb0 up

ip l set dev ifb1 up

## subor shaperu, generated by hshapy v0.2 08.12.2010 07:27:44 @ 2011-02-03 10:15:22.775932

echo 'inicializujem root qdisc'

/sbin/tc qdisc del root dev ifb0

/sbin/tc qdisc add dev ifb0 root handle 1:0 hfsc default fffa

/sbin/tc qdisc del root dev ifb1

/sbin/tc qdisc add dev ifb1 root handle 1:0 hfsc default fffa

echo 'inicializujem root qdisc a redirect filter pre iface eth1'

/sbin/tc qdisc del root dev eth1

/sbin/tc qdisc del dev eth1 ingress

/sbin/tc qdisc add dev eth1 root handle 1:0 hfsc

/sbin/tc qdisc add dev eth1 ingress

/sbin/tc filter add dev eth1 parent 1:0 protocol ip prio 10 u32 match u32 0 0 flowid 1:1 action mirred egress redirect dev ifb0

/sbin/tc filter add dev eth1 parent ffff: protocol ip prio 10 u32 match u32 0 0 flowid 1:1 action mirred egress redirect dev ifb1

echo 'inicializujem root qdisc a redirect filter pre iface eth2'

/sbin/tc qdisc del root dev eth2

/sbin/tc qdisc del dev eth2 ingress

/sbin/tc qdisc add dev eth2 root handle 1:0 hfsc

/sbin/tc qdisc add dev eth2 ingress

/sbin/tc filter add dev eth2 parent 1:0 protocol ip prio 10 u32 match u32 0 0 flowid 1:1 action mirred egress redirect dev ifb0

/sbin/tc filter add dev eth2 parent ffff: protocol ip prio 10 u32 match u32 0 0 flowid 1:1 action mirred egress redirect dev ifb1

echo 'inicializujem root qdisc a redirect filter pre iface eth3'

/sbin/tc qdisc del root dev eth3

/sbin/tc qdisc del dev eth3 ingress

/sbin/tc qdisc add dev eth3 root handle 1:0 hfsc

/sbin/tc qdisc add dev eth3 ingress

/sbin/tc filter add dev eth3 parent 1:0 protocol ip prio 10 u32 match u32 0 0 flowid 1:1 action mirred egress redirect dev ifb0

/sbin/tc filter add dev eth3 parent ffff: protocol ip prio 10 u32 match u32 0 0 flowid 1:1 action mirred egress redirect dev ifb1

echo 'inicializujem root qdisc a redirect filter pre iface eth5'

/sbin/tc qdisc del root dev eth5

/sbin/tc qdisc del dev eth5 ingress

/sbin/tc qdisc add dev eth5 root handle 1:0 hfsc

/sbin/tc qdisc add dev eth5 ingress

/sbin/tc filter add dev eth5 parent 1:0 protocol ip prio 10 u32 match u32 0 0 flowid 1:1 action mirred egress redirect dev ifb0

/sbin/tc filter add dev eth5 parent ffff: protocol ip prio 10 u32 match u32 0 0 flowid 1:1 action mirred egress redirect dev ifb1

echo 'inicializujem root qdisc a redirect filter pre iface eth7'

/sbin/tc qdisc del root dev eth7

/sbin/tc qdisc del dev eth7 ingress

/sbin/tc qdisc add dev eth7 root handle 1:0 hfsc

/sbin/tc qdisc add dev eth7 ingress

/sbin/tc filter add dev eth7 parent 1:0 protocol ip prio 10 u32 match u32 0 0 flowid 1:1 action mirred egress redirect dev ifb0

/sbin/tc filter add dev eth7 parent ffff: protocol ip prio 10 u32 match u32 0 0 flowid 1:1 action mirred egress redirect dev ifb1

# root class

echo 'root class'

/sbin/tc class add dev ifb0 parent 1:0 classid 1:10 hfsc ls m2 18000kbit ul m2 18000kbit

/sbin/tc class add dev ifb1 parent 1:0 classid 1:10 hfsc ls m2 18000kbit ul m2 18000kbit

Edited by devicebusy

Share this post


Link to post
Share on other sites
У вас там нету редиректа интерфейсов, ifb сам посебе трафик перехватывать не будет.

Кстати - я делаю редирект только на интерных сетёвухах, в примере внешний - eth0 и он в шейпере даже невспоминается.

Пример:

 

ip l set dev ifb0 up

ip l set dev ifb1 up

## subor shaperu, generated by hshapy v0.2 08.12.2010 07:27:44 @ 2011-02-03 10:15:22.775932

echo 'inicializujem root qdisc'

/sbin/tc qdisc del root dev ifb0

/sbin/tc qdisc add dev ifb0 root handle 1:0 hfsc default fffa

/sbin/tc qdisc del root dev ifb1

/sbin/tc qdisc add dev ifb1 root handle 1:0 hfsc default fffa

echo 'inicializujem root qdisc a redirect filter pre iface eth1'

/sbin/tc qdisc del root dev eth1

/sbin/tc qdisc del dev eth1 ingress

/sbin/tc qdisc add dev eth1 root handle 1:0 hfsc

/sbin/tc qdisc add dev eth1 ingress

/sbin/tc filter add dev eth1 parent 1:0 protocol ip prio 10 u32 match u32 0 0 flowid 1:1 action mirred egress redirect dev ifb0

/sbin/tc filter add dev eth1 parent ffff: protocol ip prio 10 u32 match u32 0 0 flowid 1:1 action mirred egress redirect dev ifb1

echo 'inicializujem root qdisc a redirect filter pre iface eth2'

/sbin/tc qdisc del root dev eth2

/sbin/tc qdisc del dev eth2 ingress

/sbin/tc qdisc add dev eth2 root handle 1:0 hfsc

/sbin/tc qdisc add dev eth2 ingress

/sbin/tc filter add dev eth2 parent 1:0 protocol ip prio 10 u32 match u32 0 0 flowid 1:1 action mirred egress redirect dev ifb0

/sbin/tc filter add dev eth2 parent ffff: protocol ip prio 10 u32 match u32 0 0 flowid 1:1 action mirred egress redirect dev ifb1

echo 'inicializujem root qdisc a redirect filter pre iface eth3'

/sbin/tc qdisc del root dev eth3

/sbin/tc qdisc del dev eth3 ingress

/sbin/tc qdisc add dev eth3 root handle 1:0 hfsc

/sbin/tc qdisc add dev eth3 ingress

/sbin/tc filter add dev eth3 parent 1:0 protocol ip prio 10 u32 match u32 0 0 flowid 1:1 action mirred egress redirect dev ifb0

/sbin/tc filter add dev eth3 parent ffff: protocol ip prio 10 u32 match u32 0 0 flowid 1:1 action mirred egress redirect dev ifb1

echo 'inicializujem root qdisc a redirect filter pre iface eth5'

/sbin/tc qdisc del root dev eth5

/sbin/tc qdisc del dev eth5 ingress

/sbin/tc qdisc add dev eth5 root handle 1:0 hfsc

/sbin/tc qdisc add dev eth5 ingress

/sbin/tc filter add dev eth5 parent 1:0 protocol ip prio 10 u32 match u32 0 0 flowid 1:1 action mirred egress redirect dev ifb0

/sbin/tc filter add dev eth5 parent ffff: protocol ip prio 10 u32 match u32 0 0 flowid 1:1 action mirred egress redirect dev ifb1

echo 'inicializujem root qdisc a redirect filter pre iface eth7'

/sbin/tc qdisc del root dev eth7

/sbin/tc qdisc del dev eth7 ingress

/sbin/tc qdisc add dev eth7 root handle 1:0 hfsc

/sbin/tc qdisc add dev eth7 ingress

/sbin/tc filter add dev eth7 parent 1:0 protocol ip prio 10 u32 match u32 0 0 flowid 1:1 action mirred egress redirect dev ifb0

/sbin/tc filter add dev eth7 parent ffff: protocol ip prio 10 u32 match u32 0 0 flowid 1:1 action mirred egress redirect dev ifb1

# root class

echo 'root class'

/sbin/tc class add dev ifb0 parent 1:0 classid 1:10 hfsc ls m2 18000kbit ul m2 18000kbit

/sbin/tc class add dev ifb1 parent 1:0 classid 1:10 hfsc ls m2 18000kbit ul m2 18000kbit

Ну eth0 в шейпере не используется, т.к. это же внешний интерфейс с натом. Решил все рулить на eth1.

Я так понял, что я упустил момент вот с этим flowid 1:1

Значит в моем случае

tc filter add dev eth1 parent ffff: protocol ip u32 match u32 0 0 flowid 1:1 action mirred egress redirect dev ifb0

И метку 1:1 я ставлю через iptables, я правильно Вас понял?

 

Share this post


Link to post
Share on other sites
Ну eth0 в шейпере не используется, т.к. это же внешний интерфейс с натом. Решил все рулить на eth1.

Я так понял, что я упустил момент вот с этим flowid 1:1

Значит в моем случае

tc filter add dev eth1 parent ffff: protocol ip u32 match u32 0 0 flowid 1:1 action mirred egress redirect dev ifb0

И метку 1:1 я ставлю через iptables, я правильно Вас понял?

Не совсем - там метку ненадо вообще, вам редирект делает сам фильтр. Т.е. как только задаёте эту команду - траффик лезет на ifb.

 

Share this post


Link to post
Share on other sites
Ну eth0 в шейпере не используется, т.к. это же внешний интерфейс с натом. Решил все рулить на eth1.

Я так понял, что я упустил момент вот с этим flowid 1:1

Значит в моем случае

tc filter add dev eth1 parent ffff: protocol ip u32 match u32 0 0 flowid 1:1 action mirred egress redirect dev ifb0

И метку 1:1 я ставлю через iptables, я правильно Вас понял?

Не совсем - там метку ненадо вообще, вам редирект делает сам фильтр. Т.е. как только задаёте эту команду - траффик лезет на ifb.

Блин, что-то у меня руки не из того места. Вот, что сейчас:

ip link set dev ifb0 up
echo "12"
tc qdisc add dev eth1 ingress
echo "13"
tc filter add dev eth1 parent ffff: protocol ip  u32 match u32 0 0 [b]flowid 1:1[/b] action mirred egress redirect dev ifb0
#
echo "14"
tc qdisc add dev ifb0 root handle 1: htb default 20
tc class add dev ifb0 parent 1: classid 1:1 htb rate 1024kbit
tc filter add dev ifb0 parent 1:0 prio 1 handle 10: protocol ip u32 divisor 256
tc filter add dev ifb0 parent 1:0 protocol ip u32 ht 800:: match ip dst 192.168.200.0/24 hashkey mask 0x000000ff at 16 link 10:
tc class add dev ifb0 parent 1:1 classid 1:100 htb rate 256kbit ceil 512kbit prio 2 quantum 1536
tc qdisc add dev ifb0 parent 1:100 handle 100: sfq perturb 10
tc filter add dev ifb0 protocol ip prio 2 u32 ht 10:a: match ip dst 192.168.200.10/32 flowid 1:100

Но нифига скорость не шейпиться.

Таки, я думаю причина в нате, не даром много проблем с ifb0, кто использует нат.

Edited by tokra

Share this post


Link to post
Share on other sites
Дайте целый скрипт на dpaste.com и линк пошлите сюда плз.
На данный момент тыц

 

з.ы. Только там везде на самом деле link 10, просто когда в пати копировал режит

Edited by tokra

Share this post


Link to post
Share on other sites

tc -s filter show dev eth1

tc -s filter show dev ifb0

 

покажите плз.

 

Кста - а чего вы и обратное направление через ifb1 не тащите?

Edited by devicebusy

Share this post


Link to post
Share on other sites
eth0 - смотрящая в мир, на ней же нат.

На сколько я правильно понял, прочитав документацию и этот форум, на интерфейс, где весит нат, не получится повесить шейпер.

Я понимаю, что правильно разнести шейпер и нат на разные машины, а если нет возможности...

Если я ошибаюсь, и шейпер можно повесить на интерфейс с натом, то буду благодарен за информацию.

Не совсем правильно понимаете. Не получится нормально шейпинг + NAT на ifb или прямо на eth, а вот на imq - запросто.

На сколько мне известно, то для работы с imq необходимо патчить ядро и трафик дута заворачивается посредством iptables. А хотелось бы не использовать для этих целей iptables.

Тогда никак. Или маркировать пакеты вручную до НАТа как предлагал NiTr0 и строить фильтры по меткам, или использовать IMQ + редирект iptables для заворачивания трафика(очень удобная штука на самом деле), IMQ изначально совместим с НАТом. Или выносить НАТ с машины занимающейся шейпингом и шейпить на eth0/eth1, это самое правильно решение)

Share this post


Link to post
Share on other sites
tc -s filter show dev eth1

tc -s filter show dev ifb0

 

покажите плз.

 

Кста - а чего вы и обратное направление через ifb1 не тащите?

root@ubuntu:~# tc -s filter show dev ifb0
filter parent 1: protocol ip pref 1 u32
filter parent 1: protocol ip pref 1 u32 fh 10: ht divisor 256
filter parent 1: protocol ip pref 1 u32 fh 10:a:800 order 2048 key ht 10 bkt a flowid 1:100
  match c0a8c80a/ffffffff at 16
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 link 10:
  match c0a8c800/ffffff00 at 16
    hash mask 000000ff at 16
filter parent 1: protocol ip pref 2 u32
filter parent 1: protocol ip pref 2 u32 fh 802: ht divisor 1
filter parent 1: protocol ip pref 49152 u32
filter parent 1: protocol ip pref 49152 u32 fh 801: ht divisor 1

 

root@ubuntu:~# tc -s filter show dev eth1
filter parent 1: protocol ip pref 1 u32
filter parent 1: protocol ip pref 1 u32 fh 10: ht divisor 256
filter parent 1: protocol ip pref 1 u32 fh 10:a:800 order 2048 key ht 10 bkt a flowid 1:100
  match c0a8c80a/ffffffff at 16
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 link 10:
  match c0a8c800/ffffff00 at 16
    hash mask 000000ff at 16
filter parent 1: protocol ip pref 2 u32
filter parent 1: protocol ip pref 2 u32 fh 802: ht divisor 1
filter parent 1: protocol ip pref 49152 u32
filter parent 1: protocol ip pref 49152 u32 fh 801: ht divisor 1

 

Для начала думал сделать по простому, хотя бы разобраться с одним интерфейсом ;)

 

Или выносить НАТ с машины занимающейся шейпингом и шейпить на eth0/eth1, это самое правильно решение)
Я к этому тоже пришел.

С imq заморачиваться не спешу, его только поставить - надо потрудиться ;) Думал от простого к сложному.

Share this post


Link to post
Share on other sites

 

IMQ ненадо всётаки наверное, оно ж ужо unsupported помоему... :)

Share this post


Link to post
Share on other sites
IMQ ненадо всётаки наверное, оно ж ужо unsupported помоему... :)
Да проект быстрее мертв, чем жив. Даже уже сайт не работает.

Спасибо за помощь, мужики. Все же думаю, надо разносить нат и шейпер по разным машинам и не мучаться.

Share this post


Link to post
Share on other sites
IMQ ненадо всётаки наверное, оно ж ужо unsupported помоему... :)
Да проект быстрее мертв, чем жив. Даже уже сайт не работает.

Спасибо за помощь, мужики. Все же думаю, надо разносить нат и шейпер по разным машинам и не мучаться.

у меня работает с НАТом, и давно. Проблем нет.

К теме - по сравнению с http://lartc.org/howto/lartc.adv-filter.hashing.html перед созданием таблицы один фильтр ещё надо:

 

tc filter add dev eth1 parent 1:0 prio 1 protocol ip u32 # <<<<<<<<

tc filter add dev eth1 parent 1:0 prio 1 handle 10: protocol ip u32 divisor 256

tc filter add dev eth1 protocol ip prio 2 u32 ht 10:a: match ip dst 192.168.200.10/32 flowid 1:100

tc filter add dev eth1 parent 1:0 protocol ip u32 ht 800:: match ip dst 192.168.200.0/24 hashkey mask 0x000000ff at 16 link 1

 

 

Share this post


Link to post
Share on other sites
у меня работает с НАТом, и давно. Проблем нет.

К теме - по сравнению с http://lartc.org/howto/lartc.adv-filter.hashing.html перед созданием таблицы один фильтр ещё надо:

 

tc filter add dev eth1 parent 1:0 prio 1 protocol ip u32 # <<<<<<<<

tc filter add dev eth1 parent 1:0 prio 1 handle 10: protocol ip u32 divisor 256

tc filter add dev eth1 protocol ip prio 2 u32 ht 10:a: match ip dst 192.168.200.10/32 flowid 1:100

tc filter add dev eth1 parent 1:0 protocol ip u32 ht 800:: match ip dst 192.168.200.0/24 hashkey mask 0x000000ff at 16 link 1

После добавления этой строки tc filter add dev eth1 parent 1:0 prio 1 protocol ip u32 ничего не изменилось.

Или у меня концептуально что-то не правильно, или карма такая. Других мыслей нет.

 

Вот что вскрытие показало

tc -s qdisc show dev ifb0
qdisc htb 1: root refcnt 2 r2q 10 default 20 direct_packets_stat 6
Sent 552 bytes 6 pkt (dropped 0, overlimits 0 requeues 0)
backlog 0b 0p requeues 0
qdisc sfq 100: parent 1:100 limit 127p quantum 1514b perturb 10sec
Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
backlog 0b 0p requeues 0

Edited by tokra

Share this post


Link to post
Share on other sites

Аххххааа, а сделайте-ка там default class и qdisc и на eth1 и на ifb0, а то у Вас может фильтр нематчится а дефолта нету.

Share this post


Link to post
Share on other sites
Аххххааа, а сделайте-ка там default class и qdisc и на eth1 и на ifb0, а то у Вас может фильтр нематчится а дефолта нету.
Таки да, все летит в default class

tc -s qdisc show dev ifb0
qdisc htb 1: root refcnt 2 r2q 10 default 20 direct_packets_stat 0
Sent 45118 bytes 150 pkt (dropped 0, overlimits 40 requeues 0)
backlog 0b 0p requeues 0
qdisc sfq 100: parent 1:100 limit 127p quantum 1514b perturb 10sec
Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
backlog 0b 0p requeues 0
qdisc sfq 20: parent 1:20 limit 127p quantum 1514b perturb 10sec
Sent 45118 bytes 150 pkt (dropped 0, overlimits 0 requeues 0)
backlog 0b 0p requeues 0

 

тогда интересно, где я напортачил?

И спид тест показал скорость дефаулт класса.

Но это все касается ifb0 - скорости отдачи, закачка работает как часы!!!

Edited by tokra

Share this post


Link to post
Share on other sites

Мне кажется я уже понял. Фильтры на ifb - там надо по src addr а не по dst!

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

 

echo 'client 096'

/sbin/tc class add dev ifb0 parent 1:104c classid 1:2096 hfsc ls m2 800kbit ul m2 800kbit

/sbin/tc class add dev ifb1 parent 1:104c classid 1:2096 hfsc ls m2 800kbit ul m2 800kbit

/sbin/tc qdisc add dev ifb0 parent 1:2096 handle 2096: sfq perturb 10

/sbin/tc qdisc add dev ifb1 parent 1:2096 handle 2096: sfq perturb 10

/sbin/tc filter add dev ifb1 protocol ip parent 1:0 prio 8 u32 ht 800: match ip src 192.168.211.96/32 flowid 1:2096

/sbin/tc filter add dev ifb0 protocol ip parent 1:0 prio 8 u32 ht 800: match ip dst 192.168.211.96/32 flowid 1:2096

/sbin/tc filter add dev ifb1 protocol ip parent 1:0 prio 8 u32 ht 800: match ip src 192.168.96.80/29 flowid 1:2096

/sbin/tc filter add dev ifb0 protocol ip parent 1:0 prio 8 u32 ht 800: match ip dst 192.168.96.80/29 flowid 1:2096

 

Edited by devicebusy

Share this post


Link to post
Share on other sites
Мне кажется я уже понял. Фильтры на ifb - там надо по src addr а не по dst!

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

 

echo 'client 096'

/sbin/tc class add dev ifb0 parent 1:104c classid 1:2096 hfsc ls m2 800kbit ul m2 800kbit

/sbin/tc class add dev ifb1 parent 1:104c classid 1:2096 hfsc ls m2 800kbit ul m2 800kbit

/sbin/tc qdisc add dev ifb0 parent 1:2096 handle 2096: sfq perturb 10

/sbin/tc qdisc add dev ifb1 parent 1:2096 handle 2096: sfq perturb 10

/sbin/tc filter add dev ifb1 protocol ip parent 1:0 prio 8 u32 ht 800: match ip src 192.168.211.96/32 flowid 1:2096

/sbin/tc filter add dev ifb0 protocol ip parent 1:0 prio 8 u32 ht 800: match ip dst 192.168.211.96/32 flowid 1:2096

/sbin/tc filter add dev ifb1 protocol ip parent 1:0 prio 8 u32 ht 800: match ip src 192.168.96.80/29 flowid 1:2096

/sbin/tc filter add dev ifb0 protocol ip parent 1:0 prio 8 u32 ht 800: match ip dst 192.168.96.80/29 flowid 1:2096

Самое интересно, что я пробовал и dst, и по src. Ладно, приеду домой, попробую переделать скрипт, как Вы написали здесь. Обязательно отпишусь. Спасибо еще раз за помощь!!!

Share this post


Link to post
Share on other sites
Мне кажется я уже понял. Фильтры на ifb - там надо по src addr а не по dst!

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

Спасибо огромное!!!!!!!!!!! Вы меня навели на правильный путь.

Скрипт значительно упростился

modprobe ifb
echo "11"
ip link set dev ifb0 up
echo "12"
tc qdisc add dev eth1 ingress
echo "13"
tc filter add dev eth1 parent ffff: protocol ip  u32 match u32 0 0 action mirred egress redirect dev ifb0
#
echo "14"
tc qdisc add dev ifb0 root handle 1: htb default 20
tc class add dev ifb0 parent 1: classid 1:1 htb rate 1024kbit
tc class add dev ifb0 parent 1:1 classid 1:100 htb rate 256kbit ceil 512kbit prio 2 quantum 1536
tc qdisc add dev ifb0 parent 1:100 handle 100: sfq perturb 10
tc filter add dev ifb0 protocol ip prio 2 u32 ht 800:: match ip src 192.168.200.10/32 flowid 1:100
#default
tc class add dev ifb0 parent 1:1 classid 1:20 htb rate 128kbit ceil 128kbit prio 2 quantum 1536
tc qdisc add dev ifb0 parent 1:20 handle 20: sfq perturb 10

 

 tc -s qdisc show dev ifb0
qdisc htb 1: root refcnt 2 r2q 10 default 20 direct_packets_stat 0
Sent 565879 bytes 1509 pkt (dropped 0, overlimits 795 requeues 0)
backlog 0b 0p requeues 0
qdisc sfq 100: parent 1:100 limit 127p quantum 1514b perturb 10sec
Sent 565879 bytes 1509 pkt (dropped 0, overlimits 0 requeues 0)
backlog 0b 0p requeues 0
qdisc sfq 20: parent 1:20 limit 127p quantum 1514b perturb 10sec
Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
backlog 0b 0p requeues 0

Теперь осталось создать еще парочку клиентов и погонять трафик.

ОГРОМНОЕ СПАСИБО!!!!!

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this