Мартин Браун - HOWTO по управлению трафиком с помощью tcng и HTB. Страница 2

Программа tcsim — имитатор системы управления трафиком, который работает с конфигурационными файлами tcng и имитирует поведение ядра при передаче данных, согласно структурам управления трафиком. Несмотря на то, что tcsim является значительной частью проекта tcng, в этом документе он вообще не рассматривается.

2. Требования

Есть некоторые требования по поддержке ядром HTB и DSMARK, поддержке HTB и DSMARK в tc и самому tcng.

В частности, поддержка HTB в ядре и tc абсолютно необходима, иначе вы не сможете воспользоваться советами, предоставляемыми данным руководством (обратите внимание на название, если у вас есть какие-то сомнения). Поддержка DSMARK, строго говоря, необязательна, однако некоторые примеры (алгоритм выбора класса, в частности, и возможно и другие) могут не работать без нее.

2.1. Требования к ядру

Удовлетворить требования к ядру очень просто. Ядро 2.4.20 и более новые включают поддержку HTB и dsmark, так что просто убедитесь, что эти опции включены в разделе QoS/Fair Queuing конфигурации ядра. За кратким описанием параметров для, которые нужно выбрать в конфигурации ядра, обращайтесь к заметкам по конфигурации ядра для проекта DiffServ.

Для ядер версии меньше 2.4.20 необходим патч (к сожалению патч существует только для ядер 2.4.17 и выше).

2.2. Требования tc

Команда tc является частью набора утилит iproute2. За общей документацией по iproute2, обращайтесь на сайт http://linux-ip.net/ и к руководству по iproute2. Само программное обеспечение доступно на FTP-архиве Алексея Кузнецова, но обычно они поставляются в виде пакетов с дистрибутивом Linux. Если ваш дистрибутив использует пакеты RPM, вы можете загрузить этот SRPM и скомпилировать у себя в системе.

Если вам придется компилировать iproute2 самим, то чтобы включить поддержку htb в tc, возьмите патч к tc на сайте Мартина Дэвэра.

Кроме того, в tc потребуется поддержка dsmark, механизма маркировки diffserv. К счастью, его поддержка легко включается с помощью редактирования файла Config из пакета исходников iproute2. Просто измените строку TC_CONFIG_DIFFSERV=n на TC_CONFIG_DIFFSERV=y и скомпилируйте пакет.

Из этого SRPM можно собрать пакет iproute2 с поддержкой dsmark и htb, которые требуются для примеров этого документа.

2.3. Требования tcng

Компиляция tcng — самый простая часть всего процесса. Просто распакуйте исходный код tcng и выполните: ./configure --no-tcsim перед компиляцией.

Если вы работаете с дистрибутивом, основанном на RPM, то можете использовать SPEC-файл tcng/build/tcng.spec для сборки пакета. Можно взять готовый SRPM здесь. Результатом сборки этого SRPM станут два пакета: tcc и tcc-devel. Для создания конфигураций вам понадобится только tcc.

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

3. Примеры конфигураций

Приведенные в этом документе примеры представляют переработанные конфигурации, доступные по адресу http://linux-ip.net/code/tcng/.

Примеры могут использоваться как самостоятельные конфигурационные файлы для синтаксического анализатора tcc, или в комбинации с примером скрипта начальной загрузки для SysV. Данный скрипт начальной загрузки является модификацией скрипта, предложенного raptor'ом в списке рассылки LARTC.

Если вы собираетесь пользоваться этим скриптом начальной загрузки, посмотрите на пример файла /etc/sysconfig/tcng:

Пример 1. /etc/sysconfig/tcng

# - мета-конфигурационный файл tcng

#

# -- 2003-03-15 создание; -MAB

# -- 2003-03-31 модификация для поддержки переопределения ENVAR; -MAB

#

# -- В этом каталоге будут храниться все конфигурационные файл tcng

#    для данного хоста

#

TCCONFBASEDIR=${TCCONFBASEDIR:-/etc/sysconfig/tcng-configs}

# -- активная конфигурация для tcng

#    обратите внимание, что благодаря поддержке конструкции #include

#    модульность конфигурации tcng может быть встроена в

#    конфигурационные файлы в $TCCONFBASEDIR

#

TCCONF=${TCCONF:-$TCCONFBASEDIR/global.tcc}

tcstats=${tcstats:-no}   # -- подавляет вывод статистики

tcstats=${tcstats:-yes}  # -- передает ключ "-s" в tc

tcdebug=${tcdebug:-0}    # -- для повседневного использования

tcdebug=${tcdebug:-1}    # -- для вывода дополнительной информации

tcdebug=${tcdebug:-2}    # -- для вывода отладочной информации

#

#

# -- в качестве дополнительной меры, вы можете переопределить местоположение утилит

#    tc и tcc, например:

#

#  tc=/usr/local/bin/tc

#  tcc=/usr/local/tcng/bin/tcc

#

#

3.1. Использование tcng для ограничения входящего потока

Пример 2. /etc/sysconfig/tcng/class-selection-path.tcc

/*

 * Простой пример с комментариями файла управления трафиком для tcng.

 *

 * Martin A. Brown <[email protected]>

 *

 * Пример: Использование алгоритма выбора класса.

 *

 *

 */

#include "fields.tc"[1]

#include "ports.tc"

#define INTERFACE eth0[2]

dev INTERFACE {

 egress {[3]

  /* при использовании алгоритма выбора класса, вначале указываются фильтры! DSmark */[4]

  class ( <$ssh> ) if tcp_sport == 22 && ip_tos_delay == 1 ;

  class ( <$audio> ) if tcp_sport == 554 || tcp_dport == 7070 ;

  class ( <$bulk> ) \

   if tcp_sport == PORT_SSH || tcp_dport == PORT_HTTP ;[5]

  class ( <$other> ) if 1 ;[6]

  /* секция, в которой мы конфигурируем дисциплины обработки очередей и классы */

  htb () {[7]

   class ( rate 600kbps, ceil 600kbps ) {[8]

    $ssh = class ( rate 64kbps, ceil 128kbps ) { sfq; } ;

    [9]$audio = class ( rate 128kbps, ceil 128kbps ) { sfq; } ;

    $bulk = class ( rate 256kbps, ceil 512kbps ) { sfq; } ;

    $other = class ( rate 128kbps, ceil 384kbps ) { sfq; } ;[10]

   }

  }

 }

}

3.2. Использование двухскоростного трехцветного измерителя

Пример 3. /etc/sysconfig/tcng/two-rate-three-color-meter.tcc

/*

 * Простой пример с комментариями файла управления трафиком для tcng.

 *

 * Martin A. Brown <[email protected]>

 *

 * Пример: Использование измерителя.

 *

 *

 */

#define EXCEPTION 192.168.137.50

#define INTERFACE eth0

$meter = trTCM( cir 128kbps, cbs 10kB, pir 256kbps, pbs 10kB );[11]

dev eth0 {

 egress {

  class ( <$full> ) if ip_src == EXCEPTION ;[12]

  class ( <$fast> ) if trTCM_green( $meter ) ;[13]

  class ( <$slow> ) if trTCM_yellow( $meter ) ;[14]

  drop if trTCM_red( $meter ) ;[15]

  htb {

   class ( rate 600kbps, ceil 600kbps ) {

    $fast = class ( rate 256kbps, ceil 256kbps ) { sfq; } ;

    $slow = class ( rate 128kbps, ceil 128kbps ) { sfq; } ;

    $full = class ( rate 600kbps, ceil 600kbps ) { sfq; } ;

   }

  }

 }

}

4. Разнообразные замечания

К счастью, tcng положил конец маленькому неудобству в использовании tc. Ниже приводится таблица соответствия между сокращениями этих утилит с русским языком.

Таблица 1. Синтакс описания скорости: tcng против tc

tcng Русский tc bps бит в секунду bit Bps байт в секунду bps (ух!) kbps килобит в секунду kbit kBps килобайт в секунду kbps Mbps мегабит в секунду mbit или Mbit MBps мегабайт в секунду mbps или Mbps pps пакетов в секунду ??

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

Например, мы можем использовать традиционные обозначения скорости в конфигурации tcng: 100Mbps, 128kbps и даже 2Gpps. Посмотрите раздел руководства по tcng о единицах измерения.