LINUX.ORG.RU
Ответ на: комментарий от Tyran

Поправка. Исходящий локальный трафик ограничивается, просто нужно было дисциплины назначать после подъема интерфейсов imq.

«текущий rate для любого класса» он отключен давно. Чтоб включить нужно в /sys/modules/sch_htb/parameters/htb_rate_est записать 1

Сейчас проверил на 3.18.3 - все нормально классифицируется.

~# iptables -t mangle -nvL
Chain FORWARD (policy ACCEPT 6600 packets, 13M bytes)
 pkts bytes target     prot opt in     out     source               destination         
40204   63M CLASSIFY   tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:5001 CLASSIFY set 1:20

Chain POSTROUTING (policy ACCEPT 6676 packets, 13M bytes)
 pkts bytes target     prot opt in     out     source               destination         
 6600   13M IMQ        tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:5001 IMQ: todev 0 
~# tc -s class show dev imq0
class htb 1:40 parent 1:4 leaf 40: prio 0 rate 40000Kbit ceil 40000Kbit burst 15Kb cburst 1600b 
 Sent 50399728 bytes 33604 pkt (dropped 9, overlimits 0 requeues 0) 
 rate 0bit 0pps backlog 0b 0p requeues 0 
 lended: 33604 borrowed: 0 giants: 0
 tokens: 47837 ctokens: 4837

class htb 1:4 root rate 100000Kbit ceil 100000Kbit burst 15337b cburst 1600b 
 Sent 63426308 bytes 42293 pkt (dropped 0, overlimits 0 requeues 0) 
 rate 0bit 0pps backlog 0b 0p requeues 0 
 lended: 0 borrowed: 0 giants: 0
 tokens: 19122 ctokens: 1935

class htb 1:20 parent 1:4 leaf 20: prio 0 rate 10000Kbit ceil 10000Kbit burst 15Kb cburst 1600b 
 Sent 13026580 bytes 8689 pkt (dropped 9, overlimits 0 requeues 0) 
 rate 0bit 0pps backlog 0b 0p requeues 0 
 lended: 8689 borrowed: 0 giants: 0
 tokens: 180158 ctokens: 8158
iperf показывает 10Мбит, а если убрать правило из forward, то 40

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

vel, супер. подправил /sys/module/sch_htb/parameters/htb_rate_est rate снова показывает. как долго этого не хватало :)


по поводу ht tables в новых ядрах. вот выдержка из скрипта. создается 1 дефолтный класс и для каждого ip свой класс с определенным rate. никаких ошибок в скрипте нет, на новых ядрах все классы и фильтры создаются также как на старых, специально проверил все. отличий никаких. но трафик почему-то попадает только в класс по умолчанию и больше никуда. патч imq из 3.15, где все работает в 3.16 ради интереса подправил сам. результат такой же.


EXTIF=imq0
INTIF=imq1
modprobe imq

/sbin/iptables -t mangle -A PREROUTING -i eth1 -m mark --mark 10 -j IMQ --todev 1 2> /dev/null
/sbin/iptables -t mangle -A POSTROUTING -o eth1 -m mark --mark 1 -j IMQ --todev 0 2> /dev/null
ip link set $EXTIF up 2> /dev/null
ip link set $INTIF up 2> /dev/null

$TC qdisc add dev $EXTIF root handle 1: htb default 4
$TC qdisc add dev $INTIF root handle 2: htb default 4


# default class
$TC class add dev $EXTIF parent 1:2 classid 1:4 htb rate 128kbit ceil 1mbit
$TC class add dev $INTIF parent 2:2 classid 2:4 htb rate 128kbit ceil 5mbit

# create class $ip
$TC class add dev $EXTIF parent 1:2 classid 1:$CLASSID htb rate ${S_OUT}kbit ceil ${S_OUTCEIL}kbit
$TC class add dev $INTIF parent 2:2 classid 2:$CLASSID htb rate ${S_IN}kbit ceil ${S_INCEIL}kbit

# create filter $ip
$TC filter add dev $EXTIF protocol ip parent 1:0 prio 100 u32 ht ${THANDLE}:${IPHEX}: \
        match ip src 192.168.${NET}.${IP} flowid 1:$CLASSID
$TC filter add dev $INTIF protocol ip parent 2:0 prio 100 u32 ht ${THANDLE}:${IPHEX}: \
        match ip dst 192.168.${NET}.${IP} flowid 2:$CLASSID

# generic ht tables
$TC filter add dev $EXTIF protocol ip parent 1:0 prio 100 u32 ht 800:: \
        match ip src 192.168.${NET}.0/24 \
        hashkey mask 0x000000ff at 12 \
        link ${THANDLE}:
$TC filter add dev $INTIF protocol ip parent 2:0 prio 100 u32 ht 800:: \
        match ip dst 192.168.${NET}.0/24 \
        hashkey mask 0x000000ff at 16 \
        link ${THANDLE}:

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

если честно, то меня напрягает «tc filter» и я обычно использую iptables "-j CLASSIFY" для классификации.

Кроме этого есть htb.init который удобен для простых вариантов.

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

Нет случайно патча imq для iptables из Development Snapshots? 1.4.21 с патчем imq собирается отлично, а с последними снепами трабл, ошибка при сборке после патча.

С tc filter наконец разобрался. Сам виноват, патчил новые ядра с imq BA вместо AB, каким-то образом ошибка в патч конфига ядра закралась :)

Kernel-3.19 + imq, iptables-1.4.21 + iproute2-3.19.0 все работает прекрасно. Для 3.19 изменения в патче imq минимальные.

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

нет. Мне все лень туда заглянуть. А ведь для "-j SET" там должны быть революционные изменения.

Там мой хак 2-х летней давности вроде как осознали - если для элемента набора есть 32-х битная метка, то ее можно либо в mark записать, либо ей класс задать.

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

Спасибо, кстати, за хак в SET. )) Очень полезным и удобным он оказался для расстановки приоритетов - одно правило заменило кучу tc filter.

stasn77
()
12 ноября 2015 г.
Ответ на: комментарий от vel

Как добавить в sys/module/sch_htb/parameters/htb_rate_est 1 на постоянной основе? Добавляю через rc.local. если добавить перед поднятием скрипта шейпера, то не добавляется. Если после, то добавляется, но при этом надо еще раз перезапустить шейпер чтобы счетчики активировались. Такой себе костыль.

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

варианты:

  • сначала загрузить sch_htb, а потом echo 1 >...htb_rate_est
  • загружать модуль с параметром
  • задать этот параметр в /etc/modprobe.d/ через options
vel ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.