mikrotik проверка портов по скрипту
Полезные скрипты для MikroTik RouterOS
Перезагрузка роутера, при зигрузке CPU
Копирование и применение последней актуальной понфигурации
То есть забираем по FTP lastconfig.backup и восстанавливаемся с него. FTP пользователь должен быть настроен, желательно с ограничением доступа по IP. Обратите внимание, что к FTP подключаемся по IP-адресу локального физического интерфейса, который доступен только между роутерами.
Этот скрипт ставим в планировщик на несколько минут позже выполнения скрипта резервного копирования.
И последний скрипт — применение настроек на резервном сервере. В нем также используется МАС для идентификации роутера.
Здесь меняем имя роутера, ip-адрес LAN-интерфейса и приоритет VRRP на меньший, чтобы роутер сделать слейвом. Запуск этого скрипта нужно поставить в автозагрузку. Изменения будут происходить на резервном сервере после копирования и применения последней актуальной конфигурации.
Резервное копирование
Проверка статуса роутера и выключение интерфейса
Подключение к динамическим серверам или сервисам, на примере pptp-соединения
Проверка синтаксиса скрипта
Настройка на 2 провайдера:
Блокировка трафика по времени:
Если нужно запретить трафик по времени ночью, скажем с 22:00 до 10:00 утра:
0) Стандартный способ – использовать два правила с временными промежутками 22:00:00-23:59:59 и 00:00:00-10:00:00
1) Использовать через запрет – Где-то в конце есть правило, которое запрещает, а конкретным правилом разрешать.
2) Использовать шедулер –
также создаём правило в файрволе, но не указываем конкретное время –
Универсальный скрипт переключения 2-х каналов интернета Mikrotik
Около 2,5 лет назад писал статью на тему автоматического переключения канала Интернет на резервный. Скрипт, конечно, и по сей день работает «на отлично», но его внешний вид и некоторые нюансы…
Итак, встала задача улучшить скрипт, максимально устранив побочные эффекты. Что ж, приступим.
В нашем распоряжении Mikrotik RB850Gx2, для которого мы будем писать скрипт (его работоспособность также проверена на моделях RB450G и RB951G-2HnD).
Присвойте скрипту имя, например, script-check-inet
Что же будем в нем использовать?
Итак, для начала определим необходимые переменные:
где:
$firstInterface — имя нашего PPPoE-соединения основной линии связи.
$secondInterface — имя нашего Ethernet-соединения резервной линии.
$pingTo1 и $pingTo2 — IP-адреса ресурсов, которые будем «пинать».
$pingCount — количество пингов на каждый IP-адрес
$stableConnectFrom — процентное соотношение для определения «стабильности» Интернет-канала. Например, в нашем случае при потере свыше 30% пакетов пинга (`$pingStatus Создадим запись в шедулере
В поле `Name` введите имя записи, чтобы не запутаться.
Поле `Start Time` я выставил `00:00:00` для запуска ровно в полночь.
Интервал — 30 секунд
В поле `On Event` вписываем имя нашего скрипта — `script-check-inet`
И жмем «ОК».
Вот, собственно, и все!
Ниже под спойлером приведен полный код скрипта.
Так как мы ввели дополнительную переменную `$firstInterfaceName`, то удалось изменить эту конструкцию и добились работоспособности скрипта на всех перечисленных устройствах.
UPD 2
Код скрипта в очередной раз был обновлен. esudnik обратил внимание на проблему большого количества потерянных пакетов при активном подключении к сети. Таким образом, мы ввели дополнительную переменную (`stableConnectFrom`), используемую для определения процентного соотношения «качества» линии.
В примере указано значение переменной равное «70». Это значит, если процент успешно отправленных пакетов будет ниже 70%, скрипт активирует резервный канал.
UPD 3
Как заметил icCE, при использовании скрипта на прошивке 6.36rc10, выходит ошибка:
Прошивке не нравится «* 100«. Решение проблемы было простым — обрамить вычисляемые значения в дополнительные скобки, получив
MikroTik`s scripts спешат на помощь
В статье показан пример практического анализа работы DDNS клиента, интегрированного в прошивку домашнего роутера, и его интерпретация на оборудовании MikroTik. Возможности RouterOS позволяют без труда выполнить всю необходимую работу. Если кому-то придется столкнуться с такого рода задачей, то держите решение, оно позволит сберечь ваше время и нервы.
Модернизируя сетевую инфраструктуру одного из заказчиков, мы столкнулись с настоящим телеком динозавром из семейства «for home use only». На границе периметра был засунут старенький роутер Asus, основное назначение которого было выполнение роли DDNS клиента. Так получилось, что в компании давно были настроены внутренние сетевые ресурсы и с интернет провайдером заключен договор о лизинге белого динамического IP. Со временем в инфраструктуре многое поменялось, но из-за твердого не желания заказчика вмешиваться в существующие, налаженные годами процессы, настройки клиентской стороны не менялись, и Asus работал себе и работал, сообщая внешнему DDNS сервису свой текущий адрес. В этом месте вспоминается разговор у костра с одним коллегой, который поведал мне о увиденном им лично коммутаторе Cisco с uptime в целых 11 лет, хотите верьте, хотите нет. Настал черед выйти Asus-у на пенсию и уступить место оборудованию от MikroTik. В этом месте мы столкнулись с инженерной задачей, готового решения которого в интернете найдено не было. В связи с чем, было проведено небольшое исследование, которое может кому-то поможет сэкономить время.
▍Техническая часть
Протокол DDNS отвечает за автоматизированное преобразование доменного имени в динамические IP адреса. Прошивки роутеров Asus имеют функционал по настройке DDNS клиента, в котором зашиты определенные сервисы.
Настройка DDNS клиента
В первую очередь, это, конечно, сервис от самой компании Asus. Из настроек можно указать только «Имя хоста», которое и будет резолвиться в IP. У оборудования MikroTik дела с этим обстоят по-другому. Встроенный функционал работает только со своим сервером cloud.mikrotik.com и, разумеется, никакого www.asus.com в нем нет. В интернете мы не нашли описание, как выкрутиться из этой истории и все-таки списать динозавра на пенсию. Имеются материалы, касающиеся настройки сервиса No-IP, но нам они не подходят, потому что не работают. Сразу стало понятно, что в такой ситуации решением будет регулярная отправка из скрипта необходимой информации на сервера Asus посредством HTTP клиента fetch. Осталось только разобраться что, куда и как. Запишем трафик, который передает Asus. Для этого отключим работу его DDNS клиента и брандмауэра, настроим DHCP клиент на WAN порту и подключим к подготовленному MikroTik с работающим DHCP сервером.
Отключение брандмауэра для WAN порта
Настройка DHCP клиента для WAN порта
Если все сделано верно, тогда в лизинге увидим нужный нам IP.
Настраивая на MikroTik снифер, мы выбрали наиболее простой вариант /tool sniffer с сохранением дампа в память роутера:
Активируем DDNS клиент на Asus и смотрим трафик, а там все как на ладони.
Работа DDNS клиента
Все данные у нас есть, верстаем скрипт на RouterOS, заголовки Authorization и User-Agent пропускаем для простоты:
Сервер нам выдает ошибку 401 Unauthorized, все понятно, добавляем в скрипт данные для аутентификации, как есть, в сыром виде. И DDNS сервис от Asus заработал, но уже на оборудовании MikroTik:
Не забываем скрипт засунуть в планировщик заданий:
Как видно, мы пропустили User-Agent, но лучше так не делать, мало ли ребята из Asus рассердятся и начнут блокировать наше решение (http-header-field=«User-Agent: ez-update-3.0.11b5»). Осталось разобрать заголовок Authorization. Это связка логина и пароля, закодированные в Base64. После декодирования видно, что в качестве логина используется прошитый MAC адрес WAN интерфейса.
Декодированный заголовок Authorization
MAC адрес WAN порта
А вот откуда берется пароль, нам выяснить не удалось. В системных логах загрузки роутера ничего подобного не упоминалось. Даже не поленились посмотреть под корпусом, ничего похоже и там не нашли. После обновления версии операционной системы он не изменился, поэтому будем считать, что она берет эту информацию откуда-то изнутри железа. Что интересно, сервер DDNS проверяет на валидность только первые 6 знаков (для шестнадцатеричного представления, разумеется) и наличие «:» после 12 знака, остальное можно опустить или изменить, но аутентификацию так не пройти.
▍Заключение
В работе технических специалистов постоянно возникают различного рода нестыковки, иногда в самых неожиданных местах. Тогда в дело вступает светлая голова, ровные руки, везение и качественное оборудование, на котором приятно работать. Немного добавим про безопасность такой вот реализации DDNS клиента. На наш взгляд, все хорошо. Чтобы злоумышленнику попытаться стравить IP адрес, ему придется ввести данные для аутентификации. Если с MAC адресом вроде как все это проще, то пароль точно не подобрать. Да и вообще на дворе 2021 год и пора давно бы отказаться от DDNS, в корпоративной среде уж точно, как-то не серьезно.
Мониторинг Dude Mikrotik. Функции и скрипты по простому
Я видел в интернете много инструкций по dude от Mikrotik, но не смог найти информацию как правильно писать и использовать скрипты и функции. Теперь частично разобравшись, готов с вами поделится. Здесь не будет описания установки и минимальной настройки dude, для этого есть много подробных инструкций. А также, я не буду рассказывать почему использую именно dude, это статья не для этого. Вперед.
Имею в наличии стену мониторинга, не закончена, мониторов будет девять. Доделаем, сделаю отдельную статью.
Я начал собирать необходимые мне карты. В какой-то из инструкций по dude я увидел, что теоретически можно организовать мониторинг жестких дисков на серверах с использованием SNMP. На этом примере мы и будем разбирать скрипт.
Вот это конечный результат.
Я буду писать небольшими кусками, а для тех, кто «блин не жуй, где конечный результат?» внизу полные скрипты для мониторинга.
И так логика такая, мы проверяем наличие диска по OID, если он существует, получаем объем, занятое пространство, вычисляем свободное и, если оно меньше заданного начинаем алармить.
С простого. А самый простой способ для проверки объема вставить нашему серверу напрямую команду проверки диска. Сейчас наш сервер имеет вот такой вид.
Вставить команду можно нажав правой кнопкой мыши по нашему серверу, выбрать из представленного “Appearance”, в открытом окне нас интересует поле “Label”. Вставим в него команду. Для того чтобы все работало правильно, необходимо в начале и в конце команды поставить квадратные скобки [ ].
Используем вот такую команду [oid(«1.3.6.1.2.1.25.2.3.1.5.1»)*oid(«1.3.6.1.2.1.25.2.3.1.4.1»)/1024/1024/1024]. На выходе получаем вот такую картинку
Если по-простому, то oid это имя, присвоенное какому-то железу по его типу. Если по совсем правильному то вот — Как читать MIB и OID.
С этим разобрались. Теперь, полученные цифры, это объем диска в ГБ без округления.
Теперь нам нужно добавить условия. У микротика это работает так: if(условие)=значение, сделать это, иначе сделать вот это. В нашем случае пишем так:
Получаем такую строку если oid = 0, т.е диск отсутствует или пуст вывести 1, иначе получить объем диска. Вместо 1 может быть что угодно, но для примера нужно так. Продолжим. В следующем коде добавлен только round для округления.
Для объединения команд у микротика используется concatenate. Применение очень неожиданное, все-таки ни excel, но получилось работать только с ним. Если у кого-то получиться сделать тоже самое более простым кодом пишите, будет интересно обсудить. PS: только сначала ознакомьтесь с полученным результатом до конца, чтобы не было недопонимания.
Этим кодом мы объединили всю доступную информацию по памяти на диске. Объем/занято/свободно в ГБ. Вроде очевидно, вроде понятно, но как быть с остальными дисками? Добавлять код для каждого диска? Дисков может быть много, да и ни для того мы работаем, чтобы руками это все писать каждый раз. Я использовал функции. Вначале столкнулся с проблемами, при добавлении кода подряд можно добавить не более 10 раз в одной функции, тапками не кидаем, цикл микротику не знаком, к сожалению. Нас спасет конкатенация. Во вкладке functions создадим новую, выглядит она вот так:
В функцию код добавляется без квадратных скобок. Таким образом прибавляя по единице к oid мы проверим все теоретически возможные диски в системе. Тут следует уточнить, что буквы дисков написаны по стандартной очередности, если у вас буква первого диска будет W, то для этого железа все придется делать вручную, ну или отдельную функцию My_Funny_Computer. В примере начало пути, каждый допилит под себя. Ок, проверим. Берем имя созданной функции, заключаем в квадратные скобки, в конец ставим круглые и добавляем вместо кода во вкладку Label. Пример [About_PC()]
Теперь мы можем смотреть и наслаждаться, но задача у нас иная, автоматизировать процесс.
Для этого нам нужна функция, которая будет проверять диски и отдавать инфу зонду проверки. Делаем функцию, назову Monitor_Disc_Serv суть ее такая: если oid не равен 0 проверим диск и если памяти более 50 гб вернем 1, иначе 0.
Ок, мы получили функцию, обработаем ее значение. Вкладка Probes, создаем новый выглядит он так:
В поле Type выбираем Function, объявляя, что будем обрабатывать значение, полученное из функции.
Monitor_Disc_Serv() = 1 во вкладке Available значит что если функция Monitor_Disc_Serv возвращает 1, все хорошо.
Error срабатывает если Available выдает ошибку, т.е. всегда когда ее значение не равно 1.
Для правильной работы зонда пишем все прозрачно и очевидно: if(Monitor_Disc_Serv()=1,»»,«Что-то случилось») если функция возвращает 1 то ничего делать не нужно, иначе вывести строчку в аларм. Теперь дальше, чтобы это все работало нам необходимо добавить настроенный зонд нашему серверу. Для этого откроем настройки, вкладку Services и добавим зонд:
У меня он уже сработал, вот так выглядит аларм настроенный у меня, вы же можете поставить не 50гб а столько, сколько нужно.
В итоге у нас получилось две функции. Первая для просмотра места на диске в реальном времени и вторая для передачи информации зонду. А также один зонд.
if(oid(«1.3.6.1.2.1.25.2.3.1.5.1»)<>0,if(round(((((oid(«1.3.6.1.2.1.25.2.3.1.5.1»)-oid(«1.3.6.1.2.1.25.2.3.1.6.1»))*oid(«1.3.6.1.2.1.25.2.3.1.4.1»))/1024)/1024)/1024)>50,1,0),1)*
if(oid(«1.3.6.1.2.1.25.2.3.1.5.2»)<>0,if(round(((((oid(«1.3.6.1.2.1.25.2.3.1.5.2»)-oid(«1.3.6.1.2.1.25.2.3.1.6.2»))*oid(«1.3.6.1.2.1.25.2.3.1.4.2»))/1024)/1024)/1024)>50,1,0),1)*
if(oid(«1.3.6.1.2.1.25.2.3.1.5.3»)<>0,if(round(((((oid(«1.3.6.1.2.1.25.2.3.1.5.3»)-oid(«1.3.6.1.2.1.25.2.3.1.6.3»))*oid(«1.3.6.1.2.1.25.2.3.1.4.3»))/1024)/1024)/1024)>50,1,0),1)*
if(oid(«1.3.6.1.2.1.25.2.3.1.5.4»)<>0,if(round(((((oid(«1.3.6.1.2.1.25.2.3.1.5.4»)-oid(«1.3.6.1.2.1.25.2.3.1.6.4»))*oid(«1.3.6.1.2.1.25.2.3.1.4.4»))/1024)/1024)/1024)>50,1,0),1)*
if(oid(«1.3.6.1.2.1.25.2.3.1.5.5»)<>0,if(round(((((oid(«1.3.6.1.2.1.25.2.3.1.5.5»)-oid(«1.3.6.1.2.1.25.2.3.1.6.5»))*oid(«1.3.6.1.2.1.25.2.3.1.4.5»))/1024)/1024)/1024)>50,1,0),1)*
if(oid(«1.3.6.1.2.1.25.2.3.1.5.6»)<>0,if(round(((((oid(«1.3.6.1.2.1.25.2.3.1.5.6»)-oid(«1.3.6.1.2.1.25.2.3.1.6.6»))*oid(«1.3.6.1.2.1.25.2.3.1.4.6»))/1024)/1024)/1024)>50,1,0),1)*
if(oid(«1.3.6.1.2.1.25.2.3.1.5.7»)<>0,if(round(((((oid(«1.3.6.1.2.1.25.2.3.1.5.7»)-oid(«1.3.6.1.2.1.25.2.3.1.6.7»))*oid(«1.3.6.1.2.1.25.2.3.1.4.7»))/1024)/1024)/1024)>50,1,0),1)*
if(oid(«1.3.6.1.2.1.25.2.3.1.5.8»)<>0,if(round(((((oid(«1.3.6.1.2.1.25.2.3.1.5.8»)-oid(«1.3.6.1.2.1.25.2.3.1.6.8»))*oid(«1.3.6.1.2.1.25.2.3.1.4.8»))/1024)/1024)/1024)>50,1,0),1)*
if(oid(«1.3.6.1.2.1.25.2.3.1.5.9»)<>0,if(round(((((oid(«1.3.6.1.2.1.25.2.3.1.5.9»)-oid(«1.3.6.1.2.1.25.2.3.1.6.9»))*oid(«1.3.6.1.2.1.25.2.3.1.4.9»))/1024)/1024)/1024)>50,1,0),1)*
if(oid(«1.3.6.1.2.1.25.2.3.1.5.10»)<>0,if(round(((((oid(«1.3.6.1.2.1.25.2.3.1.5.10»)-oid(«1.3.6.1.2.1.25.2.3.1.6.10»))*oid(«1.3.6.1.2.1.25.2.3.1.4.10»))/1024)/1024)/1024)>50,1,0),1)*
if(oid(«1.3.6.1.2.1.25.2.3.1.5.11»)<>0,if(round(((((oid(«1.3.6.1.2.1.25.2.3.1.5.11»)-oid(«1.3.6.1.2.1.25.2.3.1.6.11»))*oid(«1.3.6.1.2.1.25.2.3.1.4.11»))/1024)/1024)/1024)>50,1,0),1)*
if(oid(«1.3.6.1.2.1.25.2.3.1.5.12»)<>0,if(round(((((oid(«1.3.6.1.2.1.25.2.3.1.5.12»)-oid(«1.3.6.1.2.1.25.2.3.1.6.12»))*oid(«1.3.6.1.2.1.25.2.3.1.4.12»))/1024)/1024)/1024)>50,1,0),1)*
if(oid(«1.3.6.1.2.1.25.2.3.1.5.13»)<>0,if(round(((((oid(«1.3.6.1.2.1.25.2.3.1.5.13»)-oid(«1.3.6.1.2.1.25.2.3.1.6.13»))*oid(«1.3.6.1.2.1.25.2.3.1.4.13»))/1024)/1024)/1024)>50,1,0),1)*
if(oid(«1.3.6.1.2.1.25.2.3.1.5.14»)<>0,if(round(((((oid(«1.3.6.1.2.1.25.2.3.1.5.14»)-oid(«1.3.6.1.2.1.25.2.3.1.6.14»))*oid(«1.3.6.1.2.1.25.2.3.1.4.14»))/1024)/1024)/1024)>50,1,0),1)*
if(oid(«1.3.6.1.2.1.25.2.3.1.5.15»)<>0,if(round(((((oid(«1.3.6.1.2.1.25.2.3.1.5.15»)-oid(«1.3.6.1.2.1.25.2.3.1.6.15»))*oid(«1.3.6.1.2.1.25.2.3.1.4.15»))/1024)/1024)/1024)>50,1,0),1)*
if(oid(«1.3.6.1.2.1.25.2.3.1.5.16»)<>0,if(round(((((oid(«1.3.6.1.2.1.25.2.3.1.5.16»)-oid(«1.3.6.1.2.1.25.2.3.1.6.16»))*oid(«1.3.6.1.2.1.25.2.3.1.4.16»))/1024)/1024)/1024)>50,1,0),1)*
if(oid(«1.3.6.1.2.1.25.2.3.1.5.17»)<>0,if(round(((((oid(«1.3.6.1.2.1.25.2.3.1.5.17»)-oid(«1.3.6.1.2.1.25.2.3.1.6.17»))*oid(«1.3.6.1.2.1.25.2.3.1.4.17»))/1024)/1024)/1024)>50,1,0),1)*
if(oid(«1.3.6.1.2.1.25.2.3.1.5.18»)<>0,if(round(((((oid(«1.3.6.1.2.1.25.2.3.1.5.18»)-oid(«1.3.6.1.2.1.25.2.3.1.6.18»))*oid(«1.3.6.1.2.1.25.2.3.1.4.18»))/1024)/1024)/1024)>50,1,0),1)*
if(oid(«1.3.6.1.2.1.25.2.3.1.5.19»)<>0,if(round(((((oid(«1.3.6.1.2.1.25.2.3.1.5.19»)-oid(«1.3.6.1.2.1.25.2.3.1.6.19»))*oid(«1.3.6.1.2.1.25.2.3.1.4.19»))/1024)/1024)/1024)>50,1,0),1)*
if(oid(«1.3.6.1.2.1.25.2.3.1.5.20»)<>0,if(round(((((oid(«1.3.6.1.2.1.25.2.3.1.5.20»)-oid(«1.3.6.1.2.1.25.2.3.1.6.20»))*oid(«1.3.6.1.2.1.25.2.3.1.4.20»))/1024)/1024)/1024)>50,1,0),1)*
if(oid(«1.3.6.1.2.1.25.2.3.1.5.21»)<>0,if(round(((((oid(«1.3.6.1.2.1.25.2.3.1.5.21»)-oid(«1.3.6.1.2.1.25.2.3.1.6.21»))*oid(«1.3.6.1.2.1.25.2.3.1.4.21»))/1024)/1024)/1024)>50,1,0),1)*
if(oid(«1.3.6.1.2.1.25.2.3.1.5.22»)<>0,if(round(((((oid(«1.3.6.1.2.1.25.2.3.1.5.22»)-oid(«1.3.6.1.2.1.25.2.3.1.6.22»))*oid(«1.3.6.1.2.1.25.2.3.1.4.22»))/1024)/1024)/1024)>50,1,0),1)*
if(oid(«1.3.6.1.2.1.25.2.3.1.5.23»)<>0,if(round(((((oid(«1.3.6.1.2.1.25.2.3.1.5.23»)-oid(«1.3.6.1.2.1.25.2.3.1.6.23»))*oid(«1.3.6.1.2.1.25.2.3.1.4.23»))/1024)/1024)/1024)>50,1,0),1)*
if(oid(«1.3.6.1.2.1.25.2.3.1.5.24»)<>0,if(round(((((oid(«1.3.6.1.2.1.25.2.3.1.5.24»)-oid(«1.3.6.1.2.1.25.2.3.1.6.24»))*oid(«1.3.6.1.2.1.25.2.3.1.4.24»))/1024)/1024)/1024)>50,1,0),1)
if(oid(«1.3.6.1.2.1.25.2.3.1.5.31″)=0,»»,
concatenate(«Disc: «,round(((((oid(«1.3.6.1.2.1.25.2.3.1.5.31»)-oid(«1.3.6.1.2.1.25.2.3.1.6.31»))*oid(«1.3.6.1.2.1.25.2.3.1.4.31″))/1024)/1024)/1024),»Gb»
,» / «,(round(oid(«1.3.6.1.2.1.25.2.3.1.5.31»)*oid(«1.3.6.1.2.1.25.2.3.1.4.31»)/1024/1024/1024),»Gb
«)))
if(oid(«1.3.6.1.2.1.25.2.3.1.5.33″)=0,»»,
concatenate(«Disc: «,round(((((oid(«1.3.6.1.2.1.25.2.3.1.5.33»)-oid(«1.3.6.1.2.1.25.2.3.1.6.33»))*oid(«1.3.6.1.2.1.25.2.3.1.4.33″))/1024)/1024)/1024),»Gb»
,» / «,(round(oid(«1.3.6.1.2.1.25.2.3.1.5.33»)*oid(«1.3.6.1.2.1.25.2.3.1.4.33»)/1024/1024/1024),»Gb
«)))
Для мониторинга
if(oid(«1.3.6.1.2.1.25.2.3.1.5.33»)<>0,if(round(((((oid(«1.3.6.1.2.1.25.2.3.1.5.33»)-oid(«1.3.6.1.2.1.25.2.3.1.6.33»))*oid(«1.3.6.1.2.1.25.2.3.1.4.33»))/1024)/1024)/1024)>10,1,0),1)
Имеем:
Микротик
внешнюю сеть:88.88.88.88
внутреннею сеть:192.168.0.1\24
имеем порт 9999 на котором работает некий сервис. который проброшен на 192.168.1.10
Проблема: Иногда внутренний комп 192.168.1.10 падает. т.е. потрт 9999 не отвечает.
Необходимо:
1. Проверять с некой переодичностью открыт ли порт 9999 на 192.168.1.10
2. Если порт не открыт запускать скрипт на изменение правил и перенаправлении данного порта на другой хост (сами правила есть выяснили в другой ветке).
baggio ➤ Имеем:
Микротик
внешнюю сеть:88.88.88.88
внутреннею сеть:192.168.0.1\24
имеем порт 9999 на котором работает некий сервис. который проброшен на 192.168.1.10
Проблема: Иногда внутренний комп 192.168.1.10 падает. т.е. потрт 9999 не отвечает.
Необходимо:
1. Проверять с некой переодичностью открыт ли порт 9999 на 192.168.1.10
2. Если порт не открыт запускать скрипт на изменение правил и перенаправлении данного порта на другой хост (сами правила есть выяснили в другой ветке).
Проще тогда netwatch
/ip firewall nat
add action=netmap chain=dstnat dst-address=xx.xx.xx.xx dst-port=9999 protocol=tcp to-addresses=yy.yy.yy.yy to-ports=9999 comment=switch2reserve
add action=netmap chain=srcnat dst-address=yy.yy.yy.yy dst-port=9999 protocol=tcp to-addresses=xx.xx.xx.xx to-ports=9999 comment=switch2reserve
«UP»
/ip firewall nat set [find comment=»switch2reserve»] disabled=yes
:delay 2
/ip firewall nat set [find comment=»Main»] disabled=no
«DOWN»
/log warning «server Main may bee is fail…»
:local time [/sys clock get time]
:local checkip [/ping 192.168.0.101 count=5]
:if (checkip = 0) do= <
/log error «server Main is DOWN. …»
/ip firewall nat set [find comment=»switch2reserve»] disabled=no
:delay 2
/ip firewall nat set [find comment=»Main»] disabled=yes