BiTel

Форум BiTel
bgbilling.ru     docs.bitel.ru     wiki.bitel.ru     dbinfo.bitel.ru     bgcrm.ru     billing.bitel.ru     bitel.ru    
Текущее время: 18 июн 2025, 20:58

Часовой пояс: UTC + 5 часов [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 21 ] 
Автор Сообщение
СообщениеДобавлено: 27 янв 2016, 12:45 
Не в сети

Зарегистрирован: 12 дек 2013, 09:56
Сообщения: 32
Карма: 0
Доброго времени суток!

Народ, подскажите пожалуйста, как победить передачу статического диапазона IP, указанного в модуле Inet на Микротик через обработчик?

При отправке команды sa.command.serv.create=/queue/simple/add\n=name=$contractTitle\n=target=$ip задается только первый IP из диапазона. В Микротике IP-шники задаются через запятую. Если предположим пул из 3 IPов, то команда должна быть sa.command.serv.create=/queue/simple/add\n=name=$contractTitle\n=target=$ip1,$ip2,$ip3, но переменная есть только $ip.

Как распарсить пул адресов? Куда копать?

_________________
Клиент: 8.0.461 / 01.06.2021 21:19:29
os: Windows 10; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_311
Сервер: 8.0.1351 / 01.06.2021 21:22:09
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_241


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 27 янв 2016, 18:13 
Не в сети
Клиент

Зарегистрирован: 21 май 2008, 10:54
Сообщения: 599
Откуда: 50-й рег.
Карма: 40
Либо юзеру 3 разных сервиса создавать, каждый сервис со своим IP, либо на каждого юзера фиксированное кол-во ипов сразу резервировать(например - 6)
Тогда мона как-то так :
Код:
sa.command.serv.create=/ip/firewall/address-list/add\n=address=$ip/29\n=list=ACCESS_LIST\n=comment=!!$servId!!\n=disabled=yes
sa.command.serv.enable=/ip/firewall/address-list/enable\n=numbers="!!$servId!!"
sa.command.serv.disable=/ip/firewall/address-list/disable\n=numbers="!!$servId!!"
sa.command.serv.cancel=/ip/firewall/address-list/remove\n=numbers="!!$servId!!"

а в сервисе указывать первый ип диапазона ( "сетевой адрес" ).
Минус этого решения в том, что придётся к основному сервису дочерний сервис навешивать для подсчёта с диапазоном ипов от $ip +2 до $ip + 6

_________________
"Все правые - в резерве!" (c) (translate.google.ru/#en/ru/all%20rigths%20reserved)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 28 янв 2016, 09:19 
Не в сети

Зарегистрирован: 12 дек 2013, 09:56
Сообщения: 32
Карма: 0
ok-2004 писал(а):
Либо юзеру 3 разных сервиса создавать, каждый сервис со своим IP


Не правильно это ИМХО

ok-2004 писал(а):
на каждого юзера фиксированное кол-во ипов сразу резервировать(например - 6)
Тогда мона как-то так :
Код:
sa.command.serv.create=/ip/firewall/address-list/add\n=address=$ip/29\n=list=ACCESS_LIST\n=comment=!!$servId!!\n=disabled=yes
sa.command.serv.enable=/ip/firewall/address-list/enable\n=numbers="!!$servId!!"
sa.command.serv.disable=/ip/firewall/address-list/disable\n=numbers="!!$servId!!"
sa.command.serv.cancel=/ip/firewall/address-list/remove\n=numbers="!!$servId!!"

а в сервисе указывать первый ип диапазона ( "сетевой адрес" ).
Минус этого решения в том, что придётся к основному сервису дочерний сервис навешивать для подсчёта с диапазоном ипов от $ip +2 до $ip + 6


queue как-то отказывается работать с указанием маски, если в IPе последний знак не 0. А логика сети построена так, что каждый следующий IP имеет +10 (10,20,30,40...)

_________________
Клиент: 8.0.461 / 01.06.2021 21:19:29
os: Windows 10; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_311
Сервер: 8.0.1351 / 01.06.2021 21:22:09
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_241


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 28 янв 2016, 10:38 
Не в сети
Клиент

Зарегистрирован: 21 май 2008, 10:54
Сообщения: 599
Откуда: 50-й рег.
Карма: 40
Цитата:
queue как-то отказывается работать с указанием маски, если в IPе последний знак не 0.


Да , вполне логично. Поэтому а нас в качастве тагета выступает влан, где тусуется юзер со своим /29 диапазоном.
У Вас видимо не vlan_per_user... Поэтому Вам приходится в качестве тагетов юзать "ип-ы" ,а не интерфейсы...

_________________
"Все правые - в резерве!" (c) (translate.google.ru/#en/ru/all%20rigths%20reserved)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 28 янв 2016, 22:29 
Не в сети

Зарегистрирован: 23 янв 2015, 19:11
Сообщения: 189
Карма: 5
sgilyin писал(а):
queue как-то отказывается работать с указанием маски, если в IPе последний знак не 0. А логика сети построена так, что каждый следующий IP имеет +10 (10,20,30,40...)

Нет. Он отказывается добавлять ipшник с маской, если он не является адресом сети в данной маске. Т.е. если добавить 10.0.0.0/30 или 10.0.0.4/30 итд - то он всё съест. Если 10.0.0.1/30 то вылезет ошибка.
Я не уверен как работает переменная $net но возможно она как раз поможет. А так в микротике есть математические действия над ipшниками.
Там можно спокойно из ipшника и маски вычислить адрес сети.

_________________
Сервер: вер. 7.0.1409 / 03.09.2018 20:20:58
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_45


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 29 янв 2016, 00:20 
Не в сети

Зарегистрирован: 23 янв 2015, 19:11
Сообщения: 189
Карма: 5
Походу $net это всётаки не то. Короче, если я таки всё правильно понял и в каждом пуле указана корректная маска, то вот решение при котором можно вешать любой ipшник из пула в качестве сервиса.
Пример:
Изображение
Как под API писать я не знаю, так что вот для обычного telnet активатора код
Код:
sa.command.serv.create=/queue simple add name=test target=([:tostr ($ip & $netmask)]."$bitmask")


Допустим вешаем на сервис ip = 10.20.30.29, тогда обработчик передаст команду:
Код:
/queue simple add name=test target=([:tostr (10.20.30.29 & 255.255.255.248)]."/29")

И в итоге создается такая очередь:
Изображение

_________________
Сервер: вер. 7.0.1409 / 03.09.2018 20:20:58
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_45


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 29 янв 2016, 02:26 
Не в сети
Клиент

Зарегистрирован: 21 май 2008, 10:54
Сообщения: 599
Откуда: 50-й рег.
Карма: 40
PavelGloba писал(а):
Код:
/queue simple add name=test target=([:tostr (10.20.30.29 & 255.255.255.248)]."/29")....


Очень интересная команда!
Пытался эту конструкцию подсунуть микротику через API. Походу моего воображения не хватило, остался в проигрыше, ушёл думать.

_________________
"Все правые - в резерве!" (c) (translate.google.ru/#en/ru/all%20rigths%20reserved)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 29 янв 2016, 04:18 
Не в сети

Зарегистрирован: 23 янв 2015, 19:11
Сообщения: 189
Карма: 5
А ещё можно вообще упороться по хардкору и сделать то, что хотел автор изначально.
Для этого нам понадобиться секретный макрос, которого нет в википедии, но есть в логах:
Код:
889   01.06.2015 11:39:27   ДОБАВЛЕНО   Inet: AbstractTerminalServiceActivator: Макрос $$() конвертируется просто в $.

А так же, секретные переменные, которых тоже нет в вики, но есть в логах и на форуме:
Код:
947   09.09.2015 17:18:26   ДОБАВЛЕНО   Inet: AbstractTerminalServiceActivator: $ipNetHostMin, $ipNetHostMax, $ipNetBroadcast.

И, если я всё сделал правильно (запуск с биллинга не проверялся), то код:
Код:
sa.command.serv.create=:global minhost $ipNetHostMin; :global result [:tostr $ipNetHostMin]; :for i from=1 to=[($ipNetHostMax - $ipNetHostMin)] do={:global minhost ($$()minhost + 1); :global result ($$()result.",".[:tostr $$()minhost])}; /queue simple add target=$$()result

Превратится в:
Код:
:global minhost 10.20.30.26
:global result [:tostr 10.20.30.26]
:for i from=1 to=[(10.20.30.30 - 10.20.30.26)] do={:global minhost ($minhost + 1)
:global result ($result.",".[:tostr $minhost])}
/queue simple add target=$result

И в результате получится вот это:
Изображение

_________________
Сервер: вер. 7.0.1409 / 03.09.2018 20:20:58
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_45


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 29 янв 2016, 09:49 
Не в сети
Клиент

Зарегистрирован: 21 май 2008, 10:54
Сообщения: 599
Откуда: 50-й рег.
Карма: 40
Плохо поддаётся описанию то наслаждение,
которое я получил от созерцания Ваших екзерсизов на CLI Mikrotik-a,
ув. PavelGloba.
Увы мне, увы... ,
но этой ночью мне удалось выявить ряд постов на ихем форуме,
где старшие товарищи объясняют младшим,
что конструкции , аналогичные Вашим - суть "многокомандье" , записанное в одну строку
и советуют при работе в API добиваться аналогичного "внешней обвязкой"
кланясь всеми цветами радуги ,
что все скрипты на языка микротика можно будет прозрачно портировать в директивы API в RouteOS 7.x

_________________
"Все правые - в резерве!" (c) (translate.google.ru/#en/ru/all%20rigths%20reserved)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 29 янв 2016, 17:37 
Не в сети

Зарегистрирован: 23 янв 2015, 19:11
Сообщения: 189
Карма: 5
Спасибо) Думаю любой, кто писал скрипты на каком-либо другом языке может сделать так же.

Можно чуть чуть подправить скрипт, создать его отедльно, назвать как-нибудь типа "createqueue", менять значения переменных через API и дёргать его.
Код:
It is possible to access RouterOS scripting global variables through the API if user have enough permissions to read this menu.

Код:
Note: Through API it is not possible to create new variables

Опять таки получится в несколько строк, но разве должны быть сложности в отправке нескольких команд подряд? Я давно пользуюсь командсетами, они удобнее:
Код:
sa.commandSet.cmd2.serv.create.1=/ip address remove [/ip address find network=$ip]
sa.commandSet.cmd2.serv.create.2=/interface vlan add vlan-id=$vlan disabled=no interface=LAG arp=proxy-arp name=vlan$vlan comment=$translit($contractTitle)-$servTitle-$deviceIdentifier($servDeviceId)--port$iface($servDeviceId)
sa.commandSet.cmd2.serv.create.3=/ip address add address=$ipGate network=$ip interface=vlan$vlan comment=$translit($contractTitle)

По идее и с API это должно работать, иначе в чём его смысл?
Кстати, использование API вместе с bgbilling для меня сомнительно, т.к. биллинг не требует практически никакой обратной связи (например каждый раз не перечитывает конфиг, чтобы проверить, что всё на месте). Да, API работает по-быстрее, но мне кажется это не стоит того, чтобы загонять себя в такие рамки.

_________________
Сервер: вер. 7.0.1409 / 03.09.2018 20:20:58
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_45


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 29 янв 2016, 17:45 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
Не все там так просто.

Цитата:
Так же есть специфичная переменная:
$prevIdList - результаты вызова предыдущей команды(все параметры id, через запятую).
Она нужна в тех случаях, когда есть необходимость в использовании команды find внутри другой команды. Дело в том, что Mikrotik Api не поддерживает использования таких команд, но их можно эмулировать с помощью вызова 2-х команд:
1) вначале команда print с заданными параметрами, из нее извлекаются список найденных id через запятую(их может быть несколько в общем случае)
2) Вызывается основная команда, куда вместо find подставляют список id, найденных на предыдущем шаге.
Пример конфигурации с этим параметром.
Код:
#Команды включения сервиса на устройстве
sa.command.serv.enable=/ip/firewall/address-list/add\n=address=$ip\n=list=ACCESS_LIST
#Команды выключения сервиса на устройстве
sa.command.serv.disable.1=/ip/firewall/address-list/print\n?=address=$ip
sa.command.serv.disable.2=/ip/firewall/address-list/remove\n=numbers=$prevIdList



http://wiki.bitel.ru/index.php/%D0%9E%D0%B1%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%87%D0%B8%D0%BA_%D0%B0%D0%BA%D1%82%D0%B8%D0%B2%D0%B0%D1%86%D0%B8%D0%B8_%D1%81%D0%B5%D1%80%D0%B2%D0%B8%D1%81%D0%BE%D0%B2_%D0%B4%D0%BB%D1%8F_Mikrotik(%D0%BF%D0%BE_%D0%BF%D1%80%D0%BE%D1%82%D0%BE%D0%BA%D0%BE%D0%BB%D1%83_mikrotik_api)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 29 янв 2016, 17:49 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
Вам нужен макрос, который диапазон указанный на сервисе перечисляет в виде ip через запятую ?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 29 янв 2016, 19:10 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 16 сен 2010, 11:53
Сообщения: 501
Карма: 15
да

_________________
Клиент: вер. 7.0.806 / 29.04.2016 13:18:28 os: Windows 7; java: Java HotSpot(TM) Client VM, v.1.8.0_66
Сервер: вер. 7.0.1035 / 29.04.2016 13:17:38 os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_92


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 03 фев 2016, 11:02 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 16 сен 2010, 11:53
Сообщения: 501
Карма: 15
stark писал(а):
Вам нужен макрос, который диапазон указанный на сервисе перечисляет в виде ip через запятую ?

можно это рассматривать как то, что данный макрос появится в каком-нибудь обновлении?

_________________
Клиент: вер. 7.0.806 / 29.04.2016 13:18:28 os: Windows 7; java: Java HotSpot(TM) Client VM, v.1.8.0_66
Сервер: вер. 7.0.1035 / 29.04.2016 13:17:38 os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_92


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 03 фев 2016, 20:35 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
добавил в TODO


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 02 мар 2016, 10:21 
Не в сети

Зарегистрирован: 12 дек 2013, 09:56
Сообщения: 32
Карма: 0
stark писал(а):
добавил в TODO

Есть какая-то определенность уже?

_________________
Клиент: 8.0.461 / 01.06.2021 21:19:29
os: Windows 10; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_311
Сервер: 8.0.1351 / 01.06.2021 21:22:09
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_241


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 11 мар 2016, 14:01 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
sgilyin писал(а):
stark писал(а):
добавил в TODO

Есть какая-то определенность уже?

Пока очередь не дошла.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 18 мар 2016, 21:46 
Не в сети
Разработчик
Аватара пользователя

Зарегистрирован: 19 дек 2006, 21:04
Сообщения: 5970
Карма: 256
Выкладывается обновление модуля 6.2.
Макрос $iplist


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 21 мар 2016, 10:40 
Не в сети

Зарегистрирован: 12 дек 2013, 09:56
Сообщения: 32
Карма: 0
Круто, спасибо!
Если можно пролейте свет, как правильно скормить Микротику этот макрос, пожалуйста.

Если подставить переменную в target, то на Микротик уходит первый адрес из диапазона и запятая. Остальные адреса как-то не очень отправляются.
Команда включения:
Код:
sa.command.serv.create=/queue/simple/add\n=name=$contractTitle\n=target=$iplist\n=max-limit=$param($option,speed,512)k/$param($option,speed,512)k

Отправляет это:
Код:
03-21/10:00:35  INFO [sa-p-13-t-64] MikrotikServiceActivator - execute: /queue/simple/add\n=name=A34854\n=target=10.11.93.10,\n=max-limit=51200k/51200k


Если сделать так:
Код:
sa.command.serv.create=/queue/simple/add\n=name=$contractTitle\n=target=$ip\n=max-limit=$param($option,speed,512)k/$param($option,speed,512)k

Выхлоп такой:
Код:
03-21/10:00:35  INFO [sa-p-13-t-64] MikrotikServiceActivator - execute: /queue/simple/add\n=name=A34854\n=target=10.11.93.10\n=max-limit=51200k/51200k


Вложения:
Снимок.PNG
Снимок.PNG [ 6.18 КБ | Просмотров: 10901 ]

_________________
Клиент: 8.0.461 / 01.06.2021 21:19:29
os: Windows 10; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_311
Сервер: 8.0.1351 / 01.06.2021 21:22:09
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_241
Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 21 мар 2016, 15:03 
Не в сети
Разработчик
Аватара пользователя

Зарегистрирован: 19 дек 2006, 21:04
Сообщения: 5970
Карма: 256
Да, извините, ошибка.

Можете открыть редактор динамического кода - класс ru.bitel.bgbilling.modules.inet.dyn.device.terminal.AbstractTerminalServiceActivator
705 строку поменять на
byte[] addressTo = serv.getAddressTo();
734 на
sb.setLength( sb.length() - 2 );
затем нажать сохранить и скомпилировать и Перечитать конфигурацию на серверах.

Или обновиться на последний билд, нажать Скомпилировать все и Перечитать конфигурацию на серверах.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 21 мар 2016, 15:17 
Не в сети

Зарегистрирован: 12 дек 2013, 09:56
Сообщения: 32
Карма: 0
Вот теперь все хорошо. Правила уходят, как надо. Спасибо!

_________________
Клиент: 8.0.461 / 01.06.2021 21:19:29
os: Windows 10; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_311
Сервер: 8.0.1351 / 01.06.2021 21:22:09
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_241


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 21 ] 

Часовой пояс: UTC + 5 часов [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
POWERED_BY
Русская поддержка phpBB
[ Time : 0.072s | 60 Queries | GZIP : On ]