LinuxForum.Fans
Тема

[Решено] Ограничение ширины канала (squid)

Автор: Linux777 16 сообщений 4495 просмотров
#322636

Хочу сделать ограничение в сквиде по ширине канала. В частности, вижу в мониторинге как некоторые юзеры много качают с инета трафика.

Для начала ознакомился с общими правилами:

1. Для выполнения любых ограничений существует параметр (тег) в конфиге сквида delay_pools;
2. Для этого тега (параметра можно выбрать количество ограничений - называемые емкостями), в моей случае пока интересует один юзер, поэтому считаю будет так
delay_pools 1
3. Далее идет класс (их бывает несколько видов). В свою очередь классы подразделаются на:
а) первый класс - предназначены для ограничения трафика всем, кто подключен к емкости (или всем ACL) (считаю мне это пока не подходит);
б) второй класс - определяют ограничения для сети класса С и отдельно для каждого юзера (или ACL);
в) третий класс - определяет ограничения для сети класса В, а также отдельные ограничения для сети класс С и еще одно ограничение для каждого юзера

в связи с чем, мне тогда 2 или 3 класс нужен, в обоих вроде как есть возможность ограничить юзеров. Пока одного надо ограничить, наиболее кушающего трафик. я пока думаю, что в моем случае это третий класс, а может надо второй.. пока не понял разницу 2 и 3 класса, потому что в обоих есть юзеры, так в чем же разница? а пока считаю будет так:

delay_pools 1
delay_class 1 3
delay_parameters 3 800/64000 800/64000
delay_access

вот дальше тоже немного непонятно, видимо надо привязать этого юзера по ACL, и для этого надо задать этот ACL. Хотя опять же вычитал ACL задачает ограничение на скачивание мультимедийных файлов (mp3, avi и т.д) а как тогда юзера привязать, по IP наверно надо как-то это сделать. Подскажите, как правильно это делается.

#322637

не тот раздел для темы... идите в приложения, а не в убунту...
А вообще то все правильно, ACL надо делать.
тип файлов тоже можно задать и шейпить только по типу файлов например... а ШТМЛ и ДЖЕПЕГ будет быстро...
в инете море примеров...

#322646

Нашел такую статью http://linuxnews.ru/docs/squid.html, и теперь согласно статье, наверное будут такие правила для одного злобного качальщика (примером будет некий vasya_pupkin):


delay_pools 1 # у нас всего 1 пул и как я понял его я делаю якобы для всех, то есть для всего офиса
delay_class 1 1 # 1й пул у нас первого класса, как уже говорил 1 класс предназначены для ограничения трафика всем, кто подключен к емкости
delay_parameters 1 800/64000 # cкорость 64килобит общая, а если закачка до
delay_access 1 allow vasya_pupkin # указываю юзера васю пупкина, что ему запрещено
delay_access 1 deny all # запретить всем, ну эта запись наверное означает запретить всем, кроме васи пупкина

предварительно надо сделать ACL для васи пупкина:

acl vasya_pupkin src 192.168.0.32 # например я понял эта запись означает привязка васи пупкина к хосту 192.168.0.32

ну а ACL делаются в конфиге выше (где идут списком эти ACL)

delay_parameters 1 800/800 - при этих параметрах злобный качальшик все будет качать на скорости 800 байт в секунду.

подправьте, кто знает как васю пупкина привязать к хосту 192.168.0.32 и как ему урезать права на скачку) я думаю как-то так должно работать

#323007

Тот пример что вы привели должен сработать. Проверьте. Вроде всё верно.

#323022

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

"Linux777⇓" написал:
delay_parameters 1 800/800 - при этих параметрах злобный качальшик все будет качать на скорости 800 байт в секунду.
#323197

а теперь я сделал динамическое шейпирование, для офиса и для того, кто слишком много качает...

сначала acl создал, потом применил пулы

acl office src 192.168.0.4-192.168.0.80/24 # назвал офис свой acl и задал диапазон адресов, интересующихся меня машин
delay_pools 2 # 2 задал два пула
delay_class 2 2 # второй пул второго класса, о классах писал выше. мне как раз второй класс подходит (сеть и юзеры)
delay_access 2 allow office # разрешить офису
delay_access 2 deny all # запрерить всем
text
стоит заметить порядок delay_access важен, сначала запретить, потом разрешить, если наоборот acl office работать не будет. вроде бы так это. короче говоря во второй пул попадают только машины с ACL office. 

delay_parameters 2 64000/64000 4000/4000 # В итоге вся подсеть, описываемая office, будет использовать канал не больше 512Кбит/с (64Кб/с), но каждый отдельный хост будет качать не более 4Кб в секунду. Этим правилом очень легко разграничить по скорости разные подсети, использующие один канал.

после чего делаем переконфигурирование сквида

text

squid -kp
squid -kr

думаю должно все работать.

#323203
"Linux777⇓" написал:
192.168.0.4-192.168.0.80/24

только почему то ругался на маску. убрал. оставил только адреса. вроде съел)

#323295

Да маски кажись не хочет, тока айпишки.

#323320
"kisil⇓" написал:
Да маски кажись не хочет, тока айпишки.

ага, без маски проглатил, не ругался. но судя по резултату, это не динамическое шейпирование, это просто я выставил пропускную способность на канал в офисе, что вся сеть, описываемая office, будет использовать канал не больше 512Кбит/с (64Кб/с), но каждый отдельный хост будет качать не более 4Кб в секунду. Этим правилом очень легко разграничить по скорости разные подсети, использующие один канал.

но в моем понимании хотелось бы так, например юзер качает на скорости ченидь, и если большой фильм ему автоматом образало скорость, т.е. чтобы система была умная, и могла автоматом обрезать скорость. такое возможно в сквиде? а просто урезать весь канал для офиса это да, я уже знаю как.

"kisil⇓" написал:
Да маски кажись не хочет, тока айпишки.

и судя по всему это статическое шейпирование.

#323321

Никто не знает, может ли сквид автоматически зарезать канал в зависимости от того, что качается, если html-страницы в браузере то все окей, скорость быстрая, а вот если юзер задумал фильмец или видео на youtube глянуть, тогда сквид автоматом установил ограничения на скорость, ну понизил ему скорость. В общем я думаю это понятно, называется динамическое шейпирование. Вопрос сквид умеет это делать??

#323325

или вот нашел вопрос похожий, но ответа пока нет

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

если нет, то с помощью чего можно это реализовать?

#323331

наверное нельзя с помощью сквида это сделать, нашел другое, http://rascal.su/blog/2010/09/13/%D0%B5%D1%89%D0%B5-%D0%BE%D0%B4%D0%B8%D0%BD-%D0%BF%D0%BE%D1%81%D1%82-%D0%BF%D1%80%D0%BE-%D1%83%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5-%D1%82%D1%80%D0%B0%D1%84%D0%B8%D0%BA%D0%BE%D0%BC/

http://agapoff.name/linux-shaping.html

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

#323341
Linux777 написал:

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

Поищи по форуму вместе со скриптами iptables, Xlin писал по этому поводу http://saikov.wordpress.com/

#323345
Linux777 написал:
наверное нельзя с помощью сквида это сделать, нашел другое, http://rascal.su/blog/2010/09/13/%D0%B5%D1%89%D0%B5-%D0%BE%D0%B4%D0%B8%D0%BD-%D0%BF%D0%BE%D1%81%D1%82-%D0%BF%D1%80%D0%BE-%D1%83%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5-%D1%82%D1%80%D0%B0%D1%84%D0%B8%D0%BA%D0%BE%D0%BC/

http://agapoff.name/linux-shaping.html

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

Даже работает.

text
#Режем входящую
NUMBERS_VLAN="bond0"
for number_vl in `echo $NUMBERS_VLAN`
do
echo $number_vl

tc qdisc del dev $number_vl root tc qdisc add dev $number_vl root handle 1: htb tc class add dev $number_vl parent 1: classid 1:1 htb rate 100Mbit

tc class add dev $number_vl parent 1:1 classid 1:100 htb rate 100Mbit ceil 100Mbit burst 15k tc class add dev $number_vl parent 1:1 classid 1:90 htb rate 1Mbit ceil 1Mbit burst 15k

tc qdisc add dev $number_vl parent 1:100 handle 100: sfq perturb 10 tc qdisc add dev $number_vl parent 1:90 handle 90: sfq perturb 10

tc filter add dev $number_vl parent 1:0 protocol ip prio 7 handle 100 fw classid 1:100 tc filter add dev $number_vl parent 1:0 protocol ip prio 1 handle 90 fw classid 1:90 done

#Основное iptables -t mangle -A FORWARD -s 192.168.0.0/24 -o ppp999 -p tcp -m multiport --dport 110,25,143,993,21,20,143,465,1024,8000 -j MARK --set-mark 90 iptables -t mangle -A FORWARD -i ppp999 -d 192.168.0.0/24 -p tcp -m multiport --sport 110,25,143,993,21,20,143,465,1024,8000 -j MARK --set-mark 90 iptables -A FORWARD -s 192.168.0.0/24 -o ppp999 -p tcp -m multiport --dport 110,25,143,993,21,20,143,465,1024,8000 -j ACCEPT iptables -A FORWARD -i ppp999 -d 192.168.0.0/24 -p tcp -m multiport --sport 110,25,143,993,21,20,143,465,1024,8000 -j ACCEPT

#HTTPS iptables -t mangle -A FORWARD -s 192.168.0.0/24 -o ppp999 -p tcp -m multiport --dport 443 -j MARK --set-mark 90 iptables -t mangle -A FORWARD -i ppp999 -d 192.168.0.0/24 -p tcp -m multiport --sport 443 -j MARK --set-mark 90 iptables -A FORWARD -s 192.168.0.0/24 -o ppp999 -p tcp -m multiport --dport 443 -j ACCEPT iptables -A FORWARD -i ppp999 -d 192.168.0.0/24 -p tcp -m multiport --sport 443 -j ACCEPT

#Разрешаем NETBIOS #iptables -t mangle -A FORWARD -s 192.168.0.0/24 -d 192.168.128.0/24 -j MARK --set-mark 100 #iptables -t mangle -A FORWARD -s 192.168.128.0/24 -d 192.168.0.0/24 -j MARK --set-mark 100 #iptables -A FORWARD -s 192.168.0.0/24 -d 192.168.128.0/24 -p udp -m multiport --ports 135,136,137,138,139,445 -j ACCEPT #iptables -A FORWARD -s 192.168.128.0/24 -d 192.168.0.0/24 -p udp -m multiport --ports 135,136,137,138,139,445 -j ACCEPT #iptables -A FORWARD -s 192.168.0.0/24 -d 192.168.128.0/24 -p tcp -m multiport --ports 135,136,137,138,139,445 -j ACCEPT #iptables -A FORWARD -s 192.168.128.0/24 -d 192.168.0.0/24 -p tcp -m multiport --ports 135,136,137,138,139,445 -j ACCEPT

#Разрешаем VIPNET iptables -t mangle -A FORWARD -s 192.168.0.0/24 -o ppp999 -p udp -m multiport --ports 55777 -j MARK --set-mark 90 iptables -t mangle -A FORWARD -i ppp999 -d 192.168.0.0/24 -p udp -m multiport --ports 55777 -j MARK --set-mark 90 iptables -A FORWARD -s 192.168.0.0/24 -o ppp999 -p udp -m multiport --ports 55777 -j ACCEPT iptables -A FORWARD -i ppp999 -d 192.168.0.0/24 -p udp -m multiport --ports 55777 -j ACCEPT

#КАС ДЛЯ ПОДСЕТЕЙ NUMBERS_IP="192.168.10.0/24 192.168.5.0/24 10.128.128.0/24 192.168.23.0/24" for number_i in `echo $NUMBERS_IP` do #Разрешаем KAS AGENT SERVER STRAJ iptables -t mangle -A FORWARD -s $number_i -d 192.168.0.3 -j MARK --set-mark 100 iptables -t mangle -A FORWARD -s 192.168.0.3 -d $number_i -j MARK --set-mark 100 iptables -A FORWARD -s $number_i -d 192.168.0.3 -p udp -m multiport --ports 13000 -j ACCEPT iptables -A FORWARD -s 192.168.0.3 -d $number_i -p udp -m multiport --ports 13000 -j ACCEPT iptables -A FORWARD -s $number_i -d 192.168.0.3 -p tcp -m multiport --ports 13000 -j ACCEPT iptables -A FORWARD -s 192.168.0.3 -d $number_i -p tcp -m multiport --ports 13000 -j ACCEPT

#ICMP KAS iptables -A FORWARD -s $number_i -d 192.168.0.3 -p icmp -j ACCEPT iptables -A FORWARD -s 192.168.0.3 -d $number_i -p icmp -j ACCEPT done

#Режем исходящую tc qdisc del dev ppp999 root tc qdisc add dev ppp999 root handle 1: htb tc class add dev ppp999 parent 1: classid 1:1 htb rate 100Mbit tc class add dev ppp999 parent 1:1 classid 1:90 htb rate 1Mbit ceil 1Mbit burst 15k tc qdisc add dev ppp999 parent 1:90 handle 90: sfq perturb 10 tc filter add dev ppp999 parent 1:0 protocol ip prio 1 handle 90 fw classid 1:90

#323349

Kettler благодарю за листинг, пока втыкаю сижу в tc, т.к. не далел подобного еще. Но я правильно общую мысль понял, что средствами squid этого не сделать (динамическое шейпирование), squid может только статическое шейпирование, просто указать delay_pools в конфиге сквида. а вот tc + iptables поможет решить динамичекое шейпирование. верно?

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

text
#delay_parameters 1 800/800 
# злобный качальщик все качает на скорости 800/800 бит/с

ну либо более рационально для всех

text
delay_parameters 2 64000/64000 4000/4000 
"zenon⇓" написал:
Поищи по форуму вместе со скриптами iptables, Xlin писал по этому поводу http://saikov.wordpress.com/

поищу, спасибо.

#346673

Всем привет. Сразу отмечу дружить с NIX системами начал недавно. поднял сервер на базе Ubuntu 12.04 LTS. Поднял прозрачный прокси сервер Squid3 вроде как все работает если прописано так delay_parameters 1 -1/-1 -1/-1, но при установке ограничений скорости delay_parameters 1 180000/180000 128000/128000 страницы на клиентской машине стартуют загрузку но не открываются.
скорость инета 3Мбит/с

Войдите или зарегистрируйтесь, чтобы ответить.