The OpenNET Project / Index page

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

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

"Шейпинг трафика в линукс. Динамическое ограничение трафика."  +/
Сообщение от avegad email(ok) on 09-Янв-09, 13:06 
Картина такая.
Дано:
Cервер на базе LINUX ASP 10.0
С двумя сетевыми картами, одна из которых смотрит во внутреннюю сеть, другая соответственно в интернет.
На сервер поднят VPN PPTPD сервер.
Пользователи из внутренней сети для подключения к интернету коннектятся к серверу по VPN.

В сети имеется файлообменный сервис(торрент), который для контроля и ограничения пропускной способности внутренних каналов тоже работает только через VPN.

Задача.

1. Сделать пользователям динамический шейпинг траффика в зависимости от пропускной способности внешнего канала(25Мбит), но не менее определенной величины.

Т.е у пользователей подключенных по тарифу 128Кбит и 256Кбит при наличии свободной ширины канала, скорость должна увеличиваться, при перегрузке канала скорость должна уменьшаться, но быть не менее чем скорость указанная в в тарифе(минимальная гарантированная скорость).

2. Сделать так чтобы скорость файлообмена(а именно исходящий трафика от абонента) не зависела от скорости подключения к сети интернет.

сейчас ограничение скорости абонента статическое и исходящий трафик от абонента сделан через ингресс, что соответственно влияет на скорость раздачи.

Очень надеюсь на вашу помощь и развернутые ответы.


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

Оглавление

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


1. "Шейпинг трафика в линукс. Динамическое ограничение трафика."  +/
Сообщение от o0oxid (??) on 09-Янв-09, 18:49 
http://luxik.cdi.cz/~devik/qos/htb/manual/userg.htm
Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

2. "Шейпинг трафика в линукс. Динамическое ограничение трафика."  +/
Сообщение от avegad (ok) on 10-Янв-09, 12:09 
>http://luxik.cdi.cz/~devik/qos/htb/manual/userg.htm

Мануал это конечно хорошо, буду вкуривать.

Вот та реализация которая работает сейчаc при коннекте пользователя по VPN.

#!/bin/sh
IF=$1
IP=$2
if [ -f /var/run/radattr.$1 ]
then
SPEED=`/bin/awk  '/PPPD-Downstream-Speed-Limit/ {print $2}'  /var/run/radattr.$IF`


SPEEDIN=18048kbit # Скорость внутренней сети от абонента
SPEEDOUT=10096kbit # Скорость внутренней сети к абоненту
SPEEDSRV=10096kbit # Скорость серверов от абонента
SPEEDMIN=1kbit # минимальная гарантированная скорость


tc qdisc del dev $IF root handle 1: htb default 90 # сброс настроек интерфейса
tc qdisc add dev $IF root handle 1: htb default 90 # инициализация интерфейса
tc class add dev $IF parent 1: classid 1:90 htb rate "$SPEED"kbit"" burst 2 # задание скорости на Интернет
tc class add dev $IF parent 1: classid 1:10 htb rate $SPEEDIN burst 2 # задание скорости на внутреннюю сеть
tc class add dev $IF parent 1: classid 1:20 htb rate $SPEEDSRV burst 2 # заданние скорости серверов
tc class add dev $IF parent 1: classid 1:120 htb rate $SPEEDMIN burst 2 # минимальная гарантированная скорость(для блокировки трафика)

#ФИЛЬТРЫ
###
tc filter add dev $IF protocol ip parent 1:0 prio 10 u32 match ip src $IP match ip dst 10.13.0.0/16 flowid 1:10
tc filter add dev $IF protocol ip parent 1:0 prio 10 u32 match ip src $IP match ip dst 89.113.xx.yy/22 flowid 1:10
tc filter add dev $IF protocol ip parent 1:0 prio 10 u32 match ip src $IP match ip dst 172.16.0.0/16 flowid 1:120
###
tc filter add dev $IF protocol ip parent 1:0 prio 10 u32 match ip src 10.13.0.0/16 match ip dst $IP flowid 1:10
tc filter add dev $IF protocol ip parent 1:0 prio 10 u32 match ip src 89.113.xx.yy/22 match ip dst $IP flowid 1:10
tc filter add dev $IF protocol ip parent 1:0 prio 10 u32 match ip src 172.16.0.0/16 match ip dst $IP flowid 1:120
###
tc filter add dev $IF protocol ip parent 1:0 prio 10 u32 match ip src $IP match ip dst 172.18.1.2/32 flowid 1:20
tc filter add dev $IF protocol ip parent 1:0 prio 10 u32 match ip src $IP match ip dst 172.18.1.3/32 flowid 1:10 ###VPN GATE###
tc filter add dev $IF protocol ip parent 1:0 prio 10 u32 match ip src $IP match ip dst 172.18.1.4/32 flowid 1:20
tc filter add dev $IF protocol ip parent 1:0 prio 10 u32 match ip src $IP match ip dst 172.18.1.5/32 flowid 1:20
tc filter add dev $IF protocol ip parent 1:0 prio 10 u32 match ip src $IP match ip dst 172.18.1.6/32 flowid 1:20
tc filter add dev $IF protocol ip parent 1:0 prio 10 u32 match ip src $IP match ip dst 172.18.1.61/32 flowid 1:20
tc filter add dev $IF protocol ip parent 1:0 prio 10 u32 match ip src $IP match ip dst 172.18.1.7/32 flowid 1:20
tc filter add dev $IF protocol ip parent 1:0 prio 10 u32 match ip src $IP match ip dst 89.113.yyy.85/28 flowid 1:20
tc filter add dev $IF protocol ip parent 1:0 prio 10 u32 match ip src $IP match ip dst 89.113.yyy.84/28 flowid 1:20

###
tc filter add dev $IF protocol ip parent 1:0 prio 10 u32 match ip src 172.18.1.2/32 match ip dst $IP flowid 1:20
tc filter add dev $IF protocol ip parent 1:0 prio 10 u32 match ip src 172.18.1.3/32 match ip dst $IP flowid 1:10 ###VPN GATE###
tc filter add dev $IF protocol ip parent 1:0 prio 10 u32 match ip src 172.18.1.4/32 match ip dst $IP flowid 1:20
tc filter add dev $IF protocol ip parent 1:0 prio 10 u32 match ip src 172.18.1.5/32 match ip dst $IP flowid 1:20
tc filter add dev $IF protocol ip parent 1:0 prio 10 u32 match ip src 172.18.1.6/32 match ip dst $IP flowid 1:20
tc filter add dev $IF protocol ip parent 1:0 prio 10 u32 match ip src 172.18.1.61/32 match ip dst $IP flowid 1:20
tc filter add dev $IF protocol ip parent 1:0 prio 10 u32 match ip src 172.18.1.7/32 match ip dst $IP flowid 1:20
tc filter add dev $IF protocol ip parent 1:0 prio 10 u32 match ip src 89.113.yyy.84/28 match ip dst $IP flowid 1:20
tc filter add dev $IF protocol ip parent 1:0 prio 10 u32 match ip src 89.113.yyy.85/28 match ip dst $IP flowid 1:20
###
###DOWN
ID=`echo "select users.id FROM users INNER JOIN ip_groups ON users.login=ip_groups.uname WHERE ip_groups.is_deleted=0 AND users.is_deleted=0 AND ip=inet_aton('$IP') order by users.id;" | mysql -u init -pinit UTM5 -h 172.18.1.2 | sed '$!d'`
#FLT=`tc filter show dev eth1 | grep "flowid 1:$ID" | awk {'print $1'}`
#if [ $FLT="filter" ]
#then
#exit 0
#else
tc qdisc add dev eth1 root handle 1: htb default 90
tc class add dev eth1 parent 1: classid 1: htb rate 100Mbit burst 2 # Общая ширина WAN
tc class add dev eth1 parent 1:1 classid 1:$ID htb rate "$SPEED"kbit"" burst 2 # задание скорости на Интернет
tc filter add dev eth1 parent 1: protocol ip prio 10 u32 match ip src $IP match ip dst 0.0.0.0/0 flowid 1:$ID # Загоняем абонента в класс
#echo "---" >> /netup/modules/tc.log
#fi
###OLD
#/sbin/tc qdisc add dev $IF handle ffff: ingress
###LAN
#/sbin/tc filter add dev $IF parent ffff: protocol ip prio 50 u32 match ip dst 89.113.147.85/28 police rate ${SPEEDIN}kbit burst 12k drop flowid :1
###INET
#/sbin/tc filter add dev $IF parent ffff: protocol ip prio 50 u32 match ip src 0.0.0.0/0 police rate ${SPEED}kbit burst 12k drop flowid :1
fi

Здесь вопрос такой:
Как удалить конкретный класс и фильтр
делаю так:
tc class del dev eth1 parent 1:1 classid 1:$ID htb rate "$SPEED"kbit"" burst 2
tc filter del dev eth1 parent 1: protocol ip prio 10 u32 match ip src $IP match ip dst 0.0.0.0/0 flowid 1:$ID
У меня удаляются классы и фильтры ВСЕХ пользователей

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

3. "Шейпинг трафика в линукс. Динамическое ограничение трафика."  +/
Сообщение от o0oxid (??) on 14-Янв-09, 16:36 
Как удалить, читай ман по tc
К вопросу о динамическом распределении полосы:
должен быть главный класс, а от него подклассы, они между собой делят основную полосу.
Пример,етсь канал 2,5 мегабита из них разрешено 256 в мир, остальное локальный траф на медиаресурсы:

# вешаем очередь на интерфейс
tc qdisc add dev $VIF root handle 1: htb default 300 r2q 1

#основной класс, со скоростью 2500кБит
tc class add dev $VIF parent 1: classid 1:1 htb rate 2500kbit

#3 подкласа: 100 - 128к гарантированных без превышения, 200-й гарантировано 64r пик 228
# 300 - гарантировано 64к пик 128к
tc class add dev $VIF parent 1:1 classid 1:100 htb rate 128kbit ceil 128kbit prio 2
tc class add dev $VIF parent 1:1 classid 1:200 htb rate 64kbit ceil 228kbit prio 2
tc class add dev $VIF parent 1:1 classid 1:300 htb rate 64kbit ceil 128kbit prio 2

#классы для медиатрфика, также, только скорость отдачи больше.
# они имеют меньший приоритет чем 100, 200,300 классы, т.к. последние для инета.
tc class add dev $VIF parent 1:1 classid 1:30 htb rate 1000kbit ceil 1000kbit prio 3
tc class add dev $VIF parent 1:1 classid 1:40 htb rate 1000kbit ceil 2000kbit prio 3

#это впринципе и дефолтом пропишется
tc qdisc add dev $VIF parent 1:100 sfq perturb 10 #238 room
tc qdisc add dev $VIF parent 1:200 sfq perturb 10 #240 room
tc qdisc add dev $VIF parent 1:300 sfq perturb 10 #240 room
tc qdisc add dev $VIF parent 1:30 sfq perturb 10 #local trifle traf
tc qdisc add dev $VIF parent 1:40 sfq perturb 10 #local trifle traf


Получается 256к динамически раздается если есть свободный канал.
Фильтры и сам умеешь писать, остальное читай :)

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

4. "Шейпинг трафика в линукс. Динамическое ограничение трафика."  +/
Сообщение от avegad email(ok) on 15-Янв-09, 09:54 
>Как удалить, читай ман по tc

Что то не могу найти пока, может подскажешь, а?

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

5. "Шейпинг трафика в линукс. Динамическое ограничение трафика."  +/
Сообщение от o0oxid (??) on 15-Янв-09, 23:45 
>>Как удалить, читай ман по tc
>
>Что то не могу найти пока, может подскажешь, а?

Сначала удаляешь все фильтры указывающие на класс, а потом класс:

tc filter del dev eth001 pref 1 protocol ip handle 800::804 u32
tc class del dev eth001 classid 1:40 parent 1:1 htb rate 1000Kbit

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

6. "Шейпинг трафика в линукс. Динамическое ограничение трафика."  +/
Сообщение от Cpander email on 09-Мрт-10, 22:31 
Сам бьюсь над этим вопросом, и вот позволил себе вклинится..

>К вопросу о динамическом распределении полосы:
>должен быть главный класс, а от него подклассы, они между собой делят
>основную полосу.

вот в этом первая проблема, а именно общий класс.
может я чего-то не так понял, но тут создается корневой (главный) класс для каждого интерфейса, т.е. получается что он у каждого свой..

>#основной класс, со скоростью 2500кБит
>tc class add dev $VIF parent 1: classid 1:1 htb rate 2500kbit

может я мало бился над проблемой,
но каждый раз когда мне кажется, что я начал понимать tc - у меня съезжает крыша
вот и прошу помощи у общественности.

с уважением, Cpander.

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

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

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

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