Страницы

четверг, 9 января 2014 г.

Mikrotik admin scripts - некоторые простые скрипты

Некоторые сведения о скриптах RouterOS


Скрипты находятся в меню System/Scripts

Для того чтобы скрипт нормально отрабатывал (а я столкнулся с неработоспособностью встроенной программы fetch, т.к. подразумевал, что я что-то делаю не так, начал искать и нашёл правило - установить флаги Policy - READ,WRITE,TEST,POLICY.

NOTE: В расписании запуска скрипта тоже надо их установить - READ, WRITE, TEST, POLICY

Скрипты не понимают русского языка, так что всё на английском.

Итак, "парочка" скриптов.

Wifi ON/OFF


Скрипт отключения wifi точки доступа по расписанию.
wifi-ap - это имя (name) беспроводного интерфейса у меня (я его переименовал).

# Script for disable wifi-ap at night
# Node: mikrotik RB951G-2HnD
# Date: 09.01.2014
/interface disable wifi-ap
:log info "wifi sleep at night"

Соответственно включения:

# Script to enable wifi-ap access at morning
# Node: mikrotik RB951G-2HnD
/interface enable wifi-ap
:log info "wifi enabled to day work"

И задать в расписании их запуск когда надо. Не забыть про флаги.

※※※

Dynamic DNS updates



Как я выяснил в результате изысканий, достаточно выполнить следующую команду и сервер сам определить IP и если всё в порядке то обновит записи DNS.

Обвязку (вывод сообщений в логи) можно самому себе придумать как хочется.


Пример для www.dyndns.org

/tool fetch user=myusername password=mypassword \
url="http://members.dyndns.org/nic/update\?hostname=myfqdnname" \ dst-path="/dyndns.reply"

NOTE: DynDNS похоже стал платным и удаляет привязки как ему хочется, а посему ...

Следующий пример для twodns.de

Немножко по другому написан, чтобы показать возможности использования переменных

:local myusername "myusername"
:local
mypassword "mypassword"
:local fqdnname "myfqdnname"

/tool fetch keep-result=no user="$myusername" password="$mypassword" url="http://update.two-dns.de/nic/update\?hostname=$
fqdnname"

NOTE: Заметьте, что используется символ \ для снятия специального значения у вопросика (вопрос в консоли выводит список команд доступных в меню).

В принципе, всё. Это работает. Можно установить обновление через пару-тройку часов и забыть. А можно сделать обвязку, которая проверяет доступность интерфейсов, текущее значение IP и пр.

Вот например, получение адреса с маской, отбрасывание маски и установка переменной с текущим значение внешнего IPv4-адреса

# mywan - my wan interface name
:local wan "mywan"
:local wanip [ /ip address get [/ip address find interface=$wan ] address ]
:local wanip [:pick $
wanip 0 [:find $wanip "/"]]
:log info "Wan IPv4 address is $wanip"


Вот получение преобразованного DNS-имени в IP от DNS-серверов, пишется в скриптах.

:log info ("DynDNS: Previous resolved FQDN name $myfqdnname" . [:resolve "$myfqdnname"])

или в переменную
:local dnsip [:resolve "$myfqdnname"]

Если писать в консоли ssh, то можно так смотреть для пошаговой отладки:
:put [:resolve "$myfqdnname"]
а потом в скриптах заменять на переменные.
Это всё потому, что отладка скриптов на микротике дело запутанное.


Условие можно написать так:
:if (wanip != dnsip) do={

} else={

}
В условии if,  do= и else= так и пишутся без пробелов. Да и в циклах.

NOTE: Все спец.инструкции скриптового языка начинаются с символа : .

※※※

Sheduler - Расписание


При задании интервала в 1 день в расписании, через Web-интерфейс, интервал надо указывать в формате   1d 00:00:00
либо воспользоваться консолью:

[admin@MikroTik] /system scheduler> set [find name=wifidayup] interval 1d

※※※

Netwatch


При настроенной электронной почте (/tool e-mail), появляется возможность отправки событий от Сетевого наблюдателя - Netwatch (/tool netwatch).

Все сообщения на английском, т.к. у Mikrotik трудности с кодировками.

Наблюдая за состоянием IP-адреса (например IP камеры), netwatch вызывает события при первой доступности камеры, а также при первой недоступности и соотв. при смене состояния.

Надо заполнить поля On Up и On Down простейшим скриптом.

/tool e-mail send to=my@mail.ru subject="IP Camera 1 up" body="Netwatch say IP Camera 1 up and running"

On Down:

/tool e-mail send to=my@mail.ru subject="IP Camera 1 down" body="Netwatch say IP Camera unreachable"

※※※

PPtP и динамическое имя домашнего роутера


Основная проблема с подъёмом туннеля на Микротик - это отсутствие встроенной функции преобразования имён. Всё сделано на чистых IP-адресах.
Если домашний роутер имеет динамический IP-адрес, который часто меняется, то для того чтобы PPtP-клиент мог автоматически подключаться после изменений адреса, можно приделать такой скрипт, который выясняет изменения IP-адреса домашнего роутера и если было изменение - то выполняет обновление поля Connect-to у PPtP-интерфейса на клиенте (другой роутер). Это простой скрипт, без проверок, чтобы было понятно куда двигаться дальше. А сбои могут быть разные, вплоть до получения текста в значениях переменных.
Чтобы улучшить - надо устраивать проверки.



# Script to update a Connect-to IP address of home router in PPtP tunnel
# Host: router, Mikrotik
# Date: 13.01.2015
# author: Dmitriy for site gimmor.blogspot.com

# defint FQDN of home router
:local homehost "my.dynamic.name"

# define PPtP-interface (copy "name" from "Interfaces" section of pptp-client)
:local tunnelinterface "pptp-to-home"

:local ddnsip [:resolve $homehost ]
:log info ("ddns IP: $ddnsip.")
:local connectto [/interface pptp-client get [/interface pptp-client find name=$tunnelinterface ] connect-to]
:log info ("local Connect-to IP: $connectto.")

:if ($connectto != $ddnsip) do={
   :log info ("ddns IP: $ddnsip.")
   :log info ("local Connect-to IP: $connectto.")
   [ /interface pptp-client set [/interface pptp-client find name=$tunnelinterface ] connect-to=$ddnsip ]
   :log info ("Connect-to Done!")
} else={
   :log info "NO tunnel's connect-to IP address update needed! host $homehost bind to address $ddnsip"
}

Желтым выделена команда обновления поля. После обновления поля "Connect-to" из скрипта происходит автоматический разрыв и переподсоединение. Если всё работает, то туннель PPtP автоматически присоединиться к домашнему роутеру.

Если скрипт не работает, надо его протестировать построчно добавляя в систему.

※※※

Мониторинг питания Микротика


При наличии встроенных датчиков питания и температуры (например в Routerboard RB912UAG-2HPnD) можно осуществить просмотр значений напряжения и температуры:

:put [/system health get voltage]
:put [/system health get temperaute]

Значение напряжения, да и температуры возвращается в виде 3 цифр, без десятичной точки.

Если Микротик запитан от батарейного источника питания, то падение напряжения можно отследить и уведомить пользователя-администратора.



※※※

Ресурсы


1. http://wiki.mikrotik.com/wiki/Scripts
2. http://dyn.com/support/developers/api/perform-update/
3. http://aacable.wordpress.com/tag/mikrotik/



※※※








1 комментарий:

Sergey комментирует...

Спасибо!