TRAFC
Управление трафиком для Eserv/3 и EProxy
Введение: зачем это нужно
Представим себе типичную ситуацию: в небольшой офис приходит долгожданный Интернет. Покупается модем или мрачный мужик в резиновых сапогах прибивает гвоздями кабель выделенной линии. Все сотрудники в предвкушении радостного момента собираются у сервера, дергают администратора за рукав и спрашивают, когда же заработает это достижение современной мысли. Поскольку выход в Интернет только один, на этот компьютер ставится Eserv/3 или только Eproxy. Сисадмин настраивает программы, дает каждому адрес прокси-сервера и рассказывает, как запустить программу просмотра.Целый месяц длится эйфория. На расстоянии одного щелчка мышью есть все — и новые программы, и целые библиотеки, мелодии для мобильных телефонов, обсуждение концепции кармы и даже картинки с жалкими котятами.
Но в конце месяца вместе со счетом за Интернет приходит страшная расплата. Начальник, уязвленный суммой счета в самое сердце, начинает страшный суд. Кто изучал концепцию кармы в рабочее время? Кто забил себе весь рабочий стол жалкими котятами? Кто только и делал, что трепался в чатах под эльфийским именем? Сисадмин, дай ответ. Сисадмин огрызается, дескать за всеми не уследишь, но его никто уже не слушает...
Страшно? Но закономерно — надо было думать раньше. Интернета, как и денег, всегда не хватает, поэтому нужна жесткая дисциплина его распределения между сотрудниками и учет использования. Чтобы помочь сисадмину в управлении трафиком и был разработан плагин TrafC.
1. Виртуальные каналы
TrafC основывается на идее виртуальных каналов. Представьте, что трафик к каждому пользователю идет через отдельную трубочку, которую сисадмин провел от своей машины. На трубочке стоит счетчик и запорный краник, который можно в случае необходимости и слегка привернуть, и даже вообще закрыть. Каждая трубочка и есть виртуальный канал. На самом деле, к каждому пользователю может даже идти несколько таких трубочек — одна для писем, другая для поиска рекламодателей, а третья — скачать мелодии. Настроить каждый такой канал можно независимо. Можно пойти еще дальше — прогонять каждый байт трафика через несколько каналов одновременно. С настоящими трубочками такого не получится, но наши каналы виртуальные. Таким образом, можно, например, вести учет трафика по нескольким независимым параметрам. Каналы работают только в одну сторону — или на вход, или на выход.Виртуальные каналы бывают двух видов. Продолжая нашу водопроводную аналогию, одни каналы запорные — на них стоит счетчик, автоматически регистрирующий трафик. Как только счетчик дойдет до предела, канал будет закрыт и ни одного байта через него больше не пройдет. Предел обычно устанавливается на конкретное время — на неделю или на месяц, после чего счетчик сбрасывается. Такие каналы в настройках именуются <quota canals> (квоты).
Другие каналы можно сравнить с вентилем (краном), задающим скорость тока воды: чем больше открыт вентиль, тем сильней течет вода. Эти каналы ограничивают скорость доставки информации, так сказать, притормаживают трафик. Для вентиль-канала можно выставить систему приоритетов, чтобы более важный трафик проходил вперед менее важного (например, почтовый трафик может считаться самым важным). Эти каналы именуются <band canals> (от bandwidth). Если один и тот же трафик идет через несколько каналов-вентилей, то полученная пропускная способность будет на уровне того вентиля, который больше всего закручен — точно, как было бы c водой.
2. Настройка
Настройка производится в два этапа. На первом этапе надо определить, какие именно каналы и в каком количестве вам нужны для учета вашего трафика. На втором этапе эти каналы связываются с помощью правил с трафиком, то есть вы указываете, в каких случаях какие каналы должны работать. И, наконец, надо подключить сам плагин к конкретным протоколам, трафик которых вы хотите учитывать.Настройки каналов хранятся в файлах CONF/lists/proxy/trafc/BandsList.txt и CONF/lists/proxy/trafc/QuotaList.txt. В первом файле настраиваются каналы-вентили. Типичное содержимое файла выглядит так:
"NAME";"CPS";"DIRECTION"
vip;1000;IN
std;500;IN
Здесь мы определяем два канала: канал vip для важного трафика с пропускной способностью 1000 б/с и обыкновенный канал std со скоростью в 2 раза меньшей. Оба канала работают только <на прием> (<IN>), то есть считают трафик только из Интернета к пользователю. Это самый распространенный случай, так как обычно входящий трафик намного больше исходящего.
Во втором файле мы настраиваем запорные каналы. Файл выглядит так:
"NAME";"VOLUME";"PERIOD";"DIRECTION"
"admin";"200 Mb";"4 Weeks";"IN"
"lawyer";"100 Mb";"4 Weeks";"IN"
"secr";"100 Mb";"4 Weeks";"IN"
Здесь определены три канала. Один — с названием <admin>, по этому каналу выделяется 200 мегабайтов трафика в месяц. Два других канала — по 100 мегабайт в месяц. Все три каналы — входные.
Каналы можно настроить также через веб-интерфейс. Для этого сисадмину нужно обратиться по адресу http://server:3140/main/CONF/lists/proxy/trafc/BandsList.txt и http://server:3140/main/CONF/lists/proxy/trafc/QuotasList.txt (Параметры прокси сервера > Управление трафиком > Band-каналы, Квоты). Вместо <server> в адресе надо, естественно, поставить имя или адрес машины, на которой работает Eproxy.
На втором этапе сопоставим определенные нами каналы с конкретным трафиком. Плагин написан очень гибко, сопоставление можно проводить практически по любым критериям, поэтому файл CONF/lists/proxy/trafc/RulesList.txt выглядит примерно так:
"Antecedent";"Consequent"
PeerIP= 192.168.0.3;admin
Первое поле — условие срабатывания, второе поле — назначаемый при этом канал и возможный приоритет.
Список самых важных условий приведен в таблице.
Из всего перечисленного изобилия чаще всего используется идентификация по IP-адресу ( PeerIP= 192.168.0.3, обратите внимание на пробел после знака равенства) или идентификация по имени пользователя (User =~ Admin).
В правой части правила может указываться несколько каналов и приоритет правила, например так:
~PeerIP= 192.168.0.3;admin sysadmin Priority: 5
Приоритет задается в относительных единицах, чем меньше число — тем выше приоритет. Если приоритет не указывается, он считается равным нулю, то есть самым высоким.
Настройка правил через веб-интерфейс проводится по адресу http://server:3140/main/CONF/lists/proxy/trafc/RulesList.txt (Параметры прокси сервера > Управление трафиком > Правила).
И наконец третий этап — подключение самого плагина. Для этого нужно вставить (или раскомментировать) в файл конфигурации Eproxy OnStartupPlugins.rules.txt такие строчки:
Plugin: pluginsTrafC
Plugin: http-proxypluginsTrafC
Или через веб-интерфейс: http://server:3140/conf/ru/plugins.html (Параметры прокси сервера > Основные параметры > Расширения).
После этого вместе с сервером будет грузиться сам плагин и его дополнительная часть, отвечающая за подсчет трафика по протоколу HTTP.
Если вы хотите вести учет и по другим протоколам (а в Eproxy их много: ftp-proxy, socks, tcpmap, http-map, pop3proxy, udpmap, ...), нужно добавить в соответствующий файл конфигурации данного протокола (обычно это OnRequest.rules.txt или OnThreadConnect.rules.txt) строку
NewlyCanalsKit AssignCanals(DB)
3. Пример настройки
Предположим следующую ситуацию: провайдер отдает по выделенной линии 1 гигабайт трафика в месяц. Нам надо распределить эти данные по нескольким пользователям: директору — 300 Мб, трем программистам — по 100 Мб, отделу маркетинга — 200 Мб. Остальное пойдет на почту. При этом маркетингу нужно ограничить скорость передачи информации (назло , а почтовому серверу — наоборот, обеспечить приоритет. Отдел маркетинга находится в отдельной подсети с адресом 192.168.1.0, остальные работники идентифицируются в Eproxy по именам.Сначала настраиваем все необходимые каналы:
BandList.txt
"NAME";"CPS";"DIRECTION"
post;1000;IN
std;500;IN
slow;200;IN
QuotaList.txt
"NAME";"VOLUME";"PERIOD";"DIRECTION"
"dir";"300 Mb";"4 Weeks";"IN"
"prog1";"100 Mb";"4 Weeks";"IN"
"prog2";"100 Mb";"4 Weeks";"IN"
"prog3";"100 Mb";"4 Weeks";"IN"
"mark";"100 Mb";"4 Weeks";"IN"
Затем сопоставляем каналы и трафик:
RulesList.txt
"Antecedent";"Consequent"
User =~ Director;dir std Priority: 5
User =~ Wirth;prog1 std Priority: 5
User =~ Dijkstra;prog2 std Priority: 5
User =~ Knuth;prog3 std Priority: 5
User =~ postserver;post Priority: 1
PeerIP:Mask = 192.168.1.0:255.255.255.0;mark slow
4. Вопросы и ответы
Как сделать сброс квот по расписанию?
- Квоты надо создать с заведомо большим периодом.
- Воспользовавшись внешним планировщиком, надо в нужный момент поместить (скопировать или создать) в каталог ~Eserv3/DATA/FLAGS/Eproxy файл-флаг reset-quotas-all.flag — чтобы сбросить все квоты, или файл reset-quotas-list.flag со списком квот (разделитель: пробел, новая строка), которые надо сбросить. После отработки задания файл-флаг будет удален. Если Eproxy не запущен во время появления флага, то флаг будет обработаны только после запуска Eproxy. В качестве планировщика можно использовать известный nncron или встроенную в Windows возможность выполнения по расписанию (команда at).
Как посмотреть, сколько трафика осталось неиспользованным?
Пользователь может смотреть статистику использования quota-каналов через веб: http://server:3140/my/trafc/ (Для сисадмина: Управление трафиком > Статистика > Пользовательский вид).Почему статистика, насчитанная плагином, не совпадает с цифрами провайдера?
Во-первых, вы просто могли не настроить подсчет информации от пользователя к провайдеру. Если вы регулярно посылаете огромные файлы, там может собраться порядочно байтов трафика.Во-вторых, плагин считает только полезную информацию, дошедшую до пользователя, а провайдер — всю физическую информацию, пересланную по его сети. Туда входит разнообразная служебная информация, например, заголовки пакетов IP или других протоколов, а также повторная передача одних и тех же данных при плохой связи. Обычно физической информации процентов на 10-15 больше, чем полезной.
Где можно узнать о более тонких настройках плагина?
Техническое описание работы плагина и его настроек находятся в каталоге ~Eserv3/Eproxy/conf/plugins/TrafC/ru/docsЮрий Жиловец, 2004
См. также Статьи