# обратите внимание, что благодаря поддержке конструкции #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 для ограничения входящего потока
/*
* Простой пример с комментариями файла управления трафиком для tcng.
*
* Martin A. Brown <mabrown@securepipe.com>
*
* Пример: Использование алгоритма выбора класса.
*
*
*/
#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. Использование двухскоростного трехцветного измерителя
/*
* Простой пример с комментариями файла управления трафиком для tcng.
*
* Martin A. Brown <mabrown@securepipe.com>
*
* Пример: Использование измерителя.
*
*
*/
#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 о единицах измерения.
Для эффективного управления трафиком важно понимать, где находятся узкие места сети. В большинстве случаев, управление трафиком вам придется выполнять именно в узком месте или рядом с ним.
5. Ссылки и другая документация
1
Язык tcng обеспечивает поддержку c-подобных директив include, которые позволяют присоединить любой файл. Файлы присоединяются относительно текущего каталога или библиотеки tcng (обычно
Использование директив
За дальнейшей информацией обращайтесь к руководству tcng, раздел подключений.
2
Поддерживаются директивы CPP. Директива
3
Ключ
4
Алгоритм выбора класса (class selection path) — это один из подходов к ограничению трафика. При использовании алгоритма выбора класса, пакет маркируется (DiffServ mark) при поступлении в маршрутизатор. На основе этой маркировки маршрутизатор позднее может выполнять различные действия по ограничению, упорядочиванию и классифицированию трафика.
За подробностями обращайтесь к разделу описания алгоритма выбора класса руководства по tcng.
5
Этот пример показывает использование имен портов вместо их номеров. Это одно из удобств tcng, предоставляемых подключением
Имена и номера портов одинаково допустимы.
6
Обратите внимание на эту специфическую конструкцию, которая классифицирует все ранее не классифицированные пакеты. Все пакеты, которые не были классифицированы вышеуказанными классификаторами, помещаются в класс "$other". Конструкция
7
Здесь создается корневая дисциплина обработки очереди устройства, в нашем случае
8
Корневой класс в этом примере задает максимальную полосу пропускания для всего класса. Давайте предположим, что
Параметры
10
По совету Мартина Девера, приведенном на сайте HTB, каждому классу назначается дисциплина обработки очереди SFQ, которая позволяет эффективо разделять пропускную возможность класса, между сессиями. Обратите внимание на отсутствие параметров у этой дисциплины.
Если для подклассов не указаны дисциплины обработки очереди, то они используют стандартную дисциплину pfifo_fast qdisc. Включение стохастической дисциплины (sfq) для подклассов позволяет избежать превалирования одного соединения над остальными внутри класса.
11
В этой строке выполняется объявление измерителя (meter) для классификации трафика. Обратитесь к руководству по tcng, раздел измерителей за списком и примерами различных измерителей.
Приведенный в этом примере измеритель является двухскоростным трехцветным измерителем, самым сложным измерителем, доступным в языке tcng. Этот измеритель возвращает цвет — зеленый, желтый и красный, в зависимости от скорости. Если измеренная скорость превышает гарантированную, измеритель возвращает желтый цвет, а если превышает пиковую скорость — возвращается красный цвет.
С переменной
12
В нашем примере к трафику хоста 192.168.137.50 специально не применяются правила ограничения применяемые ко всему остальному трафику на интерфейсе eth0.
13
До гарантированной скорости (
Измеритель зеленый.
14
Трафик, превышающий возможности буфера
Измеритель желтый.
15
Трафик, превышающий возможности буфера
Измеритель красный.