BiTel

Форум BiTel
bgbilling.ru     docs.bitel.ru     wiki.bitel.ru     dbinfo.bitel.ru     bgcrm.ru     billing.bitel.ru     bitel.ru    
Текущее время: 29 мар 2024, 02:17

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




Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
 Заголовок сообщения: Выдача двух ip на договор
СообщениеДобавлено: 26 ноя 2019, 14:24 
Не в сети

Зарегистрирован: 05 июн 2014, 01:18
Сообщения: 149
Откуда: Котлас
Карма: 0
Работаем по IPoE на MikroTik'ах. Планируем использовать 1:1 nat. Нужно, соответственно, использовать 2 адреса на договоре.
Понятно что это проще организовать по средству дочерних сервисов. Но, как в конфигурации устройства вписать родительский и дочерний ip не могу вразумить.
Ну т.е. сейчас всё просто. Есть 1 ip и для него вот такой конфиг на активацию:
Код:
sa.command.serv.create=/ip/firewall/filter/add\n=chain=forward\n=place-before=$prevIdList\n=src-mac-address=$mac\n=disabled=no\n=src-address=$ip\n=comment=!!$servId!!
(само собой это лишь часть конфига, для наглядности)
Какая переменная отвечает за родительский ip, а какая за дочерний?
Как сделать так, что бы не выполнялся кусок конфига, отвечающий за организацию 1:1 nat, если нет дочернего сервиса?

1:1 nat = :facepalm: , я понимаю


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Выдача двух ip на договор
СообщениеДобавлено: 26 ноя 2019, 22:34 
Не в сети

Зарегистрирован: 05 июн 2014, 01:18
Сообщения: 149
Откуда: Котлас
Карма: 0
Разобрался. По средству loopServ.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Выдача двух ip на договор
СообщениеДобавлено: 27 ноя 2019, 19:54 
Не в сети

Зарегистрирован: 05 июн 2014, 01:18
Сообщения: 149
Откуда: Котлас
Карма: 0
Чёт я окопался, и взгляд замылился. 2й день бьюсь с TerminalServiceActivator, новым режимом управления MikroTik'ом и с loopServ().
Код:
# Порт подключения (если не указан, то используется порт из поля Хост/порт)
sa.terminal.port=8728
# протокол подключения (telnet/ssh/tcp/mikrotik-api/mikrotik-api-ssl/shell)
sa.terminal.protocol=mikrotik-api
# Команда выхода (отключения)
sa.terminal.exit=

#Макросы дочерних сервисов
white_ip=${ip()}
white_sID=${servId()}

#Создание договора
#Поиск запрещающего правила фаервола, создание правила фаервола сервиса
sa.terminal.serv.create.1=/ip/firewall/filter/print where comment=BLOCK
sa.terminal.serv.create.2=/ip/firewall/filter/add chain=forward place-before=${mikrotikLastIds()} src-mac-address=${mac()} disabled=no src-address=${ip()} comment=bg${servId()}
#Адрес-лист сервиса
sa.terminal.serv.create.3=/ip/firewall/address-list/add address=${ip()} list=Allow comment=bg${servId()}
#Адрес-лист дочернего сервиса
sa.terminal.serv.create.4=/ip/firewall/address-list/add address=${loopServ('white_ip', false, '')} list=WhiteCostIP comment=bg${loopServ('white_sID', false, '')}
#NAT дочернего сервиса
sa.terminal.serv.create.5=/ip/firewall/nat/add chain=srcnat src-address=${ip()} action=netmap to-addresses=${loopServ('white_ip', false, '')} comment=bg${loopServ('white_sID', false, '')}
sa.terminal.serv.create.6=/ip/firewall/nat/add chain=dstnat dst-address=${loopServ('white_ip', false, '')} action=netmap to-addresses=${ip()} comment=bg${loopServ('white_sID', false, '')}

#Включение договора
#Включение правила фаервола
sa.terminal.serv.modify.enable.1=/ip/firewall/filter/print where comment=bg${servId()}
sa.terminal.serv.modify.enable.2=${skipIfEmpty(mikrotikLastIds())}/ip/firewall/filter/enable numbers=${mikrotikLastIds()}
#Включение адрес-листа
sa.terminal.serv.modify.enable.3=/ip/firewall/address-list/print where comment=bg${servId()}
sa.terminal.serv.modify.enable.4=${skipIfEmpty(mikrotikLastIds())}/ip/firewall/address-list/enable numbers=${mikrotikLastIds()}
#Включение адрес-листа дочернего сервиса
sa.terminal.serv.modify.enable.5=/ip/firewall/address-list/print where comment=bg${loopServ('white_sID', false, '')}
sa.terminal.serv.modify.enable.6=${skipIfEmpty(mikrotikLastIds())}/ip/firewall/address-list/enable numbers=${mikrotikLastIds()}
#Включение NAT дочернего сервиса
sa.terminal.serv.modify.enable.7=/ip/firewall/nat/print where comment=bg${loopServ('white_sID', false, '')}
sa.terminal.serv.modify.enable.8=${skipIfEmpty(mikrotikLastIds())}/ip/firewall/nat/enable numbers=${mikrotikLastIds()}

#Выключение договора
#Выключение правила фаервола
sa.terminal.serv.modify.disable.1=/ip/firewall/filter/print where comment=bg${servId()}
sa.terminal.serv.modify.disable.2=${skipIfEmpty(mikrotikLastIds())}/ip/firewall/filter/disable numbers=${mikrotikLastIds()}
#Выключение адрес-листа
sa.terminal.serv.modify.disable.3=/ip/firewall/address-list/print where comment=bg${servId()}
sa.terminal.serv.modify.disable.4=${skipIfEmpty(mikrotikLastIds())}/ip/firewall/address-list/disable numbers=${mikrotikLastIds()}
#Выключение адрес-листа дочернего сервиса
sa.terminal.serv.modify.disable.5=/ip/firewall/address-list/print where comment=bg${loopServ('white_sID', false, '')}
sa.terminal.serv.modify.disable.6=${skipIfEmpty(mikrotikLastIds())}/ip/firewall/address-list/disable numbers=${mikrotikLastIds()}
#Выключение NAT дочернего сервиса
sa.terminal.serv.modify.disable.7=/ip/firewall/nat/print where comment=bg${loopServ('white_sID', false, '')}
sa.terminal.serv.modify.disable.8=${skipIfEmpty(mikrotikLastIds())}/ip/firewall/nat/disable numbers=${mikrotikLastIds()}

#Удаление договора
#Удаление правила фаервола
sa.terminal.serv.cancel.1=/ip/firewall/filter/print where comment=bg${servId()}
sa.terminal.serv.cancel.2=${skipIfEmpty(mikrotikLastIds())}/ip/firewall/filter/remove numbers=${mikrotikLastIds()}
#Удаление адрес-листа
sa.terminal.serv.cancel.3=/ip/firewall/address-list/print where comment=bg${servId()}
sa.terminal.serv.cancel.4=${skipIfEmpty(mikrotikLastIds())}/ip/firewall/address-list/remove numbers=${mikrotikLastIds()}
#Удаление очереди
sa.terminal.serv.cancel.5=/queue/simple/print where comment=bg${servId()}
sa.terminal.serv.cancel.6=${skipIfEmpty(mikrotikLastIds())}/queue/simple/remove numbers=${mikrotikLastIds()}
#Удаление адрес-листа дочернего сервиса
sa.terminal.serv.cancel.7=/ip/firewall/address-list/print where comment=bg${loopServ('white_sID', false, '')}
sa.terminal.serv.cancel.8=${skipIfEmpty(mikrotikLastIds())}/ip/firewall/address-list/remove numbers=${mikrotikLastIds()}
#Удаление NAT дочернего сервиса
sa.terminal.serv.cancel.9=/ip/firewall/nat/print where comment=bg${loopServ('white_sID', false, '')}
sa.terminal.serv.cancel.10=${skipIfEmpty(mikrotikLastIds())}/ip/firewall/nat/remove numbers=${mikrotikLastIds()}

#Создание очереди для сервиса
#1   MB/Sec
sa.terminal.serv.inetOption.10.enable=/queue/simple/add max-limit=1M/1M target=${ip()} comment=bg${servId()}
Как только раскомменчиваю куски связанные с дочерними сервисами, inetAccess начинает болеть.
Сперва пишет
Код:
connection 11-27/16:26:11 ERROR [sa-p-13-t-28] AcknowledgeConsumer - Error on device:99 - me.legrange.mikrotik.MikrotikApiException: unknown parameter
ru.bitel.bgbilling.common.BGException: Error on device:99 - me.legrange.mikrotik.MikrotikApiException: unknown parameter
        at ru.bitel.bgbilling.modules.inet.access.sa.ServiceActivatorDeviceWorker.doTask(ServiceActivatorDeviceWorker.java:516)
        at ru.bitel.bgbilling.kernel.event.AsyncEventWorker.internalDoTaskImpl(AsyncEventWorker.java:248)
        at ru.bitel.bgbilling.kernel.event.AsyncEventWorker.notify(AsyncEventWorker.java:238)
        at ru.bitel.bgbilling.kernel.event.AcknowledgeConsumer.onMessage0(AcknowledgeConsumer.java:77)
        at ru.bitel.bgbilling.kernel.event.AsyncEventWorker.internalDoTask(AsyncEventWorker.java:213)
        at ru.bitel.bgbilling.kernel.event.AsyncEventWorker.doTasks(AsyncEventWorker.java:120)
        at ru.bitel.bgbilling.modules.inet.access.sa.ServiceActivatorDeviceWorker.runWorker(ServiceActivatorDeviceWorker.java:253)
        at ru.bitel.bgbilling.kernel.event.EventWorker.internalRunWorker(EventWorker.java:154)
        at ru.bitel.bgbilling.modules.inet.access.sa.ServiceActivatorDeviceWorker.runImpl(ServiceActivatorDeviceWorker.java:157)
        at ru.bitel.common.worker.WorkerTask.run(WorkerTask.java:87)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
        at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:745)
        at ru.bitel.common.worker.WorkerThread.run(WorkerThread.java:46)
Caused by: me.legrange.mikrotik.MikrotikApiException: unknown parameter
        at me.legrange.mikrotik.impl.ApiConnectionImpl$SyncListener.getResults(ApiConnectionImpl.java:476)
        at me.legrange.mikrotik.impl.ApiConnectionImpl$SyncListener.access$100(ApiConnectionImpl.java:430)
        at me.legrange.mikrotik.impl.ApiConnectionImpl.execute(ApiConnectionImpl.java:114)
        at me.legrange.mikrotik.impl.ApiConnectionImpl.execute(ApiConnectionImpl.java:72)
        at ru.bitel.bgbilling.kernel.network.mikrotik.MikrotikApiSession.doCommand(MikrotikApiSession.java:92)
        at ru.bitel.bgbilling.modules.inet.dyn.device.terminal.TerminalSession$MikrotikApiTerminalSession.sendCommandImpl(TerminalSession.java:678)
        at ru.bitel.bgbilling.modules.inet.dyn.device.terminal.TerminalSession.sendCommand(TerminalSession.java:140)
        at ru.bitel.bgbilling.modules.inet.dyn.device.terminal.TerminalSession.sendCommand(TerminalSession.java:133)
        at ru.bitel.bgbilling.modules.inet.dyn.device.terminal.TerminalServiceActivator.executeCommand(TerminalServiceActivator.java:762)
        at ru.bitel.bgbilling.modules.inet.dyn.device.terminal.TerminalServiceActivator.executeCommands(TerminalServiceActivator.java:728)
        at ru.bitel.bgbilling.modules.inet.dyn.device.terminal.TerminalServiceActivator.executeCommands(TerminalServiceActivator.java:689)
        at ru.bitel.bgbilling.modules.inet.dyn.device.terminal.TerminalServiceActivator.serviceCreate(TerminalServiceActivator.java:2213)
        at ru.bitel.bgbilling.modules.inet.access.sa.ServiceActivatorSet.serviceCreate(ServiceActivatorSet.java:386)
        at ru.bitel.bgbilling.modules.inet.access.sa.ServiceActivatorDeviceWorker.doCommand(ServiceActivatorDeviceWorker.java:576)
        at ru.bitel.bgbilling.modules.inet.access.sa.ServiceActivatorDeviceWorker.doTask(ServiceActivatorDeviceWorker.java:512)
        ... 17 more
Caused by: me.legrange.mikrotik.impl.ApiCommandException: unknown parameter
        at me.legrange.mikrotik.impl.ApiConnectionImpl$Processor.run(ApiConnectionImpl.java:267)
потом уходит в рекурсию создания сервиса, причём исключительно первые две команды выполняет(на создание правила фаерволла) и пишет
Код:
connection 11-27/16:27:11 ERROR [sa-p-13-t-25] EventWorker - Error on device:99 - me.legrange.mikrotik.MikrotikApiException: failure: already have such entry
ru.bitel.bgbilling.common.BGException: Error on device:99 - me.legrange.mikrotik.MikrotikApiException: failure: already have such entry
        at ru.bitel.bgbilling.modules.inet.access.sa.ServiceActivatorDeviceWorker.doTask(ServiceActivatorDeviceWorker.java:516)
        at ru.bitel.bgbilling.kernel.event.AsyncEventWorker.internalDoTaskImpl(AsyncEventWorker.java:248)
        at ru.bitel.bgbilling.kernel.event.AsyncEventWorker.internalDoTask(AsyncEventWorker.java:220)
        at ru.bitel.bgbilling.kernel.event.AsyncEventWorker.doTasks(AsyncEventWorker.java:120)
        at ru.bitel.bgbilling.modules.inet.access.sa.ServiceActivatorDeviceWorker.runWorker(ServiceActivatorDeviceWorker.java:253)
        at ru.bitel.bgbilling.kernel.event.EventWorker.internalRunWorker(EventWorker.java:154)
        at ru.bitel.bgbilling.modules.inet.access.sa.ServiceActivatorDeviceWorker.runImpl(ServiceActivatorDeviceWorker.java:157)
        at ru.bitel.common.worker.WorkerTask.run(WorkerTask.java:87)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
        at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:745)
        at ru.bitel.common.worker.WorkerThread.run(WorkerThread.java:46)
Caused by: me.legrange.mikrotik.MikrotikApiException: failure: already have such entry
        at me.legrange.mikrotik.impl.ApiConnectionImpl$SyncListener.getResults(ApiConnectionImpl.java:476)
        at me.legrange.mikrotik.impl.ApiConnectionImpl$SyncListener.access$100(ApiConnectionImpl.java:430)
        at me.legrange.mikrotik.impl.ApiConnectionImpl.execute(ApiConnectionImpl.java:114)
        at me.legrange.mikrotik.impl.ApiConnectionImpl.execute(ApiConnectionImpl.java:72)
        at ru.bitel.bgbilling.kernel.network.mikrotik.MikrotikApiSession.doCommand(MikrotikApiSession.java:92)
        at ru.bitel.bgbilling.modules.inet.dyn.device.terminal.TerminalSession$MikrotikApiTerminalSession.sendCommandImpl(TerminalSession.java:678)
        at ru.bitel.bgbilling.modules.inet.dyn.device.terminal.TerminalSession.sendCommand(TerminalSession.java:140)
        at ru.bitel.bgbilling.modules.inet.dyn.device.terminal.TerminalSession.sendCommand(TerminalSession.java:133)
        at ru.bitel.bgbilling.modules.inet.dyn.device.terminal.TerminalServiceActivator.executeCommand(TerminalServiceActivator.java:762)
        at ru.bitel.bgbilling.modules.inet.dyn.device.terminal.TerminalServiceActivator.executeCommands(TerminalServiceActivator.java:728)
        at ru.bitel.bgbilling.modules.inet.dyn.device.terminal.TerminalServiceActivator.executeCommands(TerminalServiceActivator.java:689)
        at ru.bitel.bgbilling.modules.inet.dyn.device.terminal.TerminalServiceActivator.serviceCreate(TerminalServiceActivator.java:2213)
        at ru.bitel.bgbilling.modules.inet.access.sa.ServiceActivatorSet.serviceCreate(ServiceActivatorSet.java:386)
        at ru.bitel.bgbilling.modules.inet.access.sa.ServiceActivatorDeviceWorker.doCommand(ServiceActivatorDeviceWorker.java:576)
        at ru.bitel.bgbilling.modules.inet.access.sa.ServiceActivatorDeviceWorker.doTask(ServiceActivatorDeviceWorker.java:512)
        ... 15 more
Caused by: me.legrange.mikrotik.impl.ApiCommandException: failure: already have such entry
        at me.legrange.mikrotik.impl.ApiConnectionImpl$Processor.run(ApiConnectionImpl.java:267)
и продолжает клепать эти правила, даже если удалить сервис (принудительно или с переносом даты открытия на будущее число).
Перезапуск аксесса не помогает. Помогает "удаление событий из очереди" в дереве устройств.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Выдача двух ip на договор
СообщениеДобавлено: 27 ноя 2019, 22:19 
Не в сети

Зарегистрирован: 05 июн 2014, 01:18
Сообщения: 149
Откуда: Котлас
Карма: 0
Я так понимаю, что в
Код:
sa.terminal.serv.create.1=/ip/firewall/filter/print where comment=BLOCK
sa.terminal.serv.create.2=/ip/firewall/filter/add chain=forward place-before=${mikrotikLastIds()} src-mac-address=${mac()} disabled=no src-address=${ip()} comment=bg${servId()}
нужно впихнуть проверку на уникальность, но не могу вразумит, как это сделать.


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

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


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

Сейчас этот форум просматривают: Google [Bot] и гости: 1


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

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