Обработчик активации сервисов для Manad

Материал из BiTel WiKi

(Различия между версиями)
Перейти к: навигация, поиск
Строка 1: Строка 1:
'''Внимание, статья находится в стадии правки и пока не окончена.'''
'''Внимание, статья находится в стадии правки и пока не окончена.'''
-
Обработчик активации сервисов Manad. Тот же самый Manad, который использовался в IPN. Обработчик умеет обрабатывать либо ip либо сети , указанные  в сервисе.  
+
Manad представляет собой perl-вый скрипт, который выполняет команды на стороне маршрутизатора/шейпера. Это Тот же самый Manad, который использовался в IPN(слегка изменен под inet). И обработчик активации сервиса для работы с ним. Обработчик умеет обрабатывать либо ip либо сети , указанные  в сервисе.  
-
Тут главное определится нужен ли вам Manad. Если это команды типа  
+
Тут главное определится нужен ли вам Manad. Если это команды типа
<source lang="bash">
<source lang="bash">
iptables -A FORWARD -t filter -s 1.1.1.1 -j ACCEPT
iptables -A FORWARD -t filter -s 1.1.1.1 -j ACCEPT
Строка 9: Строка 9:
</source>
</source>
-
Т.е достаточно использовать telnet или ssh-обработчики.  Manad нужен если вы хотите в командах использовать некоторые счетчики, которые будут увеличиваться и запоминаться для каждого абонента.  
+
Т.е достаточно использовать telnet или ssh-обработчики.  Manad нужен если вы хотите в командах использовать некоторые счетчики, которые будут увеличиваться и запоминаться для каждого абонента. В этом случае Manad используется для выделения новых счетчиков и их хранения.
-
'''Например в случае ipfw(freebsd)'''
+
'''Например в случае ipfw(freebsd) нужно выделять номера pipi-ов для каждого абонента и команды'''
<source lang="bash">
<source lang="bash">
Строка 26: Строка 26:
</source>
</source>
-
'''Или для iroute2(linux)'''
+
'''Или для iroute2(linux) нужно выделять номера классов'''
<source lang="bash">
<source lang="bash">
Строка 93: Строка 93:
-
В данном случае каждый макрос $paramMulti преобразуется в 7 команд.  
+
В данном случае каждый макрос $paramMulti преобразуется в 7 строк.  
Данный обработчик поддерживает 2 основные схемы .  
Данный обработчик поддерживает 2 основные схемы .  
Строка 164: Строка 164:
1. add num rules;
1. add num rules;
-
2. remove num rules;
+
2. remove num;
3. test.
3. test.
-
В качестве разделителя используется символ табуляции. num - это id сервиса, rules - это строка с набором команд, внутри которой команды разделяются символом "|". Подразумевается, что команда add добавляет правила, команда remove - удаляет. В ответ на команду test Manad шлёт список id договоров (разделённых символом пробела), открытых на данном шлюзе. test - не используется в модуле inet, использовалось только  в IPN.
+
4. uptime.
 +
 
 +
В качестве разделителя используется символ табуляции. num - это id сервиса, rules - это строка с набором команд, внутри которой команды разделяются символом "|". Подразумевается, что команда add добавляет правила, команда remove - удаляет. В ответ на команду test Manad шлёт список id договоров (разделённых символом пробела), открытых на данном шлюзе. test - не используется в модуле inet, использовалось только  в IPN(оставлен для совместимости). uptime - время, которое произошло с запуска manad.  

Версия 18:02, 11 января 2014

Внимание, статья находится в стадии правки и пока не окончена.

Manad представляет собой perl-вый скрипт, который выполняет команды на стороне маршрутизатора/шейпера. Это Тот же самый Manad, который использовался в IPN(слегка изменен под inet). И обработчик активации сервиса для работы с ним. Обработчик умеет обрабатывать либо ip либо сети , указанные в сервисе.

Тут главное определится нужен ли вам Manad. Если это команды типа

iptables -A FORWARD -t filter -s 1.1.1.1 -j ACCEPT
iptables -D FORWARD -t filter -s 1.1.1.1 -j ACCEPT

Т.е достаточно использовать telnet или ssh-обработчики. Manad нужен если вы хотите в командах использовать некоторые счетчики, которые будут увеличиваться и запоминаться для каждого абонента. В этом случае Manad используется для выделения новых счетчиков и их хранения. Например в случае ipfw(freebsd) нужно выделять номера pipi-ов для каждого абонента и команды

pipe 100 config bw 1280000
pipe 101 config bw 1280000
add 1000 pipe 100 ip from any to 1.1.1.1 out
add 1000 pipe 101 ip from 1.1.1.1 to any in
 
pipe 103 config bw 1280000
pipe 105 config bw 1280000
add 1001 pipe 103 ip from any to 2.2.2.2 out
add 1001 pipe 105 ip from 2.2.2.2 to any in

Или для iroute2(linux) нужно выделять номера классов

/sbin/tc class add dev eth0 parent 1:0 classid 1:1 htb rate 256kbit burst 4k prio 1
/sbin/tc qdisc add dev eth0 parent 1:1 handle 1: sfq perturb 10 quantum 1500
 
/sbin/tc class add dev eth0 parent 1:0 classid 1:2 htb rate 128kbit burst 4k prio 1
/sbin/tc qdisc add dev eth0 parent 1:2 handle 2: sfq perturb 10 quantum 1500
 
 
/sbin/tc filter add dev eth0 parent 1:0 protocol ip prio 1 u32 match ip dst 1.1.1.1  flowid 1:1
/sbin/tc filter add dev eth0 parent 1:0 protocol ip prio 1 u32 match ip dst 2.2.2.2  flowid 1:1
 
/sbin/tc filter add dev eth0 parent 1:0 protocol ip prio 2 u32 match ip src 1.1.1.1 flowid 1:2
/sbin/tc filter add dev eth0 parent 1:0 protocol ip prio 2 u32 match ip src 1.1.1.1 flowid 1:2


1) Заводим тип устройства Manad.

Класс обработчика активации сервисов:

ru.bitel.bgbilling.modules.inet.dyn.device.manad.ManadServiceActivator

Поставляется в стандартной поставке.


Параметры общие описаны тут:

Дополнительно поддерживается параметр

\t

Означающий символ табуляции.


Также дополнительно тут поддерживается параметр

$paramMulti

Работу которого можно показать на примере

speedCommands.1=add\t$servId\t
speedCommands.2=<LOOP>
speedCommands.3=pipe {P0} config bw $param($option,speed,100)
speedCommands.4=pipe {P1} config bw $param($option,speed,100)
speedCommands.5=add {N0} pipe {P0} ip from any to $ip out
speedCommands.6=add {N0} pipe {P1} ip from $ip to any in
speedCommands.7=</LOOP>
 
 
 
sa.command.inetOption.5.enable=$paramMulti(speedCommands)
sa.command.inetOption.6.enable=$paramMulti(speedCommands)
sa.command.inetOption.7.enable=$paramMulti(speedCommands)


В данном случае каждый макрос $paramMulti преобразуется в 7 строк.

Данный обработчик поддерживает 2 основные схемы .

а) Все счетчики привязаны к одному сервису(т.е мы ограничиваем скорость на одном сервисе).

В этом случае просто пишем команды. Все макросы $servId $ip и т.д берутся из сервиса. Пример

speedCommands.1=add\t$servId\t
speedCommands.2=pipe {P0} config bw $param($option,speed,100)
speedCommands.3=pipe {P1} config bw $param($option,speed,100)
speedCommands.4=add {N0} pipe {P0} ip from any to $ip out
speedCommands.5=add {N0} pipe {P1} ip from $ip to any in
 
 
sa.command.inetOption.5.enable=$paramMulti(speedCommands)
sa.command.inetOption.6.enable=$paramMulti(speedCommands)
sa.command.inetOption.7.enable=$paramMulti(speedCommands)



б) Счетчики объединяют несколько сервисов. Т.е правила шейпинга назначаются не суммарный трафик нескольких независимых ip.

В этом случае заводится один пустой родительский сервис на договоре, а каждый ip прописывается на дочернем сервисе .


В этом случае есть общие команды(макросы $servId и другие подставляется из родительского сервиса), а есть команды, которые надо повторять для каждого сервиса (макросы $ip и другие берутся из каждого дочернего сервиса). Пример

speedCommands.1=add\t$servId\t
speedCommands.2=<LOOP>
speedCommands.3=pipe {P0} config bw $param($option,speed,100)
speedCommands.4=pipe {P1} config bw $param($option,speed,100)
speedCommands.5=add {N0} pipe {P0} ip from any to $ip out
speedCommands.6=add {N0} pipe {P1} ip from $ip to any in
speedCommands.7=</LOOP>
 
 
 
sa.command.inetOption.5.enable=$paramMulti(speedCommands)
sa.command.inetOption.6.enable=$paramMulti(speedCommands)
sa.command.inetOption.7.enable=$paramMulti(speedCommands)

Так же обработчик заменяет подстановки вида {XN}, где X - латинская буква, а N - цифра. Начинать нумеровать эти последовательности нужно обязательно с нуля. Для каждого ip-адреса по каждой букве увеличивается индекс. Т.е., например, подстановки {A0}, {A1}, {B0} для 1-го ip-адреса преобразуется в {A0}, {A1}, {B0} ; для второго ip-адреса в {A1}, {A2}, {B1} и т.п. В текущей реализации перловый скрипт manad обрабтывает только 2 буквы: {N0},{N1} и т.п для номеров правил;{P0},{З1} и т.п номеров пайпов.




2) Заводим устройство типа Manad. На устройстве должен быть прописан host:port Manad. Либо просто host, тогда порт может быть указан в параметре

sa.port

в конфигурации устройств.

3) Запускаем и настраиваем сам Manad(перловый вариант). Manad - это перловый скрипт, работающий в режиме демона.

Он принимает от BGBilling-сервера следующие строки:

1. add num rules;

2. remove num;

3. test.

4. uptime.

В качестве разделителя используется символ табуляции. num - это id сервиса, rules - это строка с набором команд, внутри которой команды разделяются символом "|". Подразумевается, что команда add добавляет правила, команда remove - удаляет. В ответ на команду test Manad шлёт список id договоров (разделённых символом пробела), открытых на данном шлюзе. test - не используется в модуле inet, использовалось только в IPN(оставлен для совместимости). uptime - время, которое произошло с запуска manad.


Manad FreeBSD =

Сам manad лучше взять вот этот(ссылка!!!). Вот пример конфигурации типа сервиса.

speedCommands.1=add\t$servId\t
speedCommands.2=pipe {P0} config bw $param($option,speed,100)
speedCommands.3=pipe {P1} config bw $param($option,speed,100)
speedCommands.4=add {N0} pipe {P0} ip from any to $ip out
speedCommands.5=add {N0} pipe {P1} ip from $ip to any in
 
 
sa.command.inetOption.5.enable=$paramMulti(speedCommands)
sa.command.inetOption.6.enable=$paramMulti(speedCommands)
sa.command.inetOption.7.enable=$paramMulti(speedCommands)
 
sa.command.inetOption.5.disable.1=remove\t$servId
sa.command.inetOption.6.disable.1=remove\t$servId
sa.command.inetOption.7.disable.1=remove\t$servId

В данном примере manad будет реагировать только на изменение опций(скорости).


Manad Linux =

Сам manad лучше взять вот этот(ссылка!!!). Вот пример конфигурации типа сервиса.

Личные инструменты