Mikrotik: небольшие полезности. Часть 1

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

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

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

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


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

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

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

    Как сделать: Мастер
    Необходим только скрипт, нужные переменные находятся в верхней части.
    Скрипт обновления для версии <6.32.2
    :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.2
    :local email "Ваш email"
    :local user "Ваш пользователь"
    :local pass "Ваш пароль"
    :local folder "Имя папки куда копировать"
    :local phone "Ваш номер мобильного с +"
    #####
    :if ( [/system package update get status] != "Downloaded, please reboot router to upgrade it" ) do={
    /system package update check-for-updates
    :delay 3
    :if ( [/system package update get installed-version] != [/system package update get latest-version] ) do={
    /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 
      }
    /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!"
     }
    }
    


    Скрипт для версии 6.32.2+ включает в себя проверку на уже скачанные обновления. Так же обратите внимание, что даже если обновления скачаны, check-for-updates устанавливает статус в «New version is available».
    В зависимости от вашего интернет-канала нужно выставить соответствующий второй 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
    

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

    P.S.: обновлено 20.10.2015. Добавлен скрипт обновления для версии 6.32.2+

    P.P.S.: С выходом версии 6.32.3 починили email-рассылку. Хочется думать, что на починку сподвигла данная статья.

    P.P.P.S: обновлено 09.11.2015.
    С выходом версии 6.33 выяснилась неприятность: микротик не может сравнивать версии разных порядков, т.е. 6.32.3 и 6.33.
    Поэтому скрипт изменен с учетом этого казуса. Так же уведомления перенесены ниже для отправки в последняя очередь.
    Share post

    Similar posts

    Comments 31

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

            По этой причине, а так же по той что нельзя перенаправить после срабатывания L7 на страничку заглушки пришлось перейти к использованию WEb-Proxy у MikroTik
              0
              Web-proxy https не умеет :(
              Под временем на реакцию я имел ввиду первоначальный анализ трафика. То есть до начала срабатывания блокировки или роутинга может пройти не одна минута. Скорее всего это зависит от загруженности канала.
                0
                Web-proxy работает как прозрачный прокси. Интересно а как просто прокси на порту он будет работать? В этом случае можно WPAD настроить и все перевести на проксю, ну а 443 порт дропнуть. Если же нет то как я делал — сквид на отдельном сервере.
                  0
                  Не вполне понимаю о чем речь про прокси на порт. Поясните пожалуйста.
                    0
                    непрозрачный прокси — когда в браузере указываешь ip и порт прокси сервера в этом случае туда попадает и http, и https трафик. Для того чтобы не указывать в браузере вручную делают wpad файл и размещают на wpad хосте. Так же в dhcp и dns сервере.
                      0
                      Это понятно. Но если вы и так дропаете 443 порт, то… то остается только обычный http. Или я как-то иначе понимаю?
                      Даже если https завернуть на Web-proxy, Web-proxy ничего с этим трафиком не сделает, не умеет.
                        0
                        если непрозрачный прокси и браузер ходит через него то https трафик (по крайней мере запрос к домену) будет доступен прокси серверу (например со сквидом это так. видно куда пользователь ходил), а 443 дропаем чтобы в обход прокси сервера не ходили. 80 порт завернут на прозрачный прокси. Вот как то так.
                          0
                          Https трафик ходит, соединения видно. Но Web-proxy не совсем тот инструмент для отслеживания активности пользователей.
            0
            Встречный вопрос по CAPsMAN'у: требуется ли постоянная связь между менеджером и клиентом? В случае разрыва у клиента останутся старые настройки или настроек не станет совсем?
              0
              Очень интересный вопрос. У меня нет возможности проверить. Если в момент загрузки CAP не установит связь с CAPsMAN'ом, то работать точно не будет. При обрыве связи скорее всего тоже, хотя я не уверен. Думаю, для Вас ничего сложного нет в том, чтобы попробовать самостоятельно изучить данный вопрос, поэкспериментировать.
                0
                Намек принят. Отпишусь ниже как проверю.
                  0
                  Проверил и еще раз перечитал документацию:
                  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
              на своей памяти помню 3 версии RouterOS(например примерно 6,11), которые намертво убивали половину микротиков на предприятии(у меня их больше 100, не спрашивайте где и зачем). Так что я зарёкся обновлять их раз в год, чего и вам советую.
                0
                У меня был инцидент лишь 1 раз как раз в районе 6.11 — IPSec отказывался работать между 6.11 и любой версией ниже. Обновил все устройства, взлетело без проблем.

                  0
                  При обновлении биоса? При обновлении прошивки не помнится чтобы кто-то умирал. Парк более 1к устройство фирмы Микротик.
                    0
                    Можете тоже рассказать о своей топологии микротиков? 1К это более чем значительно.
                      0
                      Провайдер. Внутри дома от 3 до 7 маленьких роутеров. По подъезду китайские свитчи. Между домами радиоканалы в MESH сети. Доступ в основном по pppoe реализован. В ядре несколько CloudCoreRouter и один ПК с MikroTik на борту (пока не сменили на еще один CCR1072).
                        0
                        Зачем в домах столько роутеров? Одного бы не хватило? (Спрашиваю как человек далёкий от проблем и потребностей провов).
                          0
                          Один на два подъезда в некоторых случаях один на подъезд. Используются 750 как правило внутри дома а снаружи барабаны и зайцы.
                      0
                      нет. В указанной мною версии микротики при заходе в первое верхнее quick меню просто вешались и переставали пинговаться. NETINSTALL для отката спасал.
                        0
                        quick меню не пользовался, да и вообще в основном через ssh ходил, так что ничего по этому поводу не скажу. Но помню была у них прошивка в которой после прошивки биоса устройство смело можно было выбрасывать. Какие то барабаны были сейчас уже не вспомню какие точно.

                        А в Вашем случае и подобных связанных с прошивкой — NETINSTALL спасет. Для малых сетей в офисах или дома можно пользоваться если готов к таким сюрпризам. Все же это не часто надеюсь.
                          0
                          Вспомнил, было такое. Достучаться можно было из Винбокса по маку.
                        0
                        И всё же попрошу вас рассказать про свои больше 100 микротиков. Я думаю многим тут будет интересно. Уж очень интересна топология. Если конечно под NDA не попадает. =)
                        Про обновления с вами согласен, вообще следую правилу: работает — не трогай.
                          +1
                          работает — не трогай

                          для поддержания рабочего состояния и правильного рабочего состояния обновляться необходимо. Подтверждение этому хотя бы постоянные обнаружения уязвимостей в различных технологиях. У микротика тоже были уязвимости и неверно работающие технологии.
                          0
                          Даже если не убивает, то багов можно с новой версией поймать столько, что расхлебывать будешь аккурат до следующего релиза
                          0
                          Открытая сеть при передаче компроментирует мак адреса. Подменить не тяжело.
                            0
                            Для изолированной гостевой виртуальной ТД не страшно.
                            +1
                            Обновлять микротики в автоматическом режиме — это верный способ нажить себе недосып и недовольство клиентов.
                            Наиболее рациональный способ — это добраться до той версии ROS, где все работает так, как тебе надо, и успокоиться на полгода-год. Через год почитать список багфиксов, и, если есть что-то интересное, обновляться.

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

                            Only users with full accounts can post comments. Log in, please.