The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Использование CBQ для ограничения трафика в Linux (cbq traffic limit linux queue)


<< Предыдущая ИНДЕКС Правка src Установить закладку Перейти на закладку Следующая >>
Ключевые слова: cbq, traffic, limit, linux, queue,  (найти похожие документы)
From: Alexey Topchy <apex595@yahoo.com.> Newsgroups: email Date: Mon, 17 May 2005 14:31:37 +0000 (UTC) Subject: Использование CBQ для ограничения трафика в Linux CBQ представляет собой систему ограничения трафика по скорости. Это наиболее распространенный вариант шейпера (в RedHat вроде бы даже включен в дистрибутив). К сожалению, может ограничивать только исходящий трафик с компьютера, на котором установлен. Данное описание составлено на основе перевода оригинальной документации с английского языка. Переводил его я в меру своих способностей. Может где и ошибся. Итак начнем. Для самых маленьких Для начала рассмотрим простейший случай настройки. По личному опыту - обычно больше и не надо. Сама по себе система CBQ представляет собой один исполняемый файл. Обычно он называется cbq.init и расположен в папке /etc/rc.d. Запуск осуществляется командой `/etc/rc.d/cbq.init start` а остановка `/etc/rc.d/cbq.init stop`. Также можно ввести команду `/etc/rc.d/cbq.init restart` для перезапуска. Настройка CBQ производится с помощью написания файлов конфигурации шейперов. Файлы эти обычно располагаются в папке /etc/sysconfig/cbq и должны иметь имена следующего формата: cbq-<cbq_id>.<name> , где: "cbq-" - эта часть имени обязательна. <cbq_id> - номер шейпера в системе. Это должно быть шестнадцатеричное число в диапазоне 2-FFFF (номера 0 и 1 зарезервированы). <name> - название шейпера. На ваше усмотрение. Примеры: cbq-20.director-internet Cbq-FE03.godzilla Каждый файл должен содержать строки: DEVICE=<if-name>,<bandwidth>{Mbit|Kbit|bps} RATE=<speed>{Mbit|Kbit|bps} WEIGHT=<weigth>{Mbit|Kbit|bps} RULE=[from_addr[/mask][:port],][to_addr[/mask][:port]] ... DEVICE - описание интерфейса <if-name> - наименование интерфейса. В Linux'е обычно eth0, eth1, eth2... или ppp0, ppp1... <bandwidth> - скорость интерфейса Есть одна тонкость - шейпер может ограничивать только трафик исходящий с указанного интерфейса. Если надо ограничить входящий трафик - напишите еще один файл с другим интерфейсом. И еще - если в одном файле указали "DEVICE=eth0,10Mbit", то в остальных файлах для этого интерфейса можно писать просто "DEVICE=eth0". RULE и WEIGHT - параметры шейпера. <speed> - лимит скорости <weigth> - погрешность лимита. То есть ограничиваемая скорость будет максимум RATE+WEIGHT, а как правило - не выше RATE. Обычно величина WEIGHT принимается 1/10 от RATE. RULE - это указание от кого к кому (имеются в виду IP-адреса и порты) работает данное ограничение. Проще всего понять на примерах: RULE=192.168.1.0/24:80,81.95.224.64/26:80 ограничивает трафик от подсети 192.168.4.0/24 (адреса 192.168.4.1-192.168.4.254) до подсети 81.95.224.64/26 (адреса 81.95.224.64 - 81.95.224.126) по порту 80 (HTTP). RULE=192.168.2.1:21,10.0.1.0/24:2021 ограничивает трафик, который идет с порта 21 адреса 192.168.2.1 на порт 2021 до порта 2021 любого компьютера подсети 10.0.1.0/24 (адреса 10.0.1.1 - 10.0.1.254). RULE=192.168.4.5:25, ограничивает весь трафик идущий с адреса 192.168.4.5 по порту 25 куда угодно (обратите внимание - запятая в конце обязательна). RULE=192.168.5.0/25:110 ограничивает весь трафик идущий на компьютеры подсети 192.168.5.0/25 (адреса 192.168.5.1 - 192.168.5.126) по порту 110 откуда угодно (обратите внимание - запятая в начале не нужна). В файле может быть несколько параметров RULE. При этом ограничивается трафик по всем RULE сразу, а не для каждого отдельно. Примеры файлов конфигурации: Пример 1. DEVICE=eth0,10Mbit RATE=64Kbit WEIGHT=6Kbit RULE=192.168.1.0/24:8080,10.10.10.0/28:8080 RULE=192.168.75.3,81.95.224.30 Пример 2. DEVICE=ppp1,56Kbit RATE=32Kbit WEIGHT=3Kbit RULE=192.168.2.2 Трафик, не попадающий ни под одно правило, описанное в файлах - не ограничивается. Немного теории Шейпер работает так: все ИСХОДЯЩИЕ пакеты, т.е. предназначенные для выдачи на любой интерфейс вместо того, чтобы быть отправляться напрямую на интерфейс ставятся в разные очереди. Длина каждой очереди настраивается. Настраиваются также: скорость выдачи данных из очереди (это и есть собственно лимит), длина очереди (размер в байтах), размер пакета, выходящего из очереди (может не совпадать с длиной поступающих пакетов) и многое другое. Пакеты, не помещающиеся в очередь, сбрасываются. Данные из очереди выдаются на интерфейс и далее - к клиенту. Вот как раз каждый файл конфигурации и представляет собой описание одной очереди. CBQ позволяет также строить иерархические системы очередей. Каждая очередь может брать данные из выхода другой очереди. Таким образом очередь может быть дочерней для одной очереди и родительской для многих других. Для правильной работы очереди нужно знать следующие данные: А) Какие пакеты направлять в очередь, а именно: - пришедшие от каких адресов/портов; - предназначенные для каких адресов/портов; - предназначенные для выдачи на какой интерфейс. Б) Параметры самой очереди, а именно: - размер очереди в байтах; - скорость выдачи данных из очереди; - приоритет очереди; - размер пакета, выдаваемого из очереди; - и т.д. Очереди бывают следующих классов: - очереди без определенного класса (класс NONE). Если такая очередь переполняется, то пакеты, не вмещающиеся в нее, остаются в родительской очереди (если она есть), а если и она переполняется, то данные, предназначенные для нее, остаются в ее родительской очереди, а когда и та переполняется - в родительской очереди еще более высокого уровня и т.д. И только если переполняется самая верхняя очередь (класса CBQ), то пакет сбрасывается. Однако процесс можно регулировать параметрами BOUNDED и ISOLATED. - CBQ - это очереди самого верхнего уровня (они все имеют cbq_id, равный 1). Их бывает по одной на каждый интерфейс. Создаются автоматически. В каждую записываются пакеты, предназначенные для данного интерфейса. Нельзя самому назначать параметры для таких очередей. - TBF - очереди со строгим ограничением (термин мой). Пакеты, не помещающиеся в очередь, просто сбрасываются. Поведение очереди определяется ее собственными [5]параметрами и от родительской никак не зависит. - SFQ - очереди со справедливым распределением (термин мой). В этом типе очередей лимит родительской очереди распределяется среди дочерних по особому математическому закону для более справедливого и равномерного распределения. Можно создать очередь, динамически меняющую скорость выдачи информации в зависимости от дня недели и времени суток. В общем это можно представить как водопроводную систему. На входе - краны (очереди класса CBQ). Затем трубы разных диаметров и длины. Длина трубы символизирует в нашем случае размер очереди, а ее диаметр - скорость выдачи информации. На некоторых трубах есть клапаны на входе или выходе (параметры BOUNDED/ISOLATED). На трубах также могут быть вентили (с регулировкой в зависимости от времени суток и дня недели)(параметры TIME). Продвинутая настройка Рассмотрим теперь подробно ВСЕ возможные параметры конфигурационных файлов. Интерфейс DEVICE=<if-name>,<bandwidth>[,<weight>] - описание устройства, параметр обязательный <if-name> - наименование интерфейса. В Linux'е обычно eth0, eth1, eth2... или ppp0, ppp1... <bandwidth> - скорость интерфейса (10Mbit, 56Kbit, 2Mbit ...) <weigth> - вес интерфейса (обычно 10% от <bandwidth>) Примечание: - если в одном файле указали "DEVICE=eth0,10Mbit,1Mbit", то в остальных файлах для этого интерфейса можно писать просто "DEVICE=eth0" Еще раз напомню, что шейпер ограничивает только трафик, исходящий с данного интерфейса. Общие параметры для всех классов очередей RATE=<speed>{Mbit|Kbit|bps} - скорость выдачи данных с очереди, параметр обязательный Примеры: RATE=10Mbit (10 Мбит/с) RATE=128Kbit (123 Кбит/с) RATE=3600bps (3600 байт/с) ********** Не бит/с ********** ---------- WEIGHT=<speed>{Mbit|Kbit|bps} - вес шейпера. Обычно 10% от RATE Примеры: WEIGHT=1Mbit (1 Мбит/с) WEIGHT=12Kbit (12 Кбит/с) WEIGHT=360bps (360 байт/с) ********** Не бит/с ********** RULE=[[saddr[/prefix]][:sport[/mask]],][daddr[/prefix]][:dport[/mask]] Это фильтр, определяющий, для каких пакетов используется данная очередь. Параметр обязательный. Он управляет т.н. "u32 filter rules". saddr - адрес источника (IP). prefix - маска подсети источника. Указывается не маска в формате xxx.xxx.xxx.xxx, а число вкл. бит (32-1). 24 соответствует 255.255.255.0, 16 - 255.255.0.0 и т.д. daddr/prefix - аналогично для адреса назначения. sport - порт источника (0-65535). mask - маска для порта (нужна, если надо указать не один порт , а диапазон протов). Это шестнадцатеричное число формата 0x**** (например 0xfffe - маска на два порта, 0xff00 - на 256 портов). Вообще число портов подряд равно 0xffff минус mask. dport/mask - аналогично для порта назначения. Примеры: RULE=10.1.1.0/24:80 RULE=10.2.2.5 RULE=10.2.2.5:20/0xfffe RULE=10.5.5.5:80, RULE=:25,10.2.2.128/26:5000 RULE=192.168.1.0/24:80,81.95.224.64/26:80 Примечание: В файле может быть несколько параметров RULE. При этом ограничивается трафик по всем RULE сразу, а не для каждого отдельно. ---------- TIME=[<dow>,<dow>, ...,<dow>/]<from>-<till>;<rate>/<weight>[/<peak>] Эти параметры (их может быть несколько в одном файле) дают возможность назначить разные лимиты скорости в зависимости от дня недели и времени суток. <dow> - дни недели (0-7, 0=воскресение). Если лимит действует для нескольких дней, перечислите их через запятую. Если не указано, то лимит действует на все дни. <from-till> - интервал времени в формате ЧЧ:MM-ЧЧ:MM. Указывать обязательно. <rate> - лимит скорости для данного периода (Mbit|Kbit|bps). См. RATE. Указывать обязательно. <weight> - вес лимита для данного периода (Mbit|Kbit|bps). См. WEIGHT. Указывать обязательно. <rate> - пик скорости для данного периода (Mbit|Kbit|bps). См. PEAK. Указывать необязательно. Примеры: TIME=0,1,2,5/18:00-06:00;256Kbit/25Kbit TIME=18:00-06:00;256Kbit/25Kbit Примечания: 1. Если интервалы времени перекрываются, действует тот, который описан последним. 2. Если текущее время не попадает ни под одну строку TIME, используются глобальные параметры RATE, WEIGHT и PEAK 3. Для того, чтобы это все действовало необходимо выполнять команду `/etc/rc.d/cbq.init timecheck` каждую минуту (если с точностью до минут надо менять шейпер). ---------- REALM=[srealm,][drealm] - Параметр управляет т.н. "route filter rules". Параметр необязательный. srealm и drealm - это должны быть десятичные числа или соответствующие им строковые значения из файла /etc/iproute2/rt_realms. Примеры: REALM=russia,internet от russia до internet REALM=10 до 10 от всех REALM=freenet, от freenet до всех REALM=internet,5 ot internet до 5 ---------- MARK=<mark> - управляет т.н. "fw filter rules". Параметр необязательный. <mark> - десятичное число - тег для пакетов. Пример: MARK=15 Примечание: В одном файле может быть несколько строк MARK. ---------- PRIO=<1-8> - приоритет шейпера (1-8). 1- максимальный приоритет. Необязательный параметр. Если не указать - по умолчанию 5. Пример: PRIO=3 ---------- PARENT=<2-FFFF> - номер родительской очереди. Необязательный параметр. Если не указать - данные берутся напрямую с очереди типа CBQ соответствующего интерфейса. Пример: PARENT=3F00 Примечание: родительская очередь должна быть описана раньше, чем дочерние. По видимому это означает, что номер ее должен быть меньше. ---------- LEAF=none|tbf|sfq - класс очереди. Можно создавать очереди класса TBF или SFQ, а также очереди без класса. Указывать необязательно, по умолчанию tbf. Пример: LEAF=sfq ---------- BOUNDED=yes|no - ограничение. Если поставить yes, то пакеты при переполнении очереди не остаются в родительской, а сбрасываются. Указывать необязательно, по умолчанию yes Пример: BOUNDED=yes Примечание: Для TBF - очередей всегда yes (даже если прямо указать no). ---------- ISOLATED=yes|no - изоляция. Если поставить yes на родительской очереди, то все дочерние будут работать как будто у них BOUNDED=yes, то есть без резервирования. Указывать необязательно, по умолчанию "no" Пример: ISOLATED=yes Параметры для очередей класса TBF LIMIT=<bytes>[{Mb|Kb}] - длина очереди в мегабайтах (Mb), килобайтах (Kb) или в байтах, если не указана единица. Указывать необязательно, по умолчанию 15Kb. Примеры: LIMIT=10Kb LIMIT=1Mb LIMIT=65535 ---------- PEAK=<speed>{Mbit|Kbit|bps} - максимальная пиковая скорость выдачи информации из очереди. Только на короткое время. Параметр необязателен. Примеры: PEAK=10Mbit (10 Мбит/с) PEAK=128Kbit (123 Кбит/с) PEAK=3600bps (3600 байт/с) ********** Не бит/с ********** ---------- MTU=<bytes> - размер выходного пакета, исходящего из очереди. Необязательный параметр, если не указать, то такой, как MTU на интерфейсе (для Ethernet - 1500). Имеет смысл указывать, когда задан параметр PEAK. Пример: MTU=1024 ---------- BUFFER=<depth>[{Mb|Kb}][/<interval>] - размер буфера. <depth> - Это максимальное число байт (Кбайт, Мбайт), которое может быть выдано из очереди за один раз. <interval> - я не понял. В оригинале - parameter is used to determine the Length of intervals in packet sizes, for which the transmission times are kept. Параметр указывать необязательно, по умолчанию 10Kb/8. Параметры для очередей класса SFQ QUANTUM=<bytes> - значение не может быть меньше MTU. Что означает - не знаю. В оригинале тоже ничего не сказано. Это необязательный параметр. Пример: QUANTUM=1514 ---------- PERTURB=<seconds> - период пертурбации hash-функции в секундах. По умолчанию 10. Если не указать, пертурбация никогда не происходит. Назначение непонятно. Пример: PERTURB=15 Еще раз хочу напомнить, что настройки каждого файла действуют только на трафик, исходящий с интерфейса, описанного в параметре DEVICE.

<< Предыдущая ИНДЕКС Правка src Установить закладку Перейти на закладку Следующая >>

Обсуждение [ Линейный режим | Показать все | RSS ]
  • 1.1, Гость (?), 20:53, 17/05/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >>К  сожалению,  может  ограничивать  только    исходящий трафик с компьютера, на котором установлен.<<
    Это не совсем так.
    CBQ может  ограничивать только исходящий поток с ИНТЕРФЕЙСА.
    При использовании CBQ на gateway ограничение траффика возможно в обоих направлениях.
    Проверено. Применяется уже не первый год :-)
     
     
  • 2.3, vip3r (?), 01:03, 18/05/2005 [^] [^^] [^^^] [ответить]  
  • +/
    А не на default gateway в каких направлениях? =))) Блин, смысл том, что мы можем контролировать только поток подвласный нашему компьютеру и это никак не связано ни с ограниченным CBQ или Linux или еще какой осью и каким шедулером( BSD и ALTQ например). Засчет задержек в очередях на отправку удаленный хост снижает скорость пропорционально, курите tcp/ip.
     
     
  • 3.7, Eugene (??), 23:53, 19/05/2005 [^] [^^] [^^^] [ответить]  
  • +/
    смысл том, что мы можем контролировать на роутере и выходной поток и входной , а на компьютере с одним интерфейсом - только выходной. причем не только tcp :-))
     
  • 2.10, zkrvova (ok), 10:03, 02/03/2006 [^] [^^] [^^^] [ответить]  
  • +/
    А не подскажете как настроить, чтоб ограничивался трафик на шлюзе.
     

  • 1.2, vip3r (?), 00:58, 18/05/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >К  сожалению,  может  ограничивать  только
    > исходящий трафик с компьютера, на котором > установлен.

    Вот ведь незадача =) А что такое tcp window никто в статье и не обьяснил.

     
  • 1.4, Guest (??), 03:54, 18/05/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >>CBQ может  ограничивать только исходящий поток с >>ИНТЕРФЕЙСА.
    >>При использовании CBQ на gateway ограничение >>траффика возможно в обоих направлениях.
    IMQ
     
  • 1.5, guest (??), 11:21, 18/05/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    народ, подскажите возможно ли ограничить трафик на подсеть, но не весь поток, а на каждого в отдельности?
    вариант с прописыванием правила для каждого айпи не прокатит, сеть слишком большая (2000) и CBQ начинает сильно косячить
    понятно, что можно пользоваться "справедливым" делителем SFQ, но мне бы хотелось чтобы пользователи например до 17.00 имели неограниченный доступ к серверу, а позже по 5мбит на нос

    заранее спасибо

     
     
  • 2.8, Nick (??), 18:56, 20/06/2005 [^] [^^] [^^^] [ответить]  
  • +/
    kuri HTB
     

  • 1.9, forward (?), 18:36, 28/07/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Time не хочет работать.Подскажите кто использует,пожалуйста.
     
     
  • 2.11, SilverGhost (ok), 19:33, 15/05/2006 [^] [^^] [^^^] [ответить]  
  • +/
    Та же проблемма. Может кто подскажет в чем грабли?

    TIME=6:00-18:00;256Kbit/24Kbit/256Kbit
    TIME=18:00-06:00;512Kbit/50Kbit/512Kbit

    Не переключает после timecheck...

     

  • 1.12, я (?), 10:17, 12/12/2006 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    iproute2
     
  • 1.13, exp. (?), 23:52, 16/04/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    /etc/rc.d/cbq.init timecheck
    в крон положите
     
  • 1.14, ufo (??), 18:43, 11/09/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    perturb
    Интервал изменения алгоритма хеширования. Если не задан - алгоритм меняться не будет, что не рекомендуется. Хорошим значением является 10 секунд.
    quantum
    Количество байт выводимых из очереди за один раз. По-умолчанию равно 1 пакету максимально возможного размера (MTU). Не устанавливайте этот параметр меньшим этого значения!
    limit
    Общее количество пакетов, которые могут быть помещены в очередь SFQ (последующие пакеты будут уничтожаться).
     
  • 1.15, Zizya (?), 01:51, 18/11/2012 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    TIME=[<dow>,<dow>, ...,<dow>/]<from>-<till>;<rate>/<weight>[/<peak>]

       Эти параметры (их может быть несколько в одном файле) дают возможность
       назначить разные лимиты скорости в зависимости от дня недели и времени
       суток.

       <dow>  - дни недели (0-7, 0=воскресение). Если лимит
            действует для нескольких дней, перечислите их
            через запятую. Если не указано, то лимит  действует на все дни.

       <from-till> - интервал времени в формате ЧЧ:MM-ЧЧ:MM. Указывать обязательно.

       <rate>  - лимит скорости для данного периода (Mbit|Kbit|bps). См. RATE. Указывать обязательно.

       <weight> - вес лимита для данного периода (Mbit|Kbit|bps). См. WEIGHT. Указывать обязательно.

       <rate>  - пик скорости для данного периода (Mbit|Kbit|bps). См. PEAK. Указывать необязательно.


    опечатка "<rate>  - пик скорости для данного..."
    думаю так правильно "<peak>  - пик скорости для данного..."

     

    игнорирование участников | лог модерирования

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру