The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Шейпинг траффика через tc qdisc и iptables MARK"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы OpenNET: Виртуальная конференция (Public)
Изначальное сообщение [ Отслеживать ]

"Шейпинг траффика через tc qdisc и iptables MARK"  
Сообщение от xwrs email on 10-Апр-09, 13:41 
Не получается шейпить траффик по IP или mac адресу. Я знаю, что на форуме 1024 раза обсуждалась эта тема и мне надо побольше обработать литературы, но уже неделю бьюсь и ничего. Подскажите, пожалуйста что я не так делаю?

tc filter add dev eth0 parent 1:0 protocol ip prio 100 handle 51 fw classid 1:51
tc class add dev eth0 parent 1:2 classid 1:51 htb rate 32Kbit ceil 64Kbit
tc qdisc add dev eth0 parent 1:51 handle 51 sfq perturb 10

А потом
iptables -t mangle -A FORWARD -d 192.168.100.3/24 -j MARK --set-mark 51

Пробовал также

tc qdisc add dev eth0 root handle 1: prio
tc qdisc add dev eth0 parent 1:1 handle 10: tbf rate 40kbit buffer 1600 limit 3000
tc qdisc add dev eth0 parent 1:2 handle 20: tbf rate 80kbit buffer 1600 limit 3000
Но скорость падала еще до ввода
tc filter add dev eth0 parent 1: protocol ip prio 1 u32 match ip src 192.168.100.3/24 flowid 1:1

Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Шейпинг траффика через tc qdisc и iptables MARK"  
Сообщение от sonkilla (ok) on 11-Апр-09, 21:59 
>[оверквотинг удален]
>Пробовал также
>
> tc qdisc add dev eth0 root handle 1: prio
> tc qdisc add dev eth0 parent 1:1 handle 10: tbf rate
>40kbit buffer 1600 limit 3000
> tc qdisc add dev eth0 parent 1:2 handle 20: tbf rate
>80kbit buffer 1600 limit 3000
>Но скорость падала еще до ввода
> tc filter add dev eth0 parent 1: protocol ip prio 1
>u32 match ip src 192.168.100.3/24 flowid 1:1

попробуйте cbq

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Шейпинг траффика через tc qdisc и iptables MARK"  
Сообщение от Z0termaNN (ok) on 12-Апр-09, 11:31 
>[оверквотинг удален]
>обработать литературы, но уже неделю бьюсь и ничего. Подскажите, пожалуйста что
>я не так делаю?
>
>tc filter add dev eth0 parent 1:0 protocol ip prio 100 handle
>51 fw classid 1:51
>tc class add dev eth0 parent 1:2 classid 1:51 htb rate 32Kbit
>ceil 64Kbit
>tc qdisc add dev eth0 parent 1:51 handle 51 sfq perturb 10
>
>

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

>А потом
>iptables -t mangle -A FORWARD -d 192.168.100.3/24 -j MARK --set-mark 51
>
>Пробовал также
>
> tc qdisc add dev eth0 root handle 1: prio
> tc qdisc add dev eth0 parent 1:1 handle 10: tbf rate
>40kbit buffer 1600 limit 3000

конечно будет падать еще до ввода фильтра, т.к. по умолчанию prio
использует поле qos в качестве  критерия класса и скорее всего пакеты
попадали в какую-нибудь из объявленных очередей. в таком разе нужно объявлять
- либо default фильтр, который посылает все, что не классифицировали в default очередь,
- либо сделать default очередь и изменить priomap
примерно так:

tc -batch <<EOF
qdisc add dev eth0 root handle 1: prio bands 3 priomap 2 2 2
qdisc add dev eth0 parent 1:1 handle 10: tbf rate 40kbit ...
qdisc add dev eth0 parent 1:2 handle 20: tbf rate 80 kbit ...
qdisc add dev eth0 parent 1:3 handle 30: sfq perturn 5
filter add dev eth0 parent 1: protocol ip prio 1 u32 match ip src .....
...
EOF

> tc qdisc add dev eth0 parent 1:2 handle 20: tbf rate
>80kbit buffer 1600 limit 3000
>Но скорость падала еще до ввода
> tc filter add dev eth0 parent 1: protocol ip prio 1
>u32 match ip src 192.168.100.3/24 flowid 1:1

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "Шейпинг траффика через tc qdisc и iptables MARK"  
Сообщение от xwrs email(ok) on 13-Апр-09, 16:13 
Дело в том, что u32 не видит пакетов после NAT (в моем случае это MASQUERADE). Лепил MARK в mangle PREROUTING и все равно ничего не получается. Может есть какой-то другой способ шейпинга?
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "Шейпинг траффика через tc qdisc и iptables MARK"  
Сообщение от Z0termaNN (ok) on 13-Апр-09, 19:01 
>Дело в том, что u32 не видит пакетов после NAT (в моем
>случае это MASQUERADE). Лепил MARK в mangle PREROUTING и все равно
>ничего не получается. Может есть какой-то другой способ шейпинга?

то, что после nat src  не определяется - вполне нормально,
так и должно быть. на счастье метаданные пакета - например
fwmark  не изменяются. за них и можно зацепиться.
Версия ядра какая ?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "Шейпинг траффика через tc qdisc и iptables MARK"  
Сообщение от xwrs email(ok) on 14-Апр-09, 12:56 
Ядро linux-2.6.25. Попробовал пакет htbinit. Там конфигурационные файлы преобразовуются в правила tc, но все равно фильтрация через u32. Я пробовал
iptables -t mangle -A PREROUTING -s 192.168.100.3 -j MARK --set-mark 20
iptables -t mangle -A PREROUTING -s 192.168.100.3 -j RETURN
и смотрел iptables -t mangle -nvL - пакеты маркируются, но скорость не падает :(
Протокол компиляции
/sbin/tc qdisc del dev eth1 root
/sbin/tc qdisc add dev eth1 root handle 1 htb default 30 r2q 100

/sbin/tc qdisc del dev eth0 root
/sbin/tc qdisc add dev eth0 root handle 1 htb default 30 r2q 100

/sbin/tc class add dev eth1 parent 1: classid 1:2 htb rate 1024Kbit

/sbin/tc class add dev eth1 parent 1:2 classid 1:10 htb rate 256Kbit ceil 512Kbit prio 10
/sbin/tc qdisc add dev eth1 parent 1:10 handle 10 sfq perturb 10
/sbin/tc filter add dev eth1 parent 1:0 protocol ip prio 100 u32 match ip dport 22 0xffff classid 1:10

/sbin/tc class add dev eth1 parent 1:2 classid 1:30 htb rate 512Kbit ceil 1024Kbit prio 30
/sbin/tc qdisc add dev eth1 parent 1:30 handle 30 sfq perturb 10

/sbin/tc class add dev eth0 parent 1: classid 1:2 htb rate 1024Kbit

/sbin/tc class add dev eth0 parent 1:2 classid 1:10 htb rate 256Kbit ceil 512Kbit prio 10
/sbin/tc qdisc add dev eth0 parent 1:10 handle 10 sfq perturb 10
/sbin/tc filter add dev eth0 parent 1:0 protocol ip prio 100 u32 match ip sport 22 0xffff classid 1:10

/sbin/tc class add dev eth0 parent 1:2 classid 1:20 htb rate 21Kbit ceil 52Kbit prio 20
/sbin/tc qdisc add dev eth0 parent 1:20 handle 20 sfq perturb 10
/sbin/tc filter add dev eth0 parent 1:0 protocol ip prio 100 u32 match ip dst 192.168.0.3 classid 1:20

/sbin/tc class add dev eth0 parent 1:2 classid 1:30 htb rate 512Kbit ceil 1024Kbit prio 30
/sbin/tc qdisc add dev eth0 parent 1:30 handle 30 sfq perturb 10

У меня
eth0<-------->(локальная сеть)
eth1<-------->ppp0

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

6. "Шейпинг траффика через tc qdisc и iptables MARK"  
Сообщение от Z0termaNN (ok) on 14-Апр-09, 13:22 
давай-ка все-таки проясним следующие вещи:
1. на каком интерфейсе требуется ограничивать исходящую скорость ? (т.е. где она не работает)
2. ppp0 - это pppoe или pptp ? я итак понимаю, что это как раз и есть default route.
у меня закралось подозрение, что пакеты уходят внутри туннеля ppp и попытки ограничения
трафика на eth1 естественно ни к чему не приведут.

>[оверквотинг удален]
>match ip dst 192.168.0.3 classid 1:20
>
>/sbin/tc class add dev eth0 parent 1:2 classid 1:30 htb rate 512Kbit
>ceil 1024Kbit prio 30
>/sbin/tc qdisc add dev eth0 parent 1:30 handle 30 sfq perturb 10
>
>
>У меня
>eth0<-------->(локальная сеть)
>eth1<-------->ppp0

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

7. "Шейпинг траффика через tc qdisc и iptables MARK"  
Сообщение от xwrs email(ok) on 14-Апр-09, 13:35 
1. На eth0
2. ppp0 - это pppoe. И ip ppp0 - это default gw
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

8. "Шейпинг траффика через tc qdisc и iptables MARK"  
Сообщение от Z0termaNN (ok) on 14-Апр-09, 13:54 
на первый взгляд все нормально. только вот непонятно - зачем r2q выставил
такое значение ? давай-ка попробуем:
1. r2q - по умолчанию,
2. tc -d -s qdisc sh dev eth0
   tc -d -s filter sh dev eth0
   tc -d -s class sh dev eth0

>1. На eth0
>2. ppp0 - это pppoe. И ip ppp0 - это default gw
>

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

9. "Шейпинг траффика через tc qdisc и iptables MARK"  
Сообщение от xwrs email(ok) on 14-Апр-09, 14:02 
internet-server htb # tc -d -s qdisc sh dev eth0
qdisc htb 1: root r2q 10 default 30 direct_packets_stat 13 ver 3.17
Sent 1506079 bytes 1192 pkt (dropped 0, overlimits 1984 requeues 0)
rate 0bit 0pps backlog 0b 10p requeues 0
qdisc sfq 10: parent 1:10 limit 127p quantum 1514b flows 127/1024 perturb 10sec
Sent 40030 bytes 47 pkt (dropped 0, overlimits 0 requeues 0)
rate 0bit 0pps backlog 0b 0p requeues 0
qdisc sfq 20: parent 1:20 limit 127p quantum 1514b flows 127/1024 perturb 10sec
Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
rate 0bit 0pps backlog 0b 0p requeues 0
qdisc sfq 30: parent 1:30 limit 127p quantum 1514b flows 127/1024 perturb 10sec
Sent 1456511 bytes 1132 pkt (dropped 0, overlimits 0 requeues 0)
rate 0bit 0pps backlog 14274b 10p requeues 0

internet-server htb # tc -d -s filter sh dev eth0
filter parent 1: protocol ip pref 100 u32
filter parent 1: protocol ip pref 100 u32 fh 800: ht divisor 1
filter parent 1: protocol ip pref 100 u32 fh 800::800 order 2048 key ht 800 bkt 0 flowid 1:10  (rule hit 3381 success 61)
  match 00160000/ffff0000 at 20 (success 61 )
filter parent 1: protocol ip pref 100 u32 fh 800::801 order 2049 key ht 800 bkt 0 flowid 1:20  (rule hit 3316 success 0)
  match c0a80003/ffffffff at 16 (success 0 )

internet-server htb # tc -d -s class sh dev eth0
class htb 1:10 parent 1:2 leaf 10: prio 7 quantum 3200 rate 256000bit ceil 512000bit burst 1599b/8 mpu 0b overhead 0b cburst 1599b/8 mpu 0b overhead 0b level 0
Sent 43868 bytes 70 pkt (dropped 0, overlimits 0 requeues 0)
rate 1608bit 1pps backlog 0b 0p requeues 0
lended: 65 borrowed: 5 giants: 0
tokens: 45411 ctokens: 22706

class htb 1:20 parent 1:2 leaf 20: prio 7 quantum 1000 rate 21000bit ceil 52000bit burst 1599b/8 mpu 0b overhead 0b cburst 1599b/8 mpu 0b overhead 0b level 0
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: 595237 ctokens: 240383

class htb 1:2 root rate 1024Kbit ceil 1024Kbit burst 1599b/8 mpu 0b overhead 0b cburst 1599b/8 mpu 0b overhead 0b level 7
Sent 6113064 bytes 5721 pkt (dropped 0, overlimits 0 requeues 0)
rate 983408bit 129pps backlog 0b 0p requeues 0
lended: 2866 borrowed: 0 giants: 0
tokens: -14196 ctokens: -14196

class htb 1:30 parent 1:2 leaf 30: prio 7 quantum 6400 rate 512000bit ceil 1024Kbit burst 1599b/8 mpu 0b overhead 0b cburst 1599b/8 mpu 0b overhead 0b level 0
Sent 6070816 bytes 5653 pkt (dropped 0, overlimits 0 requeues 0)
rate 976248bit 128pps backlog 0b 2p requeues 0
lended: 2790 borrowed: 2861 giants: 0
tokens: -45285 ctokens: -14184

class sfq 30:356 parent 30:
(dropped 0, overlimits 0 requeues 0)
backlog 0b 1p requeues 0
class sfq 30:373 parent 30:
(dropped 0, overlimits 0 requeues 0)
backlog 0b 1p requeues 0

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

10. "Шейпинг траффика через tc qdisc и iptables MARK"  
Сообщение от Z0termaNN (ok) on 14-Апр-09, 16:36 
все должно работать, за исключением того, что
не было ни одного пакета на dst 192.168.0.3.
мы об этом правиле ведем речь ?
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

11. "Шейпинг траффика через tc qdisc и iptables MARK"  
Сообщение от xwrs email(ok) on 14-Апр-09, 17:08 
Наполовину решил.
http://blog.kovyrin.net/2006/04/06/5min-guide-to-linux-shapi.../
http://en.gentoo-wiki.com/wiki/HTB

Вроде режет. Теперь интересует как порезать по МАСам

Как впарить МАС в
tc filter add dev eth0 parent 1:0 protocol ip prio 100 u32 match ip dst 192.168.100.0/32 classid 1:20?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

12. "Шейпинг траффика через tc qdisc и iptables MARK"  
Сообщение от Z0termaNN (ok) on 14-Апр-09, 18:14 
>Наполовину решил.
>http://blog.kovyrin.net/2006/04/06/5min-guide-to-linux-shapi.../
>http://en.gentoo-wiki.com/wiki/HTB
>
>Вроде режет. Теперь интересует как порезать по МАСам
>
>Как впарить МАС в
>tc filter add dev eth0 parent 1:0 protocol ip prio 100 u32
>match ip dst 192.168.100.0/32 classid 1:20?

легче конечно будет установить fwmark на пакет при помощи iptables
и уже потом анализировать при помощи  tc filter,
но возможен и такой вариант:

tc filter add dev eth0 parent 1:0 protocol ip prio 100 u32 match \
            u16 0x0800 0xFFFF at -2 \
            match u16 0xM4M5 0xFFFF at -4
            match u32 0xM0M1M2M3  0xFFFFFFFF at -8
            flowid 1:20

соответственно
- 0x0800 - eth протокол - ETH_P_IP (см. /usr/include/linux/if_ether.h)
- M0:M1:M2:M3:M4:M5 - mac address

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

13. "Шейпинг траффика через tc qdisc и iptables MARK"  
Сообщение от xwrs email(ok) on 15-Апр-09, 11:28 
Спасибо, Z0termaNN. Все получилось
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Спонсоры:
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2022 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру