Обработчик PolicyBasedEngine ("основанное на политиках") аналогичен FlatRate2, кроме того, что его параметры задаются в конфигурационном файле, а политики учета по направлениям, протоколам и прочему - настраиваемы.
Единственный параметр, который надо указать в свойствах тарифного плана, в окне "Другие настройки...", это путь до файла конфигурации относительно каталога jserver/db/, или абсолютный путь - по умолчанию это pbe.cfg.
Рассмотрим дистрибутивный конфигурационный файл:
# пустые строки, а также строки (все что после символа) # - комментарии # наличие и порядок фигурных скобок { и } - важны # для всех элементов формат одинаков: # имя_элемента метка { # параметры_элемента # } # при этом метка - это номер или строковое значение, на которое ссылаются в дальнейшем другие элементы # исключение - элементы типа rule, там метки - только числа, порядковые номера правил. # оператор include позволяет вставлять "общие" для разных тарифных планов элементы # конфигурации, такие как правила condition (условия) include defaultconditions.cfg # определяет файл с префиксами подсетей (см. подробности) prefix-file russian-nets { path: russian-subnets.txt reload: 60 # in minutes } # определяет условие совпадения. идентификатор условия - all_rus_ip, он будет использоваться # далее в ссылках из правил condition all_rus_ip { # под это условие попадает весь IP трафик type: traffic protocol: ip srcdst: any source: any # 1.224.36.4/18 or ip_addr, ip_subnet/maskbits, prefix-file russian-nets destination: any # 5.6.7.8/31 port: any src_port: any dst_port: any ds-type: any ds-tag: any } # определяет то, как будет учитываться трафик, правило учета имеет здесь идентификатор 1 # - будет использовано далее в правилах accounting 1 { multiplier: megabyte # мультипликатор name: All IP traffic # имя, которое будет отображаться в поле Props окна репортинга direction input { # входящий tag: traffic-in # метка в базе данных rate: 10 # цена за входящий } direction output { # исходящий tag: traffic-out rate: 10 } } accounting web_acct { # веб-трафик у нас бесплатно multiplier: megabyte name: All WEB traffic direction input { tag: web-in rate: 0 } direction output { tag: web-out rate: 0 } } # собственно правила учета обрабатываются по порядковому номеру. rule 1 { condition: all_rus_ip # если совпало условие (IP-адрес, порт, имя data-source, ....) [подробнее] accounting: 1 # вести учет по методу и тарифам, определенным в accounting 1 filter: pass # or block next: continue # or stop } rule 2 { condition: 2 accounting: web_acct filter: pass # or block next: continue # or stop } # # а это содержимое файла defaultconditions.cfg, включенного из pbe.cfg condition 2 { # только веб-трафик type: traffic protocol: tcp port: 80,81,8080,8888,443 }
Изменения в pbe.cfg пока требуют рестарта программы.
Механизм учета по файлам префиксов подсетей
Префиксом подсети называется запись вида X.X.X.X/YY, где X.X.X.X - номер подсети, например "212.140.10.0", а YY - сетевая маска, записанная в формате числа битов "единичка" двоичного представления маски подсети. Таким образом, запись "/0" эквивалентна сетевой маске "0.0.0.0" (все хосты диапазона IPv4), "/24" маске "255.255.255.0", а "/32" маске "255.255.255.255" (единственному хосту).
Используя файлы префиксов, можно удобно производить учет (при конструировании соответствующих правил) по трафику в сторону некоторого набора подсетей, например внутренних подсетей провайдера, где тарификация нулевая, или отличается от остальной. Типичным примером может служить разделение "российского" (или любого национального) трафика, и остального трафика. Для примера в дистрибутивном комплекте поставляются два файла со списками префиксов "географических" сетей, а именно:
- russian-subnets.txt (4719 префикса)
- ukrainean-subnets.txt (2172 префикса)
Эти файлы были сгенерированы 10 января 2011 года из базы данных RIPE по технологии, описанной в "Создание файлов префиксов национальных сетей" из дистрибутива NeTAMS 3.4. Достаточно легко самостоятельно собрать и аналогичные "региональные" списки.
Если в описании элемента политики prefix-file присутствует параметр reload (значение не важно), сервис биллинга будет периодически (раз в 30 секунд) проверять, не был ли изменен файл префиксов "извне", и если таковое произошло, он будет "на лету" переподгружен. Это полезно, если вы собираетесь регулярно (скажем, раз в неделю) пересобирать внешними скриптами файл префиксов из базы RIPE, или из того списка "своих" сетей, который предоставляет вам ваш провайдер.
Механизм cопоставлений условий (condition) в правилах (rule)
В простейшем случае можно задать идентификатор (имя или номер) условия при составлении правила, например:
rule 1 { condition: all_rus ...
Однако есть возможность составлять простые "составные" условия, таким образом комбинируя два условия в одно. Синтаксис команды тогда такой:
condition: условие |
правило срабатывает при наступлении (совпадении) условия |
condition: NOT условие |
правило срабатывает при НЕнаступлении (НЕсовпадении) условия |
condition: условие1 AND условие2 |
правило срабатывает при наступлении (совпадении) ОБОИХ условий одновременно |
condition: условие1 OR условие2 |
правило срабатывает при наступлении (совпадении) ЛЮБОГО из условий, или ОБОИХ |