Не получается шейпить траффик по 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
>[оверквотинг удален]
>Пробовал также
>
> 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
>[оверквотинг удален]
>обработать литературы, но уже неделю бьюсь и ничего. Подскажите, пожалуйста что
>я не так делаю?
>
>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
Дело в том, что u32 не видит пакетов после NAT (в моем случае это MASQUERADE). Лепил MARK в mangle PREROUTING и все равно ничего не получается. Может есть какой-то другой способ шейпинга?
>Дело в том, что u32 не видит пакетов после NAT (в моем
>случае это MASQUERADE). Лепил MARK в mangle PREROUTING и все равно
>ничего не получается. Может есть какой-то другой способ шейпинга?то, что после nat src не определяется - вполне нормально,
так и должно быть. на счастье метаданные пакета - например
fwmark не изменяются. за них и можно зацепиться.
Версия ядра какая ?
Ядро 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
давай-ка все-таки проясним следующие вещи:
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
1. На eth0
2. ppp0 - это pppoe. И ip ppp0 - это default gw
на первый взгляд все нормально. только вот непонятно - зачем 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
>
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 0internet-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: 22706class 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: 240383class 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: -14196class 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: -14184class 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
все должно работать, за исключением того, что
не было ни одного пакета на dst 192.168.0.3.
мы об этом правиле ведем речь ?
Наполовину решил.
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?
>Наполовину решил.
>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
Спасибо, Z0termaNN. Все получилось