Ubuntu Server. Ограничиваем скорость клиентов через Squid.

| Комментариев: 73
squid_speed.png
Наши читатели часто спрашивают, каким образом можно ограничить скорость или разделить канал между клиентами. Сегодня мы рассмотрим как это можно сделать с помощью прокси-сервера Squid, взяв за основу уже настроенный нами роутер.
Излагая материал данной статьи мы будем считать, что читатель уже имеет настроенный по нашим рекомендациям роутер и владеет начальными навыками его администрирования: знает где находятся конфигурационные файлы, умеет их редактировать и сохранять, а также перезапускать службы.

За ограничение скорости в Squid отвечает механизм пулов, работающий по следующему принципу: каждый пул имеет свой размер и свою скорость заполнения. Любой запрошенный клиентом объект сначала помещается в пул, а затем отдается клиенту. Размер буфера и скорость его заполнения задается в байтах и записывается следующим образом: 120000/120000, эта запись обозначает пул с размером буфера в 120 кБ и скоростью заполнения 120 кБ/с. Неограниченный размер буфера / скорости указывается как -1/-1.

В зависимости от значений возможны три варианта работы пула:

  • Размер буфера и скорость заполнения равны. Клиент всегда качает с максимальной скоростью, равной скорости заполнения.
  • Размер буфера меньше скорости заполнения. Клиент получает трафик с постоянной скоростью, численно равной размеру буфера, но Squid не подкачивает данные пока буфер не будет опустошен. Наполнение буфера (т.е. скачивание информации из интернета) происходит на скорости заполнения.
  • Размер буфера больше скорости наполнения. Клиент получает объекты не превышающие объем буфера на максимальной скорости, численно равной размеру буфера. Объекты большего размера он получает на скорости равной скорости заполнения буфера.
Также существуют три класса пулов:

  • Первый - ограничивается общая скорость загрузки
  • Второй - ограничивается общая скорость загрузки и скорость каждого хоста.
  • Третий - ограничивается общая скорость загрузки, скорость подсети и скорость каждого хоста.
На первый взгляд кажется довольно сложно. Однако это не так, разберем несколько примеров.

Пример 1. Необходимо ограничить скорость сети  на уровне 1024 кб/с и скорость каждого клиента на уровне 256 кб/с.
Для этой цели нам понадобится пул второго класса с характеристиками 128000/128000 32000/32000 (не забываем переводить килобиты в килобайты)

Пример 2. Необходимо обеспечить серфинг на полной скорости канала (1024 кб/с), а для закачек более 1 МБ ограничить скорость на 128 кб/с. Создадим пул первого класса с параметрами 1000000/16000. Все объекты размером меньше 1 МБ будут отдаваться на максимальной теоретической скорости 8 Мбит/с, реально ограниченной максимальной скоростью канала, все объекты размером свыше одного МБ будут скачиваться на скорости не выше 128 Кб.

Теперь рассмотрим практический пример конфигурирования Squid для наших нужд, попробуем реализовать следующую схему:

squid_speed_001.png
Будем считать, что у нас имеется входящий интернет канал шириной 2048 кб/с который требуется разделить на две подсети LAN1 (192.168.0.0/24) и LAN2 (192.168.1.0/24)  выделив по 1024 кб/с на каждую. В каждой из подсетей скорость конечных клиентов требуется ограничить на уровне 128 кб/с. Также в подсети LAN1 необходимо выделить неограниченный канал для ноутбука директора (192.168.0.110).

Задача ясна, приступим к реализации. Все изменения следует вносить в конфигурационный файл Squid  /etc/squid/squid.conf.

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

acl direktor src 192.168.0.110/32
acl lan1 src 192.168.0.0/24
acl lan2 src 192.168.1.0/24

Установим необходимые права доступа

http_access allow direktor
http_access allow lan1
http_access allow lan2

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

delay_pools 2
delay_class 1 1
delay_class 2 3

Для параметра delay_class указывается номер пула и его класс, так вторая строка создает первый пул первого класса, третья второй пул третьего класса.

Следующим шагом зададим принадлежность групп доступа к пулам:

delay_access 1 allow direktor
delay_access 1 deny all
delay_access 2 allow lan1
delay_access 2 allow lan2
delay_access 2 deny all

Осталось задать параметры пулов. Следует помнить, что параметры указываются по порядку: общие - подсеть - хост и в том же порядке перекрывают друг друга. Если, например, на общем уровне действуют ограничения на размер файла, то они автоматически распространяются на подсеть и хост.

delay_parameters 1 -1/-1
delay_parameters 2 -1/-1 128000/128000 16000/16000

Сохраняем конфигурационный файл, перезапускаем Squid. Проверяем, все должно работать.

 

Комментариев: 73

Автор, низкий поклон за этот ресурс.

Большое спасибо. Как только у нас будет хорошая скорость (в данный момент всего 256) обязательно применим. Но сейчас несколько другая проблема. Я уже смогу (прочитал Вашу инструкцию) разделить 256 на 10 - строго поровну. А если будет работать только 2-3 компьютера, или даже вообще один... Такое тоже бывает. Они же будут сидеть на этом ограничении, при наличии резерва скорости в сети.
Насколько мне показалось, данными средствами Squid невозможно динамически равномерно распределить скорость между клиентами. А лично мне хотелось бы именно этого.
Но всё равно, ещё раз спасибо за материал. Как всегда очень просто и понятно. Пригодиться.

Спасибо! Очень ждал этот материал. В связи с этой темой, хотелось бы получить комментарии к статье о борьбе с торрент-трафиком, а именно, можно ли заставить ходить торрент-трафик только через прокси и как будут влиять на него ограничения скорости описанные в настоящей статье

А ограничения в скорости закачки не скажется на загрузке тех же обновлений для систем клиентов? Тот же Firefox весит за 30 метров. И если я использую на шлюзе и клиентах apt-cacher-ng, то сейчас обновления (кроме первого скачивания для клиента) идут "со свистом" :). На это ограничения по скачиванию не повлияют?

А как ведет себя настройка по умолчанию? Если всего этого не настраивать, как поделится скорость между 10ю пользователями например?

А есть ли какой-нить быстрый способ настроить так что бы канал делился поровну между активными на текущий момент пользователями ?

Здравствуйте!
Строку delay_parameters 2 записал в виде:
delay_parameters 2 -1/-1 1000000/64000 1000000/16000
Тем самым надеялся на то что файлы менее 1 Мб будут закачиваться на максимальной скорости. Однако, все файлы, даже самые маленькие загружаются со скоростью 16 кб в сек.
Что я понял не так?

Попробовал реализовать Пример 2 - ограничения скорости также сказываются на всём трафике не зависимо от размера загружаемых данных :(

канал 1024 кбит/сек, пул 1 го и 3 го класса, с цифрами пробовал по разному, последнее выглядит так:
acl test src 192.168.1.15/32
acl lan1 src 192.168.0.0/24
acl lan2 src 192.168.1.0/24

http_access allow test
http_access allow lan1
http_access allow lan2

delay_pools 2
delay_class 1 1
delay_class 2 3

delay_access 1 allow test
delay_access 1 deny all
delay_access 2 allow lan1
delay_access 2 allow lan2
delay_access 2 deny all

delay_parameters 1 1000000/16000
delay_parameters 2 -1/-1 1000000/64000 1000000/16000

скорость урезается для всего трафика, а хотелось бы что бы только на объекты более 1 мб

Ubuntu 10.04.1 LTS
Squid Cache: Version 2.7.STABLE7

Ubuntu 10.04.1 LTS - server

У кого нибудь реально работает Пример 2 ?

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

не получилось у меня, но я очень долго бился.. что может быть не так?
конфиг ведь рабочий! только работает не так как надо :)
может найдете время посмотреть на него:
ubuntuone.com/p/YlV/

Кое-какого результата удалось достигнуть "перевернув" соотношение из второго примера вместо 1000000/16000 -> 16000/1000000. Что позволяет, как я понимаю, получить на максимальной скорости первый миллион байт со страницы. Но это уже другая история?

Та же история со вторым примером. Скорость режется для всех закачек. Пробовал выставлять 100000000/125000, но все равно все файлы качаются с ограничением. Делал так

acl mynet src 192.168.1.10/24

delay_pools 1
delay_class 1 1

delay_access 1 allow mynet
delay_access 1 deny all

delay_parameters 1 100000000/125000

Что с не так? Не пойму((

Здравствуйте. Хотелось бы увидеть статью о настройки связки squid3+sams2+AD. У многих с этим проблемы.

Здравствуйте, спасибо за столь доходчивые howto.
И тем не менее, несмотря на нетривиальность задачи динамического распределения занятости канала, (см. первый коммент), не собираетесь ли вы сваять нечто подобное?. Ручаюсь, интерес к подобному материалу будет огромным. На широких каналах эта задача не так критична, но на модемных, где и 512Кб/с не редкость, а раздавать приходится на 10-20 компьютеров, это просто край, хоть вешайся.

спасибо вам огромное!

Сделал прокси после прикрутил авторизацию и хотел прокрутить ограничение скорости, но не работает в этой конфигурации:(
Неужели прокси и авторизация не работают в месте с ограничением скорости?

Должны ли работать эти ограничения,если установлен и работает DansGuardian,у меня не работают,смущает то что трафик заворачивается на порт DansGuardian (# Заворачиваем http на прокси
iptables -t nat -A PREROUTING -i eth1 -d ! 10.0.0.0/24 -p tcp -m multiport --dport 80,8080 -j DNAT --to 10.0.0.1:8081)пожалйста подскажите правильно ли я думаю.

подскажите пожалуйста, когда выставляю скорость больше чем 4000/4000 ограничение перестает действовать. мне нужна скорость 15-20 кБ/с, но никак не выходит начинает качать почти на максимуме. заранее спасибо!

я все уже перепробовал с 1го по 3ий,ща 2 поставил.
acl mynet src 192.168.8.88/32

delay_pools 1
delay_class 1 2

delay_access 1 allow mynet
delay_access 1 deny all

delay_parameters 1 12800/128000 8000/8000

так тоже не работает,разгон начинается не сразу,но постепенно скорость все равно растет больше 100 000. проверяю downloadmestero'ом. а что имеете ввиду перед сквидом?

master настроен через прокси 192,168,1,1:3128, DansGuardian я вообще не нашел.может что то еще есть в ip tables, но ip я взял рядовой,из тех за которыми сидят студенты,а старого админа я в глаза не видел.как быть не знаю

Возможно ограничить в одной сети общую скорость загрузки по разным объемам закачки, например:
для закачек более 10 МБ ограничить скорость на 1024 кб/с
для закачек более 1 МБ ограничить скорость на 2048 кб/с
все что меньше 1Мб - на полной скорости
?

Здравствуйте хочу попробовать поставить squid,dansguardian,clamav и havp,но так чтобы первым из локальной сети запросы принимал squid затем dansguardian а затем все остальные.Вопрос следующий,можно ли такое организовать только при помощи iptables,если нет то поставить havp,clamav,dansguardian на виртуальную машину,а с неё направить на squid который будет стоять на реальном железе и смотреть в локальную сеть.

Спасибо большое,покопался в FAQ DG совет тот же самый
Looking in Squid's access.log, all entries have the client IP given as the box running DansGuardian (typically 127.0.0.1). How can I log the original client IPs?

Turn on the "forwardedfor" option in dansguardian.conf, and get Squid to obey the "X-Forwarded-For" header in incoming requests. For Squid 2.5, you will have to apply the following patch: http://devel.squid-cache.org/follow_xff/follow_xff-2.5.patch

This has become a core feature in Squid 2.6-STABLE1 and above. Be wary of also enabling the "usexforwardedfor" option in DG, as it is trivial for clients to spoof headers in the original request.

Не могли бы Вы,хоты бы в двух словах описать как запустить еще один Squid перед DG,пытался найти что-то похожее,наткнулся на каскадирование,но как понял это не совсем то.

Странно,в последних комментариях Ваш ответ видно,(Уваров А.С.: Собственно каскадирование вам и нужно, хотя это не самый лучший читать дальше)а тут его нет.

После добавления комментария Ваш ответ появился(страницу обновлять пробовал ))) ).Я только за X-Forwarded-For,но хочу сделать авторизацию по логину и паролю через Squid,то есть как я понимаю из Вашей статьи о авторизации в Squid,мне надо будет прописать адрес Squid в браузере, но тогда запросы будут ходить мимо DG.При помощи опции X-Forwarded-For в данном случае можно настроить авторизацию только по ip?

Комментировать

Подписка на блог

Подпишись  на обновление блога по RSS Мы в Твиттере

 

Архивы по месяцам

Реклама

Статистика

Работает на  Movable Type 5.12

 

Яндекс.Метрика

География

free counters

Об этой записи

Сообщение опубликовано 21.12.2010 20:58. Автор — Уваров А.С..

Предыдущая запись — Ubuntu Server. Настраиваем авторизацию через Squid.

Следующая запись — 1С Предприятие 7.7 Подключение сканера штрих-кода. Часть 1.

Смотрите новые записи на главной странице или загляните в архив, где есть ссылки на все сообщения.