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

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

Онлайн-курс по устройству компьютерных сетей
На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.

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

За ограничение скорости в 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 для наших нужд, попробуем реализовать следующую схему:

Будем считать, что у нас имеется входящий интернет канал шириной 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), следует помнить, что поиск в списках ведется по порядку и до первого совпадения, поэтому нужно соблюдать необходимую очередность, сначала указываем хосты, затем подсети. Аналогичных правил следует придерживаться и при указании пулов.

1acl direktor src 192.168.0.110/32
2acl lan1 src 192.168.0.0/24
3acl lan2 src 192.168.1.0/24

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

1http_access allow direktor
2http_access allow lan1
3http_access allow lan2

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

1delay_pools 2
2delay_class 1 1
3delay_class 2 3

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

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

1delay_access 1 allow direktor
2delay_access 1 deny all
3delay_access 2 allow lan1
4delay_access 2 allow lan2
5delay_access 2 deny all

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

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

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

Онлайн-курс по устройству компьютерных сетей
На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.

Помогла статья? Поддержи автора и новые статьи будут выходить чаще:

Поддержи проект!

Или подпишись на наш Телеграм-канал: Подпишись на наш Telegram-канал