Страница 1 из 1

зарезать скорость канала на пользователя

Добавлено: Ср фев 06, 2008 6:25 am
Aven
Какой самый простой способ в Linux ?

Добавлено: Ср фев 06, 2008 10:57 am
ran
дисциплина обслуживания tbf исходящий (на усера) трафик. если кончна на каждего усера свой ифейс (ppp например). входящий (от усера) ingress дисциплиной (это по-простому :D )

пример отлаженного фрагмента линкапдаун я где-то выкладывал поищи

а если хочешь по-серьёзному то без внимательного изучения хотя бы вот этого http://megalib.com/books/1346/lartc.html там делать нечего. а ещё лучше в оригинале - ссылка там есть... ну и маны по тс не помешают

вот мой старый рабочий скрипт, который был, когда клиенты работали через чистый дв без ипн (на филтерз внимания не обращай - у меня через него передаётся имя таблицы маршрутизации через которую должен проьрасываться клиент - разные клиенты у меня ходят в инет через разные внешние каналы)

/etc/ppp/ip-pre-up:

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

#!/bin/bash

TC=/usr/sbin/tc

if [ -f /var/run/radattr.$1 ] ;
then
    DOWNSPEED=`/usr/bin/awk  '/PPPD-Downstream-Speed-Limit/ {print $2}'  /var/run/radattr.$1`
    UPSPEED=`/usr/bin/awk  '/PPPD-Upstream-Speed-Limit/ {print $2}'  /var/run/radattr.$1`
    FILTERS=`/usr/bin/awk  '/Filter-Id/ {print $2}'  /var/run/radattr.$1`

    test -n "$FILTERS" && /sbin/ip ru add from $5 iif $1 table $FILTERS >/dev/null 2>&1

    $TC qdisc del dev $1 root    > /dev/null
    $TC qdisc del dev $1 ingress > /dev/null

 ##### speed server->client
    if [ "$UPSPEED" != "0" ] ;
    then
        $TC qdisc add dev $1 root tbf rate $(( $UPSPEED * 1024 ))bit burst 1540 limit 20kb
    fi

 ##### speed client->server
   if [ "$DOWNSPEED" != "0" ] ;
   then
        $TC qdisc add dev $1 handle ffff: ingress
        $TC filter add dev $1 parent ffff: protocol ip \
            prio 50 u32 match ip src 0.0.0.0/0 police rate $((DOWNSPEED * 1024))bit \
            burst 12k drop flowid :1
   fi
fi

Добавлено: Ср фев 06, 2008 12:13 pm
chtito
А разве в сам Abills не интегрирована подобная резка?

Добавлено: Ср фев 06, 2008 12:48 pm
ran
chtito писал(а):А разве в сам Abills не интегрирована подобная резка?
аха... если это на уровне ядра делается... tc - это усеринтерфейс для управления трафиком, которое делается ядром, которое и собрано к тому же должно быть не криво :D :D :D

Добавлено: Ср фев 06, 2008 2:03 pm
Aven
Спасибо за скрипт, только я забыл уточнить что у меня чистый ipn ')

Добавлено: Ср фев 06, 2008 2:13 pm
chtito
ran писал(а):
chtito писал(а):А разве в сам Abills не интегрирована подобная резка?
аха... если это на уровне ядра делается... tc - это усеринтерфейс для управления трафиком, которое делается ядром, которое и собрано к тому же должно быть не криво :D :D :D
Это я понял, но в веб-админке Абиллса же есть поля куда вводится скорость. Это что, просто так? Не шейпится потом средствами пакета биллинга? Я просто не знаю.

Добавлено: Ср фев 06, 2008 3:04 pm
ran
chtito писал(а):Это я понял, но в веб-админке Абиллса же есть поля куда вводится скорость. Это что, просто так?
Не просто так... Это возможность держать в базе параметры шейпера и передать их скрипту, который и пропишет правила шейпера... по-идее это должен делать libexec/linkupdown... и под фрёй он наверное и делает это более-менее нормально (не знаю)... правила, написанные там для линуха работать не будут. Пример рабочих правил (для линуха в линкапдаун) я приводил где-то в форуме. Ваще такие вещи как шейпинг - это... ммм... дело ну очень тонкое и чего-либо универсального, да ещё под разные оси Автору сделать сложно (да наверное и невозможно). А по сему
ran писал(а):а если хочешь по-серьёзному то без внимательного изучения хотя бы вот этого http://megalib.com/books/1346/lartc.html там делать нечего. а ещё лучше в оригинале - ссылка там есть... ну и маны по тс не помешают

Добавлено: Чт фев 07, 2008 7:47 pm
shyriksk8
Вот мне нужно тоже зарезать ВСЕМ исходящий трафик (потому что инет собираюсь раздовать с тарелки,а исходящий канал дохленький).Ну так вот,как всем одним махом зарезать исходящий трафик скажем до 32 кбит\с каждому? Операционка suse 10.3 , на нем поднят нат и биллинг, за этим всем делом шарманка со спутниковой антеной и исходящим скай-линком.
А за одно и как входящий до пол мегабита обрубить тоже всем.Помогите пожалуйста.

Добавлено: Пт фев 08, 2008 6:52 am
ran

Добавлено: Пт фев 08, 2008 7:09 am
ran
Aven писал(а):Спасибо за скрипт, только я забыл уточнить что у меня чистый ipn ')
Для чистого ипн правила шейпера надо на изернеты вешать. Входящий (на клиента) трафик на изернет, смотрящий в локалку, исходящий (от клиента - на изернет, смотрящий в инет. Ну или на IFB/IMQ... и не забывать удалять при отключении :)

Добавлено: Сб фев 09, 2008 10:03 am
shyriksk8
е могли бы привести какой нибудь пример разбора такого случая,а то сложновато разобраться,немного запутался в этих скриптах.
Не могу толком понять что и в каком порядке использовать: Так как уже прочитал материал и из них узнал про разные скрипты,пока что сузил обзор на такие скрипты как ESFQ,HTB и cbq. а дальще какая то путаница пошла.Но немного разобравшись сузил для такой задачи,но все равно не хватает опыта и наглядности:
1)для исходящего!
нужно как то сделать всякие приоритеты и прочее для разного типа трафика,я так понял это делается с помощью HTB и cbq.только вот толком не понял в каком случае использовать какой скрипт
далее нужно впихнуть во все это ESFQ,чтобы все делилось поровну.
Так я понимаю,не чего не пропустил?я это сейчас осмысливаю в первый раз,так что поправте меня пожалуйста,если я не так все понимаю...
Дальше совсем не понятно как прикрутить это:
iptables -t mangle -A PREROUTING -s 192.168.90.0/24 -j MARK --set-mark 333
и совместить с остальными правилами или классами или марками...ааа,попа!не пойму...
2)для входящего решил поставить Squid в прозрачном режиме и валить всякие злостные закачки + тут я делаю выигрышь небольшой на кэше.
Вот как конкретно каждому ip порезать скорость входящую,так и не понял.везде говорят только про входящую скорость от провайдера и не чего про уменьщение скорости на самом шлюзе...
Можно конечно проксей резать абсолютно все классы трафика,но я думаю это не самый лучщий способ...и что будет тварится если вдруг прокся рухнет!
Вот такой вот я чайник получается,но очень стараюсь во все это въехать,поэтому прошу о помощи.

Добавлено: Пн фев 11, 2008 6:04 pm
shyriksk8
ran писал(а):и не забывать удалять при отключении :)
а что здесь имеется в виду?

Добавлено: Пн фев 11, 2008 10:55 pm
shyriksk8
ran писал(а):Для чистого ипн правила шейпера надо на изернеты вешать. Входящий (на клиента) трафик на изернет, смотрящий в локалку, исходящий (от клиента - на изернет, смотрящий в инет. Ну или на IFB/IMQ... и не забывать удалять при отключении :)
А разве не надо сразу отсекать трафик пришетщий от клиента на интерфейсе смотрящем в сеть?и точно так же трафик пришедщий из интернета - отсекать на интерфейсе смотрящем в интернет?!

Добавлено: Чт фев 14, 2008 1:39 pm
ran
мдя... ну и каша у тебя в голове... так и в психушку попасть недолго :D

1. Внимательно изучи принципы управления трафиком в линухе. В инете инфы валом

2. Определись с выбором дисциплин и классов обслуживания

3. Внимательно их изучи

4. Экспериментируй

Я писать под тебя скрипты небуду, уж извини... :) А примеры рабочих скриптов я привёл

Добавлено: Вс фев 24, 2008 1:38 pm
shyriksk8
ran писал(а):мдя... ну и каша у тебя в голове... так и в психушку попасть недолго :D

1. Внимательно изучи принципы управления трафиком в линухе. В инете инфы валом

2. Определись с выбором дисциплин и классов обслуживания

3. Внимательно их изучи

4. Экспериментируй

Я писать под тебя скрипты небуду, уж извини... :) А примеры рабочих скриптов я привёл
Фух вродебы разобрался...но теперь стал вопрос использования циклов...А с циклом нужно сделать следуещее:
ОСНОВНАЯ ПРОБЛЕММА
теперь нужно на интерфейсе смотрящем в сеть 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
и это только входящий трафик(с точки зрения пользователя)!!!Еще нужно описать исходящий (с точки зрения пользователя) с помощью процедуры которая сбрасывает пакеты,кажется imq, запямятовал как она называется,не суть...Суть в том что такой же длинны будет!

Вот как лучще сделать циклы на создание ,классов,потом дисциплин,потом правил файрвола,потом фильтров...