Squid delay pools

squid-bucketДля ограничения скорости в squid используется механизм delay pools. В этой публикации мы рассмотрим практическое применение данного механизма на proxy сервере squid, сконфигурированном в этой статье. Все настройки производятся на Ubuntu Server 16.04.01 LTS.

Определим в /etc/squid/squid.conf количество пулов

delay_pools 2

В данном случае будет использоваться два пула.

Затем определяются классы пулов. Всего существует 5 классов:

  1. Общее ограничение скорости для всех
  2. Общее ограничение скорости для всех + ограничение скорости для каждого ip адреса
  3. Общее ограничение скорости для всех + ограничение скорости для под сети + ограничение скорости для каждого ip адреса
  4. Тоже самое, что и в классе 3 + ограничение скорости для каждого пользователя (требуется настроенный механизм аутентификации пользователей)
  5. Запросы группируются по тегам, определенным в external_acl (этот вариант рассматриваться не будет)

Мы будем использовать пулы 2-го и 4-го классов

delay_class 1 2
delay_class 2 4

Первая цифра означает номер пула, вторая номер класса.

Далее необходимо указать разрешения для пулов

acl host1 src 192.168.1.24/32
external_acl_type internet ttl=300 negative_ttl=60 %LOGIN /usr/lib/squid/ext_kerberos_ldap_group_acl -a -g Internet -D 4SKILL.LOC
. . .
http_access deny manager
http_access allow host1
http_access allow internet
http_access allow localhost
http_access deny all
. . .
delay_access 1 allow host1
delay_access 2 allow internet

После delay_access идет номер пула, затем разрешающее слово allow и объект, к которому применяется пул.

Важно не забывать про порядок определения разрешений в директиве http_access. В данном примере первым идет разрешение для host1, вторым для группы internet. Следовательно если пользователь из гпуппы  internet аутентифицируется на компьютере, определенном в host1, сработает первый пул. При аутентификации пользователя, являющегося членом группы internet, на компьютере, отличном от host1, сработает второй пул.

В конце нужно определить порог допустимой скорости скачивания для каждого пула

delay_parameters 1 none 128000/256000
delay_parameters 2 none none none 64000/128000

Число после delay_parameters означает номер пула, за ним определяются скоростные характеристики пула.

Так как первый пул относится ко второму классу, первым указывается общее ограничение скорости, в данном случае это слово «none». «none» равносильно записи «-1/-1» и означает без ограничений. То есть первый пул не имеет ограничения скорости для всех.

128000/256000 — это скорость, выделенная для каждого ip адреса. Первый параметр определяет скорость канала в байтах (не в битах) в секунду. Второй параметр определяет величину буфера в байтах. Фактически значение 128000 байт показывает, что скорость загрузки будет равна 128 КБ/с. Большая буква Б означает байты. Маленькая буква б — биты. Зная, что 1 байт = 8 бит, можно определить скорость соединения. 128000 х 8 = 1024000 = 1 Мб/с. Скорость соединения можно проверить на сайте speedtest.net.

Для лучшего понимания работы механизма, можно представить скорость загрузки 128000 Б/с как ширину трубы, через которую вода (полученный трафик) попадает в ведро (буфер) размером 256000 байт. Из ведра вода выливается в конечный объект, определенный пулом (сеть, под сеть, хост или пользователь).

Второй пул определен по аналогии с первым. Общая скорость, скорость на под сеть и скорость на ip адрес не имеют ограничения. Скорость для пользователя определена значением 64000/128000. То есть пользователь будет качать файл со скорость 64 КБ/с, а скорость его соединения равна 64000 х 8 = 512000 = 512 Кб/с.

Важно помнить, что при определении скоростных параметров, предыдущий параметр перекрывает последующий. То есть значение общего скоростного параметра перекрывает значение скоростного параметра для под сети. Значение параметра под сети перекрывает значение параметра ip адреса. Значение параметра ip адреса перекрывает значение параметра пользователя. Рассмотрим на примере записи

delay_parameters 2 32000/64000 none none 64000/128000

не смотря на то, что пользователю позволено загружать файлы из сети со скорость 64 КБ/с, фактическая скорость загрузки не превысит 32 КБ/с.

Во время тестирования, была замечена особенность. Запись 64000/64000 в пуле первого класса выдает скорость загрузки 64 КБ/с. В пулах других классов скорость загрузки почему-то падает в два раза, и становится равной 32 КБ/с. Чтобы  в пулах  2-4 классов получить «правильную» скорость, нужно умножить указанное значение скорости на 2, и записать получившее число в значение буфера. К примеру для 64 КБ/с запись будет иметь вид 64000/128000, для 512 КБ/с — 512000/1024000.

Итоговая запись в /etc/squid/squid.conf

. . .
delay_pools 2
delay_class 1 2
delay_class 2 4
delay_access 1 allow host1
delay_access 2 allow internet
delay_parameters 1 none 128000/256000
delay_parameters 2 none none none 64000/128000

После указания всех параметров нужно перезапустить squid

# squid -k reconfigure

 

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *