Один из заказчиков обратился с вопросом о дистанционном включении рабочих станций в центральном офисе и нескольких филиалах. Сеть везде построена на Mikrotik’ах, в центральном офисе белый адрес, связь с филиалами через VPN. Сам заказчик — тёртый калач, знает о технологии Wake-on-LAN, вычитал про проброс UDP портов 7-9, порассуждал о целесообразности поднятия Ethernet-over-IP, но в решении задачи не преуспел. В принципе — можно дожать традиционный вариант (просто нужно учесть, что по умолчанию Mikrotik блокирует broadcast пакеты, поступающие в локальную сеть извне) и создать отдельный широковещательный адрес. Но ещё можно оставить всю эту широковещательную историю за скобками и сделать схему на TCP портах.
Открываем WinBox, переходим в раздел «IP», далее выбираем «Firewall». Создаём новое правило:
General
Chain: input
Protocol: 6 (tcp)
Dst. Port: 4050
In. Interface: ether1-isp
Connection State: new
Action
Action: add src to address list
Address List: Wake-on-WAN
Timeout: 00:01:30
На первый взгляд схема повторят принцип Port Knocking — мы стучимся по определенному TCP порту, адрес удаленного хоста попадает в особый список. Но дальше в дело вступает планировщик задач, переходим в раздел «System» и выбираем «Scheduler», создаём новую задачу:
Name: Wake-on-WAN
Start Date: <today>
Start Time: <now>
Interval: 00:01:00
On Event:
:local WAKE [/ip firewall address-list find where list="Wake-on-WAN"]
:if ($WAKE!="") do={
/tool wol mac=AA:BB:CC:DD:EE:FF interface=Master.Bridge
/ip firewall address-list remove [find where list="Wake-on-WAN"]
}
Какая тут логика — раз в минуту планировщик задач запускает скрипт. Скрипт проверяет — есть ли какие-нибудь адреса в списке Wake-on-WAN. Если есть, то отправляет Magic Packet на указанный в теле скрипта MAC-адрес (можно указать несколько адресов, если нужно включать несколько компьютеров сразу) и очищает содержимое списка Wake-on-LAN. Разумеется, выставлять наружу порт в чистом виде — моветон, следует прикрыть его хотя бы через тот же Port Knocking.
