Jump to content

Ограничение скорости


Recommended Posts

Добрый день знатоки! В этом деле я новичек, так что сильно не пинайте...

 

Нужно ограничить скорость пользователям на определенном тарифе. Как это можно реализовать? Читал посты где описывается ограничение... но там для фрибсд, а мне нужно для асп10. Может кто напишет код. Спасибо!

Link to post
Share on other sites
Добрый день знатоки! В этом деле я новичек, так что сильно не пинайте...

 

Нужно ограничить скорость пользователям на определенном тарифе. Как это можно реализовать? Читал посты где описывается ограничение... но там для фрибсд, а мне нужно для асп10. Может кто напишет код. Спасибо!

Предыдущий вариант сложен для понимания.

Используй cbq.init. Работает вполне надежно (если без фанатизма).

Link to post
Share on other sites

Я так понял мне вот это:

 

Как ограничить пропускную полосу для пакетов помеченных меткой через MARK

Сделать MARK, и загнать все такие трансферы в какой-либо класс шейпера. Т.е. если например помеченные пакеты - все их отнести к классу 1:51 где скорость ограничена от 32К до 64К:

tc filter add dev eth1 parent 1:0 protocol ip prio 100 handle 51 fw classid 1:51

tc class add dev eth1 parent 1:2 classid 1:51 htb rate 32Kbit ceil 64Kbit

tc qdisc add dev eth1 parent 1:51 handle 51 sfq perturb 10

 

или что-то похожее нужно добавить в Онкнект. Онконект залить определенному пользователю... И это же нужно сделать и с Ондисконект...

Link to post
Share on other sites

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

 

rc.firewall:

 

$TC qdisc add dev $LAN_IFACE root handle 1: htb

$TC class add dev $LAN_IFACE parent 1: classid 1:1 htb rate 100mbit ceil 100mbit burst 200k

 

$TC filter add dev $LAN_IFACE parent 1: prio 2 protocol ip u32 match ip src ${LAN_IP} flowid 1:1

 

 

OnConnect:

 

prioid="${ID}0"

 

if [ "$tarif" = "Unlim-128" ]; then

speed=128

elif [ "$tarif" = "Unlim-256" ]; then

speed=256

elif [ "$tarif" = "Unlim-512" ]; then

speed=512

else

speed=0

fi

 

if [ $speed -gt 0 ]; then

$TC class add dev $iface parent 1:1 classid 1:${prioid} htb rate $speed'kbit' burst 20k

$TC filter add dev $iface parent 1: protocol ip prio ${prioid} u32 match ip dst $IP flowid 1:${prioid}

fi

 

OnDisconnect:

 

prioid="${ID}0"

 

$TC filter del dev $iface pref ${prioid}

$TC class del dev $iface classid 1:${prioid}

Link to post
Share on other sites

Допустим у меня есть канал 256Кб/с. Мне нужно для 1 или более пользователей ограничить скорость до 32кб/с(например) но чтобы другие использовали весь канал. Как это можно реализовать?

Link to post
Share on other sites

LAN_IFACE="eth0" #локальный интерфейс

LAN_IP="192.168.1.1" #адрес сервера

tc qdisc add dev $LAN_IFACE root handle 1: htb

tc class add dev $LAN_IFACE parent 1: classid 1:1 htb rate 100mbit ceil 100mbit burst 200k

 

tc filter add dev $LAN_IFACE parent 1: prio 2 protocol ip u32 match ip src $LAN_IP flowid 1:1

 

последний кусой для каждого юзера которого надо кастрировать

менять только айки и класайди и флов айди

tc class add dev $LAN_IFACE parent 1:1 classid 1:10 htb rate 32kbit burst 20k

tc filter add dev $LAN_IFACE parent 1: protocol ip prio 10 u32 match ip dst $IP_user flowid 1:10

вроде усе

Link to post
Share on other sites

Спасибо всем! разобрался с cbq.init ))))

 

Конечно попробую и другие варианты.... будут вопросы, напишу!

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...