Настройка шлюза Mikrotik RouterOS

Данный тип шлюза используется для управления маршрутизаторами Mikrotik посредством SSH или Telnet-соединения. Биллинг помещает правила, открывающие конкретные адреса клиентов.

На вкладке Типы шлюзов создайте тип шлюза Mikrotik и установите в нем следующую конфигурацию:

user_rule.editor.class=bitel.billing.module.services.ipn.editor.MikrotikContractRuleEditor
gate_manager.class=bitel.billing.server.ipn.MikrotikTelnetGateWorker

Приведенная выше конфигурация для telnet-соединения. Для ssh-соединения поменяйте gate_manager.class=bitel.billing.server.ipn.MikrotikGateWorker. Но мы не рекомендуем его использовать для больших нагрузок.

На вкладке Команды при редактировании данного типа шлюза задайте:

[DEFAULT]
[OPEN]
<LOOP>
ip firewall address-list add address={A} list=ACCESS_LIST comment=!!{CID}!!
</LOOP>
[/OPEN]
 
[CLOSE]
<LOOP>
ip firewall address-list remove "!!{CID}!!"
</LOOP>
[/CLOSE]
 
[DELETE]
<LOOP>
ip firewall address-list remove "!!{CID}!!"
</LOOP>
[/DELETE]
[/DEFAULT]

Здесь команды разделяются на 3 блока: открывающие команды (между тегами [OPEN][/OPEN]), закрывающие команды (между тегами [CLOSE][/CLOSE]) и удаляющие команды (между тегами [DELETE][/DELETE]). В данном примере закрывающие и удаляющие команды одинаковые. Сюда можно помещать любые команды, которые поддерживаются ssh-консолью Mikrotik. При этом команды проходят предобработку на стороне сервера Биллинга. Обработка команд происходит аналогичным образом, как и обработка команд Manad. Т.е макросы вида {A} заменяются на адрес из выбранных диапазонов для тегов <LOOP>, а макросы {NET} и {NET_MASK} заменяются на выбранные сети для тегов <LOOP_NET> и <LOOP_NET_MASK> соответственно.

Ещё для шлюза Mikrotik производятся дополнительные преобразования: макрос {CID} - преобразуются в код договора, независимо от того, где встретится (внутри цикла LOOP или нет ).

Т.е. например правила:

<LOOP>
ip firewall address-list add address={A} list=ACCESS_LIST comment=!!{CID}!!
</LOOP>

Преобразуется в :

ip firewall address-list add address={192.168.184.10} list=ACCESS_LIST comment=!!12345!!
ip firewall address-list add address={192.168.184.11} list=ACCESS_LIST comment=!!12345!!

если выбраны адреса 192.168.184.10 и 192.168.184.11 и код договора - 12345.

На вкладке Типы правил можете завести (если у вас ещё нет ) - "Пустое правило " и добавить его для данного типа шлюза .

На вкладке Шлюзы создайте новый шлюз типа Mikrotik и установите в нем следующую конфигурацию:

images/download/attachments/43386120/mikrotik_gate.png
Здесь login - это логин, а ключевое слово - пароль для ssh-соединения Mikrotik.

Также можно указать время ожидания ответа, по истечению которого шлюз сбрасывает соединение и выдаёт ошибку :

timeout=2000

Далее в договоре выбираем модуль IPN, в нем на вкладке Шлюзы добавляем наш новый шлюз и для него указываем наш тип правил test:

images/download/attachments/43386120/ipn_mikrotik_contract_rules.png

Для инициализации правил в системе Mikrotik запускаем следующие команды:

[admin@MikroTik] > ip firewall filter add chain=forward action=accept dst-address-list=ACCESS_LIST
[admin@MikroTik] > ip firewall filter add chain=forward action=accept src-address-list=ACCESS_LIST
[admin@MikroTik] > ip firewall filter add chain=forward action=drop

В данном примере происходит управление с помощью добавления и удаления ip-адреса в ACCESS_LIST. Все правила добавляются с комментарием "!! код договора !!", чтобы можно было их удалять по этому комментарию. Вы можете менять правила для управления шлюзом Mikrotik произвольным образом (добавлять ширину каналов и т.п.), но есть ограничение: должно быть хотя бы одно правило, добавляющее ip-адрес в address-list, т.к. проверка при синхронизации шлюза ищет с помощью команды "ip firewall address-list print" строку c комментарием "!!код договора!!". Присутствие этой строки означает, что шлюз открыт для данного договора.