В данной статье я хочу поделиться небольшими находками и приспособлениями, которые мне удалось найти и реализовать в RouterOS. Все, что будет написано ниже, проверено и работает на Mikrotik RB 951 серии.

Сегодня я поделюсь следующими штуками в среде RouterOS:
1) Полуавтоматическое обновление прошивок устройств Mikrotik, уведомление по эл.почте и/или СМС
2) Автоматическое копирование настроек между устройствами
3) Блокировка трафика, заворот его в другой шлюз

Интересно? Тогда прошу под кат.

Пункт 1: Полуавтоматическое обновление прошивок устройств Mikrotik, уведомление по эл.почте и/или СМС


Как многие знают, прошивку для Микротика выходят регулярно, в каждом обновлении куча исправлений. Обновлять устройства нужно, от этого не уйти. Но мало того, что нужно обновлять ROS, нужно обновлять еще и FW самого устройства.
Честно скажу, мне лень следить за обновлениями. Я подписан на новости на сайте Микротик, но уже месяца 3 с этими новостями все очень плохо (писем просто нет). И все бы ничего, но у меня 3 устройства дома и 2 на предприятии.

Сначала немного теории: мой случай — это 3 устройства 951 серии, соединенные каждый с каждым по VPN. Одна из точек — мастер, остальные берут нужные обновления с мастера по внутреннему каналу. Мастер проверяет обновления через Интернет, автоматически скачивает их и высылает уведомление по почте и СМС.
Но есть один момент: по умолчанию файлы обновлений складываются в корень Files, только оттуда Микротик может обновиться при перезагрузке. Сразу после обновления файлы удаляются. Для моей схемы это критично, поэтому нужно сложить файлы в какую-то из папок, там они не удалятся и другие точки будут их видеть.

Что понадобится:
понадобится FTP-сервер на мастере.
опционально — настроенные ветки Email и SMS

Как сделать: Мастер
Необходим только скрипт, нужные переменные находятся в верхней части.
Скрипт обновления
:local email "Ваш email"
:local user "Ваш пользователь"
:local pass "Ваш пароль"
:local folder "Имя папки куда копировать"
:local phone "Ваш номер мобильного с +"
#####
/system package update check-for-updates
:delay 3
:if ( [/system package update get installed-version] = [/system package update get latest-version] ) do={ 
/tool e-mail send to=$email subject="Обновление Mikrotik"  body="Доступно обновление RouterOS! Новая версия - $[/system package update get latest-version]. Что нового - http://www.mikrotik.com/download"
/tool sms send usb1 channel=2 "$phone" message="New RouterOS version is available!"
/system package update download
:delay 20
:foreach i in=[/file find where package-version=[/system package update get latest-version]] do={ 
/tool fetch address=127.0.0.1 src-path="$[/file get number="$i" name]" dst-path="$folder/$[/file get number="$i" name]" user=$user password=$pass mode=ftp 
  }
 }


ВНИМАНИЕ! В версии 6.32.1 перевыкачивать обновления можно, а в версии 6.32.2 — нет! Также в новой версии появился статус обновления, так что можно использовать такую проверку в ваших скриптах.
В зависимости от вашего интернет-канала нужно выставить соответствующий второй delay.
В расписании задаем нужный интервал проверки. Мой выбор — каждые 12 часов.

Примечание: начиная с версии 6.32.1 возникли проблемы с кодировкой e-mail сообщений.

Как сделать: Слейв
Необходимы настройка и 2 скрипта.
Нацеливание на мастер-точку
/system upgrade upgrade-package-source add address=xxx.xxx.xxx.xxx user=user

И введите пароль удаленного пользователя.

Скрипт обновления RouterOS
/system upgrade refresh
:delay 5
/system upgrade download-all reboot-after-download=yes


Скрипт обновления FW
:if ( [/system routerboard get current-firmware] < [/system routerboard get upgrade-firmware] ) do {
/system routerboard upgrade
/system reboot
}


В моем случае скрипты выполняются 1 раз в сутки, интервал между ними составляет 10 минуты.
Второй скрипт в расписании можно установить на стартап системы. Если кто не знает, startup означает запуск через 3 секунды после старта устройства.

«Почему бы не fetch'ить файлы прямиком на слейв-точки?» — спросите вы. Потому что на точках могут быть установлены разные пакеты. Лучше уж сами слейвы будут решать что им качать, а что нет.

Если у вас одно устройство Mikrotik, то вы можете скомпоновать скрипты для полностью автоматизированного обновления ПО.

Пункт 2: Автоматическое копирование настроек между устройствами


Как я уже сказал, лень мое второе имя. А еще у меня на каждом из устройств есть открытый гостевой Wi-Fi только «для своих», по MAC'ам. Поэтому было принято волевое решение иметь на всех точках одинаковый список разрешенных устройств. База располагается на одной из точек (Мастер) и будет копироваться раз в сутки на нужные устройства. Понадобятся FTP-серверы на точках, куда нужно копировать настройки.

Итак, есть 2 варианта: простой и правильный.
Простой:
Заключается в последовательной отправке 2х файлов.
Скрипт
:local ip "IP точки, на которую нужно скопировать МАС"
:local user "Пользователь"
:local password "Пароль"
#####
/interface wireless access-list export compact file=address
:delay 1
/tool fetch upload=yes address=$ip mode=ftp src-path=address_flush.rsc dst-path=address_flush.auto.rsc user=$user password=$password
:delay 1
/tool fetch upload=yes address=$ip mode=ftp src-path=address.rsc dst-path=address.auto.rsc user=$user password=$password


Содержимое файла address_flush.rsc
/interface  wireless access-list remove [/interface wireless access-list find]


Правильный:
Предыдущий вариант не учитывает возможный разрыв соединения между fetch'ами. Если такая ситуация произойдет, access-list будет пуст со всеми вытекающими. Следовательно, нужна проверка наличия на наличие файла с настройками, а уже после — очистка текущего содержимого листа. Последнее действие скрипта — удаление файла. А именно:
Скрипт
:local ip "IP точки, на которую нужно скопировать МАС"
:local user "Пользователь"
:local password "Пароль"
#####
/interface wireless access-list export compact file=wifi2_mac
:delay 1
/tool fetch upload=yes address=$ip mode=ftp src-path=wifi2_mac.rsc dst-path=wifi2_mac.rsc user=$user password=$password
:delay 1
/tool fetch upload=yes address=$ip mode=ftp src-path=address_proc.rsc dst-path=address_proc.auto.rsc user=$user password=$password
:delay 10
/file remove [/file find where name=wifi2_mac.rsc]


Содержимое файла address_proc.rsc
#2015.09.11 - AcidVenom - Copy MAC to extertnal Script
:delay 5
:if ( [/file find where name=wifi2_mac.rsc] != "" ) do={
/interface  wireless access-list remove [/interface wireless access-list find]
/import wifi2_mac.rsc
:delay 1
/file remove [/file find where name=wifi2_mac.rsc]
}


Строго говоря, файлы address_flush.rsc и address_proc.rsc могут иметь произвольные имена и расширения, но на выходе в dst-path их вид должен быть *.auto.rsc.

По образу и подобию вы можете копировать нужные вам настройки практически «на лету».

Пункт 3: Блокировка трафика, заворот его в другой шлюз


На тему блокировки определенного трафика статьи гуглятся, поэтому буду краток — Layer7 Protocol.
К примеру, блокировка телеметрии Microsoft:
/ip firewall layer7-protocol add name=telemetry regexp=^.+(data.microsoft.com|telemetry.microsoft.com).*$
/ip firewall filter add chain=forward protocol=tcp in-interface=bridge-local layer7-protocol=telemetry action=reject reject-with=tcp-reset
/ip firewall filter add chain=forward protocol=tcp out-interface=bridge-local layer7-protocol=telemetry action=reject reject-with=tcp-reset

Подробнее о L7 можно почитать на сайте проекта.

Следующий момент — заворот трафика отдельных машин в другой шлюз, который не по умолчанию.
/ip firewall mangle add chain=prerouting src-address=192.168.0.0/24 dst-address=!192.168.0.0/16 action=mark-routing new-routing-mark=another_gateway passthrough=yes 
/ip route add dst-address=0.0.0.0/0 gateway=192.168.1.1 check-gateway=ping type=unicast distance=1 routing-mark=another_gateway

Параметр Distance должен быть ниже, чем у шлюза по умолчанию. При необходимости вместо подсети источника можно указать единичный IP или адресный лист.
Таким образом можно завернуть весь исходящий наружу трафик на шлюз 192.168.1.1. Очень советую указывать шлюз через IP, иначе при разрыве правило в Route List просто стирается.

Ну и последняя фишка на сегодня — заворот только отдельных сайтов на шлюз не по умолчанию. Это очень полезно, если у вас есть прокси не на территории РФ, а вам хочется и/или нужно посетить заблокированный РКН сайт.
Это немного сложнее, т.к. L7 работает тогда, когда соединение уже установлено. Поэтому будем использовать адресные листы.
Для примера возьмем forum.mikrotik.com, для которого мой основной IP был в спам-диапазоне.
/ip firewall layer7-protocol add name=forum.mikrotik regexp=^.+(forum.mikrotik.com).*$
/ip firewall mangle add chain=prerouting src-address=192.168.0.0/24 dst-address=!192.168.0.0/16 layer7-protocol=forum.mikrotik action=add-dst-to-address-list address-list=forum.mikrotik.ip address-list-timeout=24:00:00
/ip firewall mangle add chain=prerouting src-address=192.168.0.0/24 dst-address=!192.168.0.0/16 dst-address-list=forum.mikrotik.ip action=mark-routing new-routing-mark=forum.mikrotik.rm passthrough=yes 
/ip route add dst-address=0.0.0.0/0 gateway=192.168.1.1 check-gateway=ping type=unicast distance=1 routing-mark=forum.mikrotik.rm

Минус данного решения — первое соединение закончится ошибкой, но последующие будут идти через нужный шлюз.

Продолжение следует

Комментарии (30)


  1. GeXoGeN
    22.09.2015 10:27
    +1

    Насколько я помню, L7 не будет работать с https сайтами. В этой статье я рассказывал, как наполнять адрес-лист с помощью скрипта и протокола DNS.
    По второму пункту вопрос, почему не хотите использовать CAPsMAN для управления точками доступа?


    1. chelaxe
      22.09.2015 10:37

      L7 будет работать с чем угодно, тут дело в другом. В том что пакет https зашифрован, а так L7 какая разница какой пакет.


    1. AcidVenom
      22.09.2015 10:48

      Блокирует, но не сразу, требуется время на реакцию. Проверено на e.mail.ru, gmail.com и других. По поводу наполнения адресного листа — я стараюсь использовать стандартные реализации RouterOS и применять скрипты только там, где иначе никак.
      Основная мысль второго пункта — копирование настроек между устройствами. CAPsMAN же только контроллер ТД. Копирование access-list'а — это только пример. (На самом деле да, надо заняться CAPsMAN'ом, спасибо).


      1. chelaxe
        22.09.2015 10:55

        Блокирует, но не сразу, требуется время на реакцию.

        По этой причине, а так же по той что нельзя перенаправить после срабатывания L7 на страничку заглушки пришлось перейти к использованию WEb-Proxy у MikroTik


        1. AcidVenom
          22.09.2015 11:04

          Web-proxy https не умеет :(
          Под временем на реакцию я имел ввиду первоначальный анализ трафика. То есть до начала срабатывания блокировки или роутинга может пройти не одна минута. Скорее всего это зависит от загруженности канала.


          1. chelaxe
            22.09.2015 13:56

            Web-proxy работает как прозрачный прокси. Интересно а как просто прокси на порту он будет работать? В этом случае можно WPAD настроить и все перевести на проксю, ну а 443 порт дропнуть. Если же нет то как я делал — сквид на отдельном сервере.


            1. AcidVenom
              23.09.2015 07:46

              Не вполне понимаю о чем речь про прокси на порт. Поясните пожалуйста.


              1. chelaxe
                23.09.2015 07:57

                непрозрачный прокси — когда в браузере указываешь ip и порт прокси сервера в этом случае туда попадает и http, и https трафик. Для того чтобы не указывать в браузере вручную делают wpad файл и размещают на wpad хосте. Так же в dhcp и dns сервере.


                1. AcidVenom
                  23.09.2015 08:15

                  Это понятно. Но если вы и так дропаете 443 порт, то… то остается только обычный http. Или я как-то иначе понимаю?
                  Даже если https завернуть на Web-proxy, Web-proxy ничего с этим трафиком не сделает, не умеет.


                  1. chelaxe
                    23.09.2015 08:57

                    если непрозрачный прокси и браузер ходит через него то https трафик (по крайней мере запрос к домену) будет доступен прокси серверу (например со сквидом это так. видно куда пользователь ходил), а 443 дропаем чтобы в обход прокси сервера не ходили. 80 порт завернут на прозрачный прокси. Вот как то так.


                    1. AcidVenom
                      23.09.2015 09:58

                      Https трафик ходит, соединения видно. Но Web-proxy не совсем тот инструмент для отслеживания активности пользователей.


    1. AcidVenom
      22.09.2015 20:19

      Встречный вопрос по CAPsMAN'у: требуется ли постоянная связь между менеджером и клиентом? В случае разрыва у клиента останутся старые настройки или настроек не станет совсем?


      1. GeXoGeN
        23.09.2015 08:33

        Очень интересный вопрос. У меня нет возможности проверить. Если в момент загрузки CAP не установит связь с CAPsMAN'ом, то работать точно не будет. При обрыве связи скорее всего тоже, хотя я не уверен. Думаю, для Вас ничего сложного нет в том, чтобы попробовать самостоятельно изучить данный вопрос, поэкспериментировать.


        1. AcidVenom
          23.09.2015 08:35

          Намек принят. Отпишусь ниже как проверю.


        1. AcidVenom
          28.09.2015 22:57

          Проверил и еще раз перечитал документацию:
          When a CAP is controlled by CAPsMAN it only requires the minimum configuration required to allow it to establish connection with CAPsMAN. Functions that were conventionally executed by an AP (like access control, client authentication) are now executed by CAPsMAN. The CAP device now only has to provide the wireless link layer encryption/decryption.

          Работает только в он-лайн режиме.


  1. derwin
    22.09.2015 20:25
    +1

    на своей памяти помню 3 версии RouterOS(например примерно 6,11), которые намертво убивали половину микротиков на предприятии(у меня их больше 100, не спрашивайте где и зачем). Так что я зарёкся обновлять их раз в год, чего и вам советую.


    1. AcidVenom
      22.09.2015 20:39

      У меня был инцидент лишь 1 раз как раз в районе 6.11 — IPSec отказывался работать между 6.11 и любой версией ниже. Обновил все устройства, взлетело без проблем.


    1. chelaxe
      23.09.2015 05:37

      При обновлении биоса? При обновлении прошивки не помнится чтобы кто-то умирал. Парк более 1к устройство фирмы Микротик.


      1. yellow
        23.09.2015 06:05

        Можете тоже рассказать о своей топологии микротиков? 1К это более чем значительно.


        1. chelaxe
          23.09.2015 06:29

          Провайдер. Внутри дома от 3 до 7 маленьких роутеров. По подъезду китайские свитчи. Между домами радиоканалы в MESH сети. Доступ в основном по pppoe реализован. В ядре несколько CloudCoreRouter и один ПК с MikroTik на борту (пока не сменили на еще один CCR1072).


          1. yellow
            23.09.2015 10:17

            Зачем в домах столько роутеров? Одного бы не хватило? (Спрашиваю как человек далёкий от проблем и потребностей провов).


            1. chelaxe
              23.09.2015 10:30

              Один на два подъезда в некоторых случаях один на подъезд. Используются 750 как правило внутри дома а снаружи барабаны и зайцы.


      1. derwin
        23.09.2015 06:32

        нет. В указанной мною версии микротики при заходе в первое верхнее quick меню просто вешались и переставали пинговаться. NETINSTALL для отката спасал.


        1. chelaxe
          23.09.2015 06:39

          quick меню не пользовался, да и вообще в основном через ssh ходил, так что ничего по этому поводу не скажу. Но помню была у них прошивка в которой после прошивки биоса устройство смело можно было выбрасывать. Какие то барабаны были сейчас уже не вспомню какие точно.

          А в Вашем случае и подобных связанных с прошивкой — NETINSTALL спасет. Для малых сетей в офисах или дома можно пользоваться если готов к таким сюрпризам. Все же это не часто надеюсь.


    1. yellow
      23.09.2015 05:57

      И всё же попрошу вас рассказать про свои больше 100 микротиков. Я думаю многим тут будет интересно. Уж очень интересна топология. Если конечно под NDA не попадает. =)
      Про обновления с вами согласен, вообще следую правилу: работает — не трогай.


      1. chelaxe
        23.09.2015 06:20
        +1

        работает — не трогай

        для поддержания рабочего состояния и правильного рабочего состояния обновляться необходимо. Подтверждение этому хотя бы постоянные обнаружения уязвимостей в различных технологиях. У микротика тоже были уязвимости и неверно работающие технологии.


    1. Night_Snake
      23.09.2015 12:38

      Даже если не убивает, то багов можно с новой версией поймать столько, что расхлебывать будешь аккурат до следующего релиза


  1. strelokr
    23.09.2015 07:29

    Открытая сеть при передаче компроментирует мак адреса. Подменить не тяжело.


    1. AcidVenom
      23.09.2015 07:43

      Для изолированной гостевой виртуальной ТД не страшно.


  1. Night_Snake
    23.09.2015 12:41
    +1

    Обновлять микротики в автоматическом режиме — это верный способ нажить себе недосып и недовольство клиентов.
    Наиболее рациональный способ — это добраться до той версии ROS, где все работает так, как тебе надо, и успокоиться на полгода-год. Через год почитать список багфиксов, и, если есть что-то интересное, обновляться.

    У меня до сих пор все радиомосты работают на 5.26 и в ус не дуют. Дома 6.32 для экспериментов. Клиентам сейчас ставлю 6.30