Найти тему
TechrooM

Поднимаем NAS через WoL после загрузки необходимых файлов через TFTP на Mikrotik часть 3

1. Настройка TFTP для загрузки по сети с Mikrotik
2. Настраиваем Syslinux и GRUB для PXE
3. Поднимаем NAS через WoL после загрузки необходимых файлов через TFTP
Бонус

В двух ранее опубликованных статьях мы получили рабочий TFTP сервер на Mikrotik, а также загрузку по сети через syslinux и GRUB. А что если NAS расположен за пределами досягаемости и не работает 24/7?
Чтобы не включать его каждый раз руками предлагаю привязать включение NAS к пункту меню в GRUB или SYSLINUX.

Для решения данной задачи у нас все есть:
– Mikrotik умеет посылать WOL пакеты в рамках широковещательного сегмента по MAC-адресу;
– Мы можем отследить когда пользователь загружает тот или иной файл и сделать это триггером;

Для того чтобы отследить что пользователь загружает тот или иной файл нам поможет firewall, он позволяет как мы уже знаем создавать правила которые могут искать в передаваемых пакетах определенный численно буквенные последовательности, а далее мы добавляем указанный хост в список.
Выполним команду в терминале

/ip firewall mangle add action=add-src-to-address-list address-list=wol_host address-list-timeout=none-dynamic chain=input content=start_wol_12 dst-port=69 protocol=udp

Параметр content должен содержать то значение что мы будем искать в пакетах TFTP, название запрашиваемого файла, сам файл может быть пустым для быстродействие, главное его название. Остальные параметры описывают свойства характерные для TFTP это порт 69 и протокол UDP.

После нам необходимо создать скрипт который будет автоматически запускаться с заданным интервалом и проверять наличие записи в
address-list wol_host.

Примечание.
Текст скрипта доступен по ссылке, так как Дзен не позволяет нормально разместить большой кусок кода с сохранением форматирования.

Переходим в планировщик Systems->Sheduler, указываем дату начала работы скрипта и время, а так же укажем интервал запуска, 1-ой минуты хватит.
В поле On event вставляем текст скрипта.

Теперь скрипт запускается с указанным интервалом о чем свидетельствует счетчик запусков (Run Count) в Systems->Sheduler.

Теперь разберем логику скрипта:

в начале объявлены три переменные в которых мы указывает NameAddList (имя списка в котором ищем хосты скачавшие файл), InterfaceWhereWakeUpHost (интерфейс в который кидаем пакет), MACNASServer (MAC-адрес хоста который будем поднимать через WOL).

-2

В строке с 5– 7 ищем записи в указанном address-list и далее в строке 9 проверяем количество возвращенных строк, если пусто то завершаем работу.

Далее в строке 13 перебираем возвращенный список, в начале получаем IP адрес хоста скачавшего файл, но IP недостаточно так как команда /tool wol требует MAC адрес. В строке 21 обращаемся в /ip dhcp-server lease и получаем MAC адрес хоста с указанным IP адресом.

Далее вызываем команду /tool wool где указываем ранее указанный интерфейс и полученный MAC адрес.

Обратите внимание тут мы используем конструкцию do { ... } on-error={ ... } она позволяет нам выполнять сомнительные команды, результат работы которых может прервать работу скрипта. В нашем случае если хоста с таким MAC адресом не окажется в списке то мы не будем отправлять WOL так как хост не проходил регистрацию на DHCP. По завершению всех процедур удаляем хост из списка и так же оборачиваем в do on-error.

Примечание
Так как мы получаем MAC-адрес из таблицы lease то успешность посылки WOL зависит от длительности аренды IP-адреса, если аренда истечет в момент отработки скрипта, то WOL может не отправиться или например аренда будет очень короткой.

Даже на самой младшей модели Mikrotik hAP lite RB941-2nD не возникает какой-то сверх загрузки CPU от постоянного запуска скрипта.

Заключение.

Теперь у нас есть готовое решение, позволяющее и NAS удаленно поднять (в случае с hAP lite у которого нет USB разъема актуально как никогда ) и необходимые инструменты для восстановления загрузить.