зарезать скорость канала на пользователя
зарезать скорость канала на пользователя
Какой самый простой способ в Linux ?
дисциплина обслуживания tbf исходящий (на усера) трафик. если кончна на каждего усера свой ифейс (ppp например). входящий (от усера) ingress дисциплиной (это по-простому
)
пример отлаженного фрагмента линкапдаун я где-то выкладывал поищи
а если хочешь по-серьёзному то без внимательного изучения хотя бы вот этого http://megalib.com/books/1346/lartc.html там делать нечего. а ещё лучше в оригинале - ссылка там есть... ну и маны по тс не помешают
вот мой старый рабочий скрипт, который был, когда клиенты работали через чистый дв без ипн (на филтерз внимания не обращай - у меня через него передаётся имя таблицы маршрутизации через которую должен проьрасываться клиент - разные клиенты у меня ходят в инет через разные внешние каналы)
/etc/ppp/ip-pre-up:

пример отлаженного фрагмента линкапдаун я где-то выкладывал поищи
а если хочешь по-серьёзному то без внимательного изучения хотя бы вот этого 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
Это я понял, но в веб-админке Абиллса же есть поля куда вводится скорость. Это что, просто так? Не шейпится потом средствами пакета биллинга? Я просто не знаю.ran писал(а):аха... если это на уровне ядра делается... tc - это усеринтерфейс для управления трафиком, которое делается ядром, которое и собрано к тому же должно быть не кривоchtito писал(а):А разве в сам Abills не интегрирована подобная резка?![]()
![]()
Не просто так... Это возможность держать в базе параметры шейпера и передать их скрипту, который и пропишет правила шейпера... по-идее это должен делать libexec/linkupdown... и под фрёй он наверное и делает это более-менее нормально (не знаю)... правила, написанные там для линуха работать не будут. Пример рабочих правил (для линуха в линкапдаун) я приводил где-то в форуме. Ваще такие вещи как шейпинг - это... ммм... дело ну очень тонкое и чего-либо универсального, да ещё под разные оси Автору сделать сложно (да наверное и невозможно). А по семуchtito писал(а):Это я понял, но в веб-админке Абиллса же есть поля куда вводится скорость. Это что, просто так?
ran писал(а):а если хочешь по-серьёзному то без внимательного изучения хотя бы вот этого http://megalib.com/books/1346/lartc.html там делать нечего. а ещё лучше в оригинале - ссылка там есть... ну и маны по тс не помешают
Вот мне нужно тоже зарезать ВСЕМ исходящий трафик (потому что инет собираюсь раздовать с тарелки,а исходящий канал дохленький).Ну так вот,как всем одним махом зарезать исходящий трафик скажем до 32 кбит\с каждому? Операционка suse 10.3 , на нем поднят нат и биллинг, за этим всем делом шарманка со спутниковой антеной и исходящим скай-линком.
А за одно и как входящий до пол мегабита обрубить тоже всем.Помогите пожалуйста.
А за одно и как входящий до пол мегабита обрубить тоже всем.Помогите пожалуйста.
Для чистого ипн правила шейпера надо на изернеты вешать. Входящий (на клиента) трафик на изернет, смотрящий в локалку, исходящий (от клиента - на изернет, смотрящий в инет. Ну или на IFB/IMQ... и не забывать удалять при отключенииAven писал(а):Спасибо за скрипт, только я забыл уточнить что у меня чистый ipn ')

е могли бы привести какой нибудь пример разбора такого случая,а то сложновато разобраться,немного запутался в этих скриптах.
Не могу толком понять что и в каком порядке использовать: Так как уже прочитал материал и из них узнал про разные скрипты,пока что сузил обзор на такие скрипты как 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 порезать скорость входящую,так и не понял.везде говорят только про входящую скорость от провайдера и не чего про уменьщение скорости на самом шлюзе...
Можно конечно проксей резать абсолютно все классы трафика,но я думаю это не самый лучщий способ...и что будет тварится если вдруг прокся рухнет!
Вот такой вот я чайник получается,но очень стараюсь во все это въехать,поэтому прошу о помощи.
Не могу толком понять что и в каком порядке использовать: Так как уже прочитал материал и из них узнал про разные скрипты,пока что сузил обзор на такие скрипты как 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 порезать скорость входящую,так и не понял.везде говорят только про входящую скорость от провайдера и не чего про уменьщение скорости на самом шлюзе...
Можно конечно проксей резать абсолютно все классы трафика,но я думаю это не самый лучщий способ...и что будет тварится если вдруг прокся рухнет!
Вот такой вот я чайник получается,но очень стараюсь во все это въехать,поэтому прошу о помощи.
А разве не надо сразу отсекать трафик пришетщий от клиента на интерфейсе смотрящем в сеть?и точно так же трафик пришедщий из интернета - отсекать на интерфейсе смотрящем в интернет?!ran писал(а):Для чистого ипн правила шейпера надо на изернеты вешать. Входящий (на клиента) трафик на изернет, смотрящий в локалку, исходящий (от клиента - на изернет, смотрящий в инет. Ну или на IFB/IMQ... и не забывать удалять при отключении
мдя... ну и каша у тебя в голове... так и в психушку попасть недолго 
1. Внимательно изучи принципы управления трафиком в линухе. В инете инфы валом
2. Определись с выбором дисциплин и классов обслуживания
3. Внимательно их изучи
4. Экспериментируй
Я писать под тебя скрипты небуду, уж извини...
А примеры рабочих скриптов я привёл

1. Внимательно изучи принципы управления трафиком в линухе. В инете инфы валом
2. Определись с выбором дисциплин и классов обслуживания
3. Внимательно их изучи
4. Экспериментируй
Я писать под тебя скрипты небуду, уж извини...

Фух вродебы разобрался...но теперь стал вопрос использования циклов...А с циклом нужно сделать следуещее:ran писал(а):мдя... ну и каша у тебя в голове... так и в психушку попасть недолго
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
Вот как лучще сделать циклы на создание ,классов,потом дисциплин,потом правил файрвола,потом фильтров...