Приоритезация.Выбор подходящего шейпинга,CBQ.init или HTB.init (И другие проблеммы связанные с этим...)

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

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

shyrikos
Сообщения: 76

Приоритезация.Выбор подходящего шейпинга,CBQ.init или HTB.init

Сообщение shyrikos »

Следующая задача:
имеется асинхронное соединение с Интернетом со скоростью 4000 kbit\s - входящая, и 128+128+128 kbit\s - исходящая(3 турбо модема).
Сервер: suse 10.3(в планах gentoo). поднят NAT и благополучно работает. Распределение нагрузки между 3 модемами.
Требуется:
1)порезать скорость исходящую(с точки зрения пользователя) до "не более 64 kbit\s" , и входящую (с точки зрения пользователя) "не более 512 kbit\s"
2)сделать динамическое распределение пропускной способности канала. Тобищь распределить по классам трафик и установить разные приоритеты.
3)поставить все это в автозапуск.

Пока что мои наработки по решению задач и сразу вопросы:
1)Ни как ни могу определиться, что использовать для первой задачи CBQ.init или HTB.init - google находит примеры 5 летней давности.
что лучше CBQ.init или HTB.init?
по CBQ.init гугл дал больще результата:

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

#................................---------..............192.1 68.1.0 ...
#ВНЕШНИЙ КАНАЛ ----- eth1-| linux |-eth0------[локальная сеть]
#................................---------................... ...... ...

#трафик к клиенту поднимаем на eth0 смотрящей в сеть
#cbq-512.client-out
DEVICE=eth0,10Mbit,1Mbit
RATE=512Kbit
WEIGHT=50Kbit
PRIO=5
RULE=192.168.1.0/24

# трафик от клиента привязываем к интерфейсу eth1 смотрящей
# на следующий комп на котором стоят исходящие турбо-модемы.
# предполагаю так делать, чтобы не гонять трафик за зря с одного
# компа шлюза на другой с большой скоростью.
#cbq-64.client-in
DEVICE=eth1,10Mbit,1Mbit
RATE=64Kbit
WEIGHT=5Kbit
PRIO=5
RULE=192.168.1.0/24,

Из-за того что правило на eth1 после Nat-a, проблем быть не должно?
файлы cbq-512.client-out и cbq-64.client-in просто кидаем в папку с CBQ.init и все?


2)скорость, однако порезали, но с таким каналом исходящим далеко не уйдешь...
нужно трафик разбить на классы. Разбивать на классы трафик я буду непосредственно на каждом модеме находящемся на втором компе шлюза .Напомню, что весь трафик пришедший с первого компа шлюза(тот который мы резали в пункте 1) распределен равномерно между всеми модемами. Скрипты будут абсолютно идентичные кроме номера интерфейсов,через которые работают модемы. Опять же стает вопрос HTB или CBQ?
склоняюсь к htb, так как он проще. И на ядре 2.6 не нужно не каких патчей, да?
что меньше жрет ресурсов не знаю...
Решение задачи не раз приводилось в интернете. я нашел вот такой вариант, пока что даже не пробовал но вроде все ясно:

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

#!/bin/sh

IPTABLES=/sbin/iptables
TC=/sbin/tc
DEV_IN=eth0
RATE_IN=360

case "$1" in
start)
########################## IN #############################
$TC qdisc add dev $DEV_IN root handle 1:0 htb default 99

$TC class add dev $DEV_IN parent 1:0 classid 1:1 htb rate ${RATE_IN}kbit ceil ${RATE_IN}kbit

$TC class add dev $DEV_IN parent 1:1 classid 1:10 htb rate $[$RATE_IN/8]kbit ceil ${$RATE_IN/2}kbit prio 0
$TC class add dev $DEV_IN parent 1:1 classid 1:25 htb rate $[$RATE_IN/8]kbit ceil ${$RATE_IN/2}kbit prio 1
$TC class add dev $DEV_IN parent 1:1 classid 1:50 htb rate $[$RATE_IN/4]kbit ceil ${RATE_IN}kbit prio 2
$TC class add dev $DEV_IN parent 1:1 classid 1:75 htb rate $[$RATE_IN/4]kbit ceil ${RATE_IN}kbit prio 3
$TC class add dev $DEV_IN parent 1:1 classid 1:99 htb rate $[$RATE_IN/4]kbit ceil ${RATE_IN}kbit prio 4

$TC qdisc add dev $DEV_IN parent 1:10 handle 10: pfifo limit 5
$TC qdisc add dev $DEV_IN parent 1:25 handle 25: sfq perturb 10
$TC qdisc add dev $DEV_IN parent 1:50 handle 50: sfq perturb 10
$TC qdisc add dev $DEV_IN parent 1:75 handle 75: sfq perturb 10
$TC qdisc add dev $DEV_IN parent 1:99 handle 99: sfq perturb 10


#### Маркировка пакетов

# добавить цепочку MYSHAPER-IN в таблицу mangle - сейчас мы настроим таблицу,которую будем
# использовать для фильтрациии установки fwmark
iptables -t mangle -N MYSHAPER-IN
iptables -t mangle -I POSTROUTING -o $DEV_IN -j MYSHAPER-IN

# маркируем пакеты с помощью fwmark - устанавливаем значения 10-99 в зависимости от
# нужного класса. Высший приоритет - 10.

# Низкоприоритетный трафик
iptables -t mangle -A MYSHAPER-IN -p tcp --sport 0:1024 -j MARK --set-mark 99
iptables -t mangle -A MYSHAPER-IN -p tcp --dport 0:1024 -j MARK --set-mark 99

# интернет-пейджер aol
iptables -t mangle -A MYSHAPER-IN -p tcp --sport 5190 -j MARK --set-mark 75

# irc
iptables -t mangle -A MYSHAPER-IN -p tcp --sport 6667 -j MARK --set-mark 75
iptables -t mangle -A MYSHAPER-IN -p tcp --sport 9944 -j MARK --set-mark 75

# ICMP (ping) - высокий приоритет,
# будем удивлять друзей
iptables -t mangle -A MYSHAPER-IN -p icmp -j MARK --set-mark 25

# распознавание имен DNS (маленькие пакеты)
iptables -t mangle -A MYSHAPER-IN -p udp -j MARK --set-mark 25

# secure shell
iptables -t mangle -A MYSHAPER-IN -p tcp --dport 22 -j MARK --set-mark 10
iptables -t mangle -A MYSHAPER-IN -p tcp --sport 22 -j MARK --set-mark 10

# telnet (ew...)
iptables -t mangle -A MYSHAPER-IN -p tcp --dport 23 -j MARK --set-mark 25
iptables -t mangle -A MYSHAPER-IN -p tcp --sport 23 -j MARK --set-mark 25

# маленькие пакеты, скорее всего ACK-пакеты
iptables -t mangle -A MYSHAPER-IN -p tcp -m length --length :64 -j MARK --set-mark 25
#тут ускрил кого нибудь в офисе
iptables -t mangle -A MYSHAPER-IN -d 192.168.1.7 -j MARK --set-mark 10

# избыточно - смаркировать все неотмаркированые пакеты как 99 (низкий проиритет)
iptables -t mangle -A MYSHAPER-IN -m mark --mark 0 -j MARK --set-mark 99

$TC filter add dev $DEV_IN parent 1:0 prio 0 protocol ip handle 10 fw flowid 1:10
$TC filter add dev $DEV_IN parent 1:0 prio 1 protocol ip handle 25 fw flowid 1:25
$TC filter add dev $DEV_IN parent 1:0 prio 2 protocol ip handle 50 fw flowid 1:50
$TC filter add dev $DEV_IN parent 1:0 prio 3 protocol ip handle 75 fw flowid 1:75
$TC filter add dev $DEV_IN parent 1:0 prio 4 protocol ip handle 99 fw flowid 1:99

echo "Shaper on $DEV_IN started ($RATE_IN kbit/s)"
;;
stop)
tc qdisc del dev $DEV_IN root 2> /dev/null > /dev/null
tc qdisc del dev $DEV_OUT root 2> /dev/null > /dev/null
iptables -t mangle -D POSTROUTING -o $DEV_OUT -j MYSHAPER-OUT 2> /dev/null > /dev/null
iptables -t mangle -F MYSHAPER-OUT 2> /dev/null > /dev/null
iptables -t mangle -X MYSHAPER-OUT 2> /dev/null > /dev/null
iptables -t mangle -D POSTROUTING -o $DEV_IN -j MYSHAPER-IN 2> /dev/null > /dev/null
iptables -t mangle -F MYSHAPER-IN 2> /dev/null > /dev/null
iptables -t mangle -X MYSHAPER-IN 2> /dev/null > /dev/null

echo "Shaper removed"
;;
restart)
$0 stop
$0 start
;;
status)

echo "[qdisc IN]"
$TC -s qdisc show dev $DEV_IN
echo "[class IN]"
$TC -s class show dev $DEV_IN
echo "[filter IN]"
$TC -s filter show dev $DEV_IN
;;
*)
echo "Usage: $0 {start|stop|restart|status}"
;;
esac

exit 0

Вот, и так на каждый модем.
3) Возникает вопрос куда положить скрипт из 2-го пункта?как запускать автоматом 1 пункт и второй?
Спасибо сказали:
Аватара пользователя
Olden Gremlin
Сообщения: 365
Статус: RAP22-RIPE
ОС: Debian GNU/Linux Wheezy

Re: Приоритезация.Выбор подходящего шейпинга,CBQ.init или HTB.init

Сообщение Olden Gremlin »

из личного опыта, да и пишут об этом все кому не лень.
cbq - старее, htb - новее.
htb типа более точно шейпит и... он проще настраивается, ежели все делать в ручную ;)
так, что на один из вышеприведенных вопросов я бы ответил точно - HTB! :)
«Когда у общества нет цветовой дифференциации штанов — то нет цели!»
nic-hdl: RAP22-RIPE
Спасибо сказали:
shyrikos
Сообщения: 76

Re: Приоритезация.Выбор подходящего шейпинга,CBQ.init или HTB.init

Сообщение shyrikos »

Olden Gremlin писал(а):
14.02.2008 09:04
из личного опыта, да и пишут об этом все кому не лень.
cbq - старее, htb - новее.
htb типа более точно шейпит и... он проще настраивается, ежели все делать в ручную ;)
так, что на один из вышеприведенных вопросов я бы ответил точно - HTB! :)

а не можешь,ссылочки на примеры настройки HTB.init дать?
хотя задачу которую я ставлю для CBQ.init достаточно проста и прозрачна и настраивается в 5 строчек,и думаю разницы большой не будет если настраивать HTB.init.Тут вопрос в минимальной загрузке системы и в надежности.
И вообще возможно ли задачу "2" реализовать на каком нибудь из этих скриптов?
Спасибо сказали:
Аватара пользователя
Olden Gremlin
Сообщения: 365
Статус: RAP22-RIPE
ОС: Debian GNU/Linux Wheezy

Re: Приоритезация.Выбор подходящего шейпинга,CBQ.init или HTB.init

Сообщение Olden Gremlin »

shyrikos писал(а):
14.02.2008 10:06
а не можешь,ссылочки на примеры настройки HTB.init дать?

ссылочки не дам. но думается, что гугль поможет. да и на этом форму поищи. где-то полгода назад тема была курилась.
а сам я для *nix использую tcng. поисп по этому форума даст достаточно пищи для размышлений. ;)
думаю, что если с tcng достаточно разберешься, то решение для "2" найдется само собой... подсказать больше не могу, так как подобным не страдал :(
«Когда у общества нет цветовой дифференциации штанов — то нет цели!»
nic-hdl: RAP22-RIPE
Спасибо сказали:
shyrikos
Сообщения: 76

Re: Приоритезация.Выбор подходящего шейпинга,CBQ.init или HTB.init

Сообщение shyrikos »

а задача 1, которая на скрипте cbq.init - не работает...не знаю почему,но не работает!а вот вторая прекрасно работает!
как же все таки можно порезать на каждого пользователя скорость без всяких скриптов,а просто,как во втором случае!
Спасибо сказали:
shyrikos
Сообщения: 76

Re: Приоритезация.Выбор подходящего шейпинга,CBQ.init или HTB.init

Сообщение shyrikos »

как правильно сделать,чтобы cbq.init работал?
я делаю вот так,и он не работает :wacko: :
1)скачиваю скрипт
2)создаю два файла
cbq-512.client-out
cbq-64.client-in
3) помещаю их в папку /etc/sysconfig/cbq
4) запускаю скрипт командой bash cbq.init start.

не чего в итоге не работает... :wacko:
в листинге скрипта есть такие строки:

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

TC=/sbin/tc
IP=/sbin/ip

что должно там лежать?
Спасибо сказали:
shyrikos
Сообщения: 76

Re: Приоритезация.Выбор подходящего шейпинга,CBQ.init или HTB.init

Сообщение shyrikos »

Как вообще лучще организовать "канал(входящий\исходяящий)" для каждого пользователя из сети?чтобы каждый хост из сети 192.168.1.0/24 имел свой канал 1024Kbit/s -входящего и 64Kbit/s - исходящего?Какими средствами это сделать лучще?
Спасибо сказали:
zkrvova
Сообщения: 280

Re: Приоритезация.Выбор подходящего шейпинга,CBQ.init или HTB.init

Сообщение zkrvova »

Olden Gremlin писал(а):
14.02.2008 09:04
из личного опыта, да и пишут об этом все кому не лень.
cbq - старее, htb - новее.
htb типа более точно шейпит и... он проще настраивается, ежели все делать в ручную ;)
так, что на один из вышеприведенных вопросов я бы ответил точно - HTB! :)


Как может HTB легче настраиваться если его скрипт полностью сделан из скрипта CBQ. Причём для CBQ куча есть описаний с премерами, а для HTB вообще я не нашёл.
Спасибо сказали:
shyrikos
Сообщения: 76

Re: Приоритезация.Выбор подходящего шейпинга,CBQ.init или HTB.init

Сообщение shyrikos »

а почему тогда он не хочет фунициклировать?вроде все по мануалу делаю....
Спасибо сказали:
zkrvova
Сообщения: 280

Re: Приоритезация.Выбор подходящего шейпинга,CBQ.init или HTB.init

Сообщение zkrvova »

shyrikos писал(а):
22.02.2008 12:07
а почему тогда он не хочет фунициклировать?вроде все по мануалу делаю....


Во первых так как у тебя NAT то на выходе из компа идёт уже не внутренний адрес, а твой внешний. Я конечно не проверял но мне кажется что так не пройдёт.

Во вторых может всётаки надо добавить 0064, вместо просто 64, может это и не кретично, незнаю не проверял.

И в третих, ты скрипт запускал?

cbq start

Ошибки выдавались?
Спасибо сказали:
shyrikos
Сообщения: 76

Re: Приоритезация.Выбор подходящего шейпинга,CBQ.init или HTB.init

Сообщение shyrikos »

Вообщем пока прищел к такому решению.
- Имеем eth0 - локальная сеть, eth1 - глобальная сеть
- nat

скорость исходящего канала низкая,поэтому создаем правило приоритезации на интерфейсе "eth1 - глобальная сеть"(РАБОТАЕТ):

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

#!/bin/sh

IPTABLES=/sbin/iptables
#TC=/sbin/tc
DEV_IN=eth1
RATE_IN=64
RATES_INS=32

case "$1" in
start)
########################## IN #############################
tc qdisc add dev $DEV_IN root handle 1:0 htb default 99

tc class add dev $DEV_IN parent 1:0 classid 1:1 htb rate ${RATE_IN}kbit ceil ${RATE_IN}kbit

tc class add dev $DEV_IN parent 1:1 classid 1:10 htb rate $[$RATE_IN/6]kbit ceil $[$RATE_IN/2]kbit prio 0
tc class add dev $DEV_IN parent 1:1 classid 1:25 htb rate $[$RATE_IN/6]kbit ceil $[$RATE_IN/2]kbit prio 1
tc class add dev $DEV_IN parent 1:1 classid 1:50 htb rate $[$RATE_IN/4]kbit ceil ${RATE_IN}kbit prio 2
tc class add dev $DEV_IN parent 1:1 classid 1:75 htb rate $[$RATE_IN/4]kbit ceil ${RATE_IN}kbit prio 3
tc class add dev $DEV_IN parent 1:1 classid 1:99 htb rate $[$RATE_IN/4]kbit ceil ${RATE_IN}kbit prio 4

tc qdisc add dev $DEV_IN parent 1:10 handle 10: pfifo limit 5
tc qdisc add dev $DEV_IN parent 1:25 handle 25: sfq perturb 10
tc qdisc add dev $DEV_IN parent 1:50 handle 50: sfq perturb 10
tc qdisc add dev $DEV_IN parent 1:75 handle 75: sfq perturb 10
tc qdisc add dev $DEV_IN parent 1:99 handle 99: sfq perturb 10


#### Маркировка пакетов

# добавить цепочку MYSHAPER-IN в таблицу mangle - сейчас мы настроим таблицу,которую будем
# использовать для фильтрациии установки fwmark
iptables -t mangle -N MYSHAPER-IN
iptables -t mangle -I POSTROUTING -o $DEV_IN -j MYSHAPER-IN

# маркируем пакеты с помощью fwmark - устанавливаем значения 10-99 в зависимости от
# нужного класса. Высший приоритет - 10.

# Низкоприоритетный трафик
iptables -t mangle -A MYSHAPER-IN -p tcp --sport 0:1024 -j MARK --set-mark 99
iptables -t mangle -A MYSHAPER-IN -p tcp --dport 0:1024 -j MARK --set-mark 99

# интернет-пейджер aol
iptables -t mangle -A MYSHAPER-IN -p tcp --sport 5190 -j MARK --set-mark 75
iptables -t mangle -A MYSHAPER-IN -p tcp --dport 5190 -j MARK --set-mark 75

# irc
iptables -t mangle -A MYSHAPER-IN -p tcp --sport 6667 -j MARK --set-mark 75
iptables -t mangle -A MYSHAPER-IN -p tcp --sport 9944 -j MARK --set-mark 75
iptables -t mangle -A MYSHAPER-IN -p tcp --dport 6667 -j MARK --set-mark 75
iptables -t mangle -A MYSHAPER-IN -p tcp --dport 9944 -j MARK --set-mark 75

# ICMP (ping) - высокий приоритет,
# будем удивлять друзей
iptables -t mangle -A MYSHAPER-IN -p icmp -j MARK --set-mark 25

# распознавание имен DNS (маленькие пакеты)
iptables -t mangle -A MYSHAPER-IN -p udp -j MARK --set-mark 25

# secure shell
iptables -t mangle -A MYSHAPER-IN -p tcp --dport 22 -j MARK --set-mark 10
iptables -t mangle -A MYSHAPER-IN -p tcp --sport 22 -j MARK --set-mark 10

# telnet (ew...)
iptables -t mangle -A MYSHAPER-IN -p tcp --dport 23 -j MARK --set-mark 25
iptables -t mangle -A MYSHAPER-IN -p tcp --sport 23 -j MARK --set-mark 25

# маленькие пакеты, скорее всего ACK-пакеты
iptables -t mangle -A MYSHAPER-IN -p tcp -m length --length :64 -j MARK --set-mark 25
#тут ускрил кого нибудь в офисе
iptables -t mangle -A MYSHAPER-IN -d 192.168.0.5 -j MARK --set-mark 10

# избыточно - смаркировать все неотмаркированые пакеты как 99 (низкий проиритет)
iptables -t mangle -A MYSHAPER-IN -m mark --mark 0 -j MARK --set-mark 99

tc filter add dev $DEV_IN parent 1:0 prio 0 protocol ip handle 10 fw flowid 1:10
tc filter add dev $DEV_IN parent 1:0 prio 1 protocol ip handle 25 fw flowid 1:25
tc filter add dev $DEV_IN parent 1:0 prio 2 protocol ip handle 50 fw flowid 1:50
tc filter add dev $DEV_IN parent 1:0 prio 3 protocol ip handle 75 fw flowid 1:75
tc filter add dev $DEV_IN parent 1:0 prio 4 protocol ip handle 99 fw flowid 1:99

echo "Shaper on $DEV_IN started ($RATE_IN kbit/s)"
;;
stop)
tc qdisc del dev $DEV_IN root 2> /dev/null > /dev/null
tc qdisc del dev $DEV_OUT root 2> /dev/null > /dev/null
iptables -t mangle -D POSTROUTING -o $DEV_OUT -j MYSHAPER-OUT 2> /dev/null > /dev/null
iptables -t mangle -F MYSHAPER-OUT 2> /dev/null > /dev/null
iptables -t mangle -X MYSHAPER-OUT 2> /dev/null > /dev/null
iptables -t mangle -D POSTROUTING -o $DEV_IN -j MYSHAPER-IN 2> /dev/null > /dev/null
iptables -t mangle -F MYSHAPER-IN 2> /dev/null > /dev/null
iptables -t mangle -X MYSHAPER-IN 2> /dev/null > /dev/null

echo "Shaper removed"
;;
restart)
$0 stop
$0 start
;;
status)

echo "[qdisc IN]"
tc -s qdisc show dev $DEV_IN
echo "[class IN]"
tc -s class show dev $DEV_IN
echo "[filter IN]"
tc -s filter show dev $DEV_IN
;;
*)
echo "Usage: $0 {start|stop|restart|status}"
;;
esac

exit 0

Пока что разрулил самое основное: dns, icmp, icq, irc - приоритет высокий и средний, все остальное - низкий.

теперь нужно на интерфейсе смотрящем в сеть eth1 сформировать каждому пользователю полосу "не выше" 1024\64 kbit\s
Уточню внимание: не на всю подсеть делить скорость 1024\64 kbit\s, а каждому пользователю выдать по 1024\64 kbit\s
То есть:
192.168.0.2 (вася) - 1024\64 kbit\s
.......
192.168.0.7 (петя) - 1024\64 kbit\s
.......
192.168.0.30 (катя) - 1024\64 kbit\s
........
192.168.0.67 (марина) - 1024\64 kbit\s
.......и т. д.
Пока что получается ограничевать скорость только на подсеть. на каждого тоже,но скрипт получается нереально идиотский:

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

#!/bin/sh

IPTABLES=/sbin/iptables
#TC=/sbin/tc
DEV_IN=eth0
RATE=10000
RATES_INS=1024

case "$1" in
start)
########################## IN #############################
tc qdisc add dev $DEV_IN root handle 1:0 htb default 333

tc class add dev $DEV_IN parent 1:0 classid 1:1 htb rate ${RATE}kbit ceil ${RATE}kbit

tc class add dev $DEV_IN parent 1:1 classid 1:2 htb rate $[$RATES_INS/2]kbit ceil ${RATES_INS}kbit
#....
tc class add dev $DEV_IN parent 1:1 classid 1:7 htb rate $[$RATES_INS/2]kbit ceil ${RATES_INS}kbit
#....
tc class add dev $DEV_IN parent 1:1 classid 1:30 htb rate $[$RATES_INS/2]kbit ceil ${RATES_INS}kbit
#....
tc class add dev $DEV_IN parent 1:1 classid 1:67 htb rate $[$RATES_INS/2]kbit ceil ${RATES_INS}kbit
#....
tc class add dev $DEV_IN parent 1:1 classid 1:333 htb rate $[$RATES_INS/8]kbit ceil ${$RATES_INS/4]kbit #для особо умных,и тех кого я еще не добавил...
# И ТАК НА КАЖДОГО ПОЛЬЗОВАТЕЛЯ

tc qdisc add dev $DEV_IN parent 1:2 handle 2: sfq perturb 10
tc qdisc add dev $DEV_IN parent 1:7 handle 7: sfq perturb 10
tc qdisc add dev $DEV_IN parent 1:30 handle 30: sfq perturb 10
tc qdisc add dev $DEV_IN parent 1:67 handle 67: sfq perturb 10
tc qdisc add dev $DEV_IN parent 1:333 handle 333: sfq perturb 10
# И ТАК НА КАЖДОГО ПОЛЬЗОВАТЕЛЯ

#### Маркировка пакетов

# добавить цепочку MYSHAPER-IN в таблицу mangle - сейчас мы настроим таблицу,которую будем
# использовать для фильтрациии установки fwmark
iptables -t mangle -N MYSHAPER-IN
iptables -t mangle -I POSTROUTING -o $DEV_IN -j MYSHAPER-IN

#ТЕПЕРЬ ПЕРЕБЕРАЕМ ВСЕ IP!!!ЖЕСТЬ....
iptables -t mangle -A MYSHAPER-IN -d 192.168.0.2 -j MARK --set-mark 2
iptables -t mangle -A MYSHAPER-IN -d 192.168.0.7 -j MARK --set-mark 7
iptables -t mangle -A MYSHAPER-IN -d 192.168.0.30 -j MARK --set-mark 30
iptables -t mangle -A MYSHAPER-IN -d 192.168.0.67 -j MARK --set-mark 67

tc filter add dev $DEV_IN parent 1:0 protocol ip handle 2 fw flowid 1:2
tc filter add dev $DEV_IN parent 1:0 protocol ip handle 7 fw flowid 1:7
tc filter add dev $DEV_IN parent 1:0 protocol ip handle 30 fw flowid 1:30
tc filter add dev $DEV_IN parent 1:0 protocol ip handle 67 fw flowid 1:67
tc filter add dev $DEV_IN parent 1:0 protocol ip handle 333 fw flowid 1:333
# И ТАК НА КАЖДОГО ПОЛЬЗОВАТЕЛЯ


echo "Shaper on $DEV_IN started ($RATE_IN kbit/s)"
;;
stop)
tc qdisc del dev $DEV_IN root 2> /dev/null > /dev/null
tc qdisc del dev $DEV_OUT root 2> /dev/null > /dev/null
iptables -t mangle -D POSTROUTING -o $DEV_OUT -j MYSHAPER-OUT 2> /dev/null > /dev/null
iptables -t mangle -F MYSHAPER-OUT 2> /dev/null > /dev/null
iptables -t mangle -X MYSHAPER-OUT 2> /dev/null > /dev/null
iptables -t mangle -D POSTROUTING -o $DEV_IN -j MYSHAPER-IN 2> /dev/null > /dev/null
iptables -t mangle -F MYSHAPER-IN 2> /dev/null > /dev/null
iptables -t mangle -X MYSHAPER-IN 2> /dev/null > /dev/null

echo "Shaper removed"
;;
restart)
$0 stop
$0 start
;;
status)

echo "[qdisc IN]"
tc -s qdisc show dev $DEV_IN
echo "[class IN]"
tc -s class show dev $DEV_IN
echo "[filter IN]"
tc -s filter show dev $DEV_IN
;;
*)
echo "Usage: $0 {start|stop|restart|status}"
;;
esac

exit 0


и это только входящий трафик(с точки зрения пользователя)!!!Еще нужно описать исходящий (с точки зрения пользователя) с помощью процедуры которая сбрасывает пакеты,запямятовал как она называется,не суть...Суть в том что такой же длинны будет!

Кто подскажет как упростить все это?!Очень прошу.
P.S. cbq.init так и не заработала...все стартует,ошибок нет,а скорость резать отказывается
Спасибо сказали:
shyrikos
Сообщения: 76

Re: Приоритезация.Выбор подходящего шейпинга,CBQ.init или HTB.init

Сообщение shyrikos »

А если попробовать так?

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

#!/bin/sh

IPTABLES=/sbin/iptables
#TC=/sbin/tc
DEV_IN=eth0
RATE=10000
RATES_INS=1024

case "$1" in
start)
########################## IN #############################
tc qdisc add dev $DEV_IN root handle 1:0 htb default 333

tc class add dev $DEV_IN parent 1:0 classid 1:1 htb rate ${RATE}kbit ceil ${RATE}kbit

tc class add dev $DEV_IN parent 1:1 classid 1:2 htb rate $[$RATES_INS/2]kbit ceil ${RATES_INS}kbit

tc class add dev $DEV_IN parent 1:1 classid 1:333 htb rate $[$RATES_INS/8]kbit ceil ${$RATES_INS/4]kbit #для особо умных,и тех кого я еще не добавил...

tc qdisc add dev $DEV_IN parent 1:2 handle 2: sfq perturb 10

tc qdisc add dev $DEV_IN parent 1:333 handle 333: sfq perturb 10
# И ТАК НА КАЖДОГО ПОЛЬЗОВАТЕЛЯ

#### Маркировка пакетов

# добавить цепочку MYSHAPER-IN в таблицу mangle - сейчас мы настроим таблицу,которую будем
# использовать для фильтрациии установки fwmark
iptables -t mangle -N MYSHAPER-IN
iptables -t mangle -I POSTROUTING -o $DEV_IN -j MYSHAPER-IN

iptables -t mangle -A MYSHAPER-IN -d 192.168.0.0/16 -j MARK --set-mark 2


tc filter add dev $DEV_IN parent 1:0 protocol ip handle 2 fw flowid 1:2
tc filter add dev $DEV_IN parent 1:0 protocol ip handle 333 fw flowid 1:333
# И ТАК НА КАЖДОГО ПОЛЬЗОВАТЕЛЯ


echo "Shaper on $DEV_IN started ($RATES_INS kbit/s)"
;;
stop)
tc qdisc del dev $DEV_IN root 2> /dev/null > /dev/null
tc qdisc del dev $DEV_OUT root 2> /dev/null > /dev/null
iptables -t mangle -D POSTROUTING -o $DEV_OUT -j MYSHAPER-OUT 2> /dev/null > /dev/null
iptables -t mangle -F MYSHAPER-OUT 2> /dev/null > /dev/null
iptables -t mangle -X MYSHAPER-OUT 2> /dev/null > /dev/null
iptables -t mangle -D POSTROUTING -o $DEV_IN -j MYSHAPER-IN 2> /dev/null > /dev/null
iptables -t mangle -F MYSHAPER-IN 2> /dev/null > /dev/null
iptables -t mangle -X MYSHAPER-IN 2> /dev/null > /dev/null

echo "Shaper removed"
;;
restart)
$0 stop
$0 start
;;
status)

echo "[qdisc IN]"
tc -s qdisc show dev $DEV_IN
echo "[class IN]"
tc -s class show dev $DEV_IN
echo "[filter IN]"
tc -s filter show dev $DEV_IN
;;
*)
echo "Usage: $0 {start|stop|restart|status}"
;;
esac

exit 0

Это наверное не решит проблемму "на каждого", а будет резать на всю подсеть сразу...(((
Спасибо сказали: