Перейти до

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


Рекомендованные сообщения

Следующая задача:

имеется асинхронное соединение с Интернетом со скоростью 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 пункт и второй?

Ссылка на сообщение
Поделиться на других сайтах
Из-за того что правило на eth1 после Nat-a, проблем быть не должно?

Как это не должно - должно да еще как )) см. соседнюю ветку

 

файлы cbq-512.client-out и cbq-64.client-in просто кидаем в папку с CBQ.init и все?

файлы надо как минимум кидать не туда ))) а в /etc/sysconfig/cbq/

Ссылка на сообщение
Поделиться на других сайтах
Из-за того что правило на eth1 после Nat-a, проблем быть не должно?

Как это не должно - должно да еще как )) см. соседнюю ветку

 

файлы cbq-512.client-out и cbq-64.client-in просто кидаем в папку с CBQ.init и все?

файлы надо как минимум кидать не туда ))) а в /etc/sysconfig/cbq/

ну я туда их и кидаю.а толку не какого!не пашет нечего...

вторая задача работает,там где просто на htb написанно,но весь трафик идет через 99 и 25, а остальные правила не работают!

Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Вхід

Уже зарегистрированы? Войдите здесь.

Войти сейчас
  • Зараз на сторінці   0 користувачів

    Немає користувачів, що переглядають цю сторінку.

×
×
  • Створити нове...