Чтение онлайн

на главную - закладки

Жанры

HOWTO по управлению трафиком с помощью tcng и HTB
Шрифт:

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 <mabrown@securepipe.com>

 *

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

 *

 *

 */

#include "fields.tc" [1]

#include "ports.tc"

#define INTERFACE eth0 [2]

1

Язык tcng обеспечивает поддержку c-подобных директив include, которые позволяют присоединить любой файл. Файлы присоединяются относительно текущего каталога или библиотеки tcng (обычно /usr/lib/tcng/include). Строго говоря, указывать директивы #includeports.tc и #includefields.tc необязательно, поскольку tcc их присоединяет по умолчанию.

Использование директив #include увеличивает гибкость определения переменных и подключения общих элементов управления трафиком.

За дальнейшей информацией обращайтесь к руководству tcng, раздел подключений. 

2

Поддерживаются директивы CPP. Директива #define может использоваться для создания макросов или констант. За подробной информацией обращайтесь к руководству tcng, раздел переменных. 

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> ) \

3

Ключ egress является синонимом dsmark. Приведенный пример использует class selection path. Для использования в конфигурации ключа egress необходима поддержка dsmark в ядре и tc

4

Алгоритм выбора класса (class selection path) — это один из подходов к ограничению трафика. При использовании алгоритма выбора класса, пакет маркируется (DiffServ mark) при поступлении в маршрутизатор. На основе этой маркировки маршрутизатор позднее может выполнять различные действия по ограничению, упорядочиванию и классифицированию трафика.

За подробностями обращайтесь к разделу описания алгоритма выбора класса руководства по tcng

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

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

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

htb { [7]

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

5

Этот пример показывает использование имен портов вместо их номеров. Это одно из удобств tcng, предоставляемых подключением ports.tc. Имена портов соответствуют названиям портов IANA. Узнать имена портов можно в списке зарегистрированных портов IANA или изучив файл ports.tc.

Имена и номера портов одинаково допустимы. 

6

Обратите внимание на эту специфическую конструкцию, которая классифицирует все ранее не классифицированные пакеты. Все пакеты, которые не были классифицированы вышеуказанными классификаторами, помещаются в класс "$other". Конструкция if 1 может применяться для классифицирования неклассифицированного трафика. 

7

Здесь создается корневая дисциплина обработки очереди устройства, в нашем случае eth0. Проконсультируйтесь со справочными материалами tcng, дополнение по параметрам дисциплин обработки очереди. Любые параметры дисциплины очереди могут быть вставлены в круглые скобки, так же как и параметры класса далее в примере. Если параметры не указаны, скобки необязательны. 

8

Корневой класс в этом примере задает максимальную полосу пропускания для всего класса. Давайте предположим, что eth0 — это интерфейс, подключенный к локальной сети. Тогда скорость передачи данных в локальную сеть будет ограничена 600 килобитами.

Параметры rate и ceil должны быть знакомы всем, кто пользовался HTB. Это специфические параметры HTB и соответствующим образом обрабатываются утилитой tcc. Обратитесь к таблице аббревиатур скоростей tcng

$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]

}

}

 }

}

9

Это

присвоение класса переменной. Обычно выполняется как часть алгоритма выбора пути.

10

По совету Мартина Девера, приведенном на сайте HTB, каждому классу назначается дисциплина обработки очереди SFQ, которая позволяет эффективо разделять пропускную возможность класса, между сессиями. Обратите внимание на отсутствие параметров у этой дисциплины.

Если для подклассов не указаны дисциплины обработки очереди, то они используют стандартную дисциплину pfifo_fast qdisc. Включение стохастической дисциплины (sfq) для подклассов позволяет избежать превалирования одного соединения над остальными внутри класса. 

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

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

/*

 * Простой пример с комментариями файла управления трафиком для 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]

11

В этой строке выполняется объявление измерителя (meter) для классификации трафика. Обратитесь к руководству по tcng, раздел измерителей за списком и примерами различных измерителей.

Приведенный в этом примере измеритель является двухскоростным трехцветным измерителем, самым сложным измерителем, доступным в языке tcng. Этот измеритель возвращает цвет — зеленый, желтый и красный, в зависимости от скорости. Если измеренная скорость превышает гарантированную, измеритель возвращает желтый цвет, а если превышает пиковую скорость — возвращается красный цвет.

С переменной $meter могут оперировать функции, работающие с типом измерителя. В нашем случае используются три функции, позволяющие проверить состояние $meter: trTCM_green, trTCM_yellow и trTCM_red. Для эффективности, обратите внимание на ускоренные аналоги. 

12

В нашем примере к трафику хоста 192.168.137.50 специально не применяются правила ограничения применяемые ко всему остальному трафику на интерфейсе eth0.

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; } ;

13

До гарантированной скорости (cir), пакеты будут проходить через этот класс. Токены будут использоваться из буфера cir/cbs.

Измеритель зеленый. 

14

Трафик, превышающий возможности буфера cir/cbs будет направляться в буфер pir/pbs (pir — это пиковая скорость [peak information rate], pbs — это размер пикового буфера). Это позволяет гарантировать отдельному потоку полосу пропускания до определенной скорости,а при превышении ее происходит переклассификация.

Измеритель желтый. 

15

Трафик, превышающий возможности буфера pir/pbs классифицируется в этой строке. Обычные конфигурации начинают терять пакеты, превышающие пиковую скорость, но можно настроить и переклассификацию трафика из класса гарантированной пропускной способности в класс максимальной пропускной способности.

Измеритель красный. 

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

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

}

}

 }

}

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

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

Поделиться:
Популярные книги

Мастер...

Чащин Валерий
1. Мастер
Фантастика:
героическая фантастика
попаданцы
аниме
6.50
рейтинг книги
Мастер...

Жених из гроба

Сотис Майя
1. Гробокопательница
Фантастика:
юмористическое фэнтези
сказочная фантастика
фэнтези
5.00
рейтинг книги
Жених из гроба

Ищу жену с прицепом

Рам Янка
2. Спасатели
Любовные романы:
современные любовные романы
6.25
рейтинг книги
Ищу жену с прицепом

Гримуар тёмного лорда I

Грехов Тимофей
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Гримуар тёмного лорда I

Заклятие предков

Прозоров Александр Дмитриевич
3. Ведун
Фантастика:
фэнтези
альтернативная история
8.49
рейтинг книги
Заклятие предков

Крепость над бездной

Лисина Александра
4. Гибрид
Фантастика:
боевая фантастика
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Крепость над бездной

Рота Его Величества

Дроздов Анатолий Федорович
Новые герои
Фантастика:
боевая фантастика
8.55
рейтинг книги
Рота Его Величества

Экспансия: Сотрудничество. Том 5

Белов Артем
5. Планетарный десант
Фантастика:
боевая фантастика
аниме
5.00
рейтинг книги
Экспансия: Сотрудничество. Том 5

Отверженный III: Вызов

Опсокополос Алексис
3. Отверженный
Фантастика:
фэнтези
альтернативная история
7.73
рейтинг книги
Отверженный III: Вызов

Князь Серединного мира

Земляной Андрей Борисович
4. Страж
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Князь Серединного мира

Возвышение Меркурия. Книга 8

Кронос Александр
8. Меркурий
Фантастика:
героическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Возвышение Меркурия. Книга 8

Эволюционер из трущоб. Том 5

Панарин Антон
5. Эволюционер из трущоб
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Эволюционер из трущоб. Том 5

Локки 7. Потомок бога

Решетов Евгений Валерьевич
7. Локки
Фантастика:
аниме
эпическая фантастика
фэнтези
5.00
рейтинг книги
Локки 7. Потомок бога

Черный Маг Императора 4

Герда Александр
4. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Черный Маг Императора 4