Wake-on-LAN через MikroTik
Wake-on-LAN через MikroTik — удалённое включение компьютеров
Wake-on-LAN (WoL) — технология удалённого включения компьютера через сеть. MikroTik RouterOS имеет встроенную команду /tool/wol, которая отправляет «магический пакет» (Magic Packet) на MAC-адрес целевого устройства. Это позволяет включать рабочие станции и серверы удалённо: через VPN из дома, по расписанию через Scheduler или по команде из Telegram-бота. Технология простая, но требует правильной настройки как на стороне роутера, так и на стороне компьютера (BIOS, сетевая карта, операционная система).
Все команды приведены для RouterOS 7.20+.
Описание
Как работает Wake-on-LAN
WoL основан на отправке специального Ethernet-фрейма — Magic Packet. Этот пакет содержит:
- 6 байт
0xFF(синхронизирующая последовательность). - 16 повторений MAC-адреса целевого устройства (всего 96 байт MAC).
Общий размер Magic Packet — 102 байта (6 + 96).
Сетевая карта компьютера, даже когда основная система выключена, находится в режиме ожидания и анализирует входящие фреймы. Обнаружив Magic Packet со своим MAC-адресом, карта подаёт сигнал на материнскую плату, и компьютер включается.
Требования:
- Материнская плата с поддержкой WoL (практически все современные).
- Включённая функция WoL в BIOS/UEFI.
- Проводное подключение Ethernet (Wi-Fi WoL поддерживается не везде).
- Сетевая карта, подключённая к питанию в выключенном состоянии (ATX-стандарт).
- Компьютер должен быть «выключен» (shutdown), а не полностью обесточен.
Ограничения WoL
- Magic Packet — broadcast на L2-уровне. Он не маршрутизируется между подсетями без специальных настроек.
- Wi-Fi: большинство Wi-Fi адаптеров не поддерживают WoL в выключенном состоянии (карта теряет ассоциацию с AP при выключении).
- Через интернет: требуется port forwarding или VPN, так как Magic Packet не проходит через NAT.
Настройка
Шаг 1: Отправка WoL с MikroTik
Базовая команда — одна строка:
[admin@MikroTik] ># Включить компьютер по MAC-адресу /tool/wol interface=bridge mac=AA:BB:CC:DD:EE:FF # Указать конкретный интерфейс (если нет bridge) /tool/wol interface=ether2 mac=AA:BB:CC:DD:EE:FF
Параметры:
- interface — интерфейс, через который отправляется Magic Packet (обычно bridge или конкретный Ethernet-порт).
- mac — MAC-адрес сетевой карты целевого компьютера.
Шаг 2: Узнать MAC-адрес компьютера
Если компьютер сейчас включён, его MAC-адрес можно узнать из DHCP-лизов или ARP-таблицы:
[admin@MikroTik] ># Из DHCP-лизов /ip/dhcp-server/lease/print where host-name~"DESKTOP" # ADDRESS MAC-ADDRESS HOST-NAME STATUS # 192.168.88.100 AA:BB:CC:DD:EE:FF DESKTOP-WORK bound # Из ARP-таблицы /ip/arp/print where address=192.168.88.100 # ADDRESS MAC-ADDRESS INTERFACE # 192.168.88.100 AA:BB:CC:DD:EE:FF bridge # Из таблицы bridge hosts /interface/bridge/host/print where mac-address=AA:BB:CC:DD:EE:FF
Рекомендуется записать MAC-адрес и сохранить его в комментарии DHCP-лиза:
[admin@MikroTik] >/ip/dhcp-server/lease/set [find host-name~"DESKTOP"] \ comment="Work PC - WoL target"
Сценарий 1: Включение рабочего ПК из дома через VPN
Вы подключаетесь к офисной сети через WireGuard VPN и хотите включить рабочий компьютер.
Предварительные условия:
- WireGuard VPN настроен и работает (из дома вы попадаете в офисную подсеть).
- MAC-адрес рабочего ПК известен.
[admin@MikroTik] ># На офисном роутере: включить ПК после подключения по VPN # Выполняется из терминала WinBox/SSH через VPN-соединение /tool/wol interface=bridge mac=AA:BB:CC:DD:EE:FF
Автоматизация — скрипт для удобного вызова:
[admin@MikroTik] >/system/script add name=wake-work-pc dont-require-permissions=no source={ /tool/wol interface=bridge mac=AA:BB:CC:DD:EE:FF :log info "WoL sent to Work PC (AA:BB:CC:DD:EE:FF)" } # Запуск из CLI /system/script/run wake-work-pc
Сценарий 2: Включение сервера по расписанию
Сервер резервного копирования нужен только ночью. Включаем его в 23:00, а через скрипт на самом сервере он выключается после завершения бэкапа.
[admin@MikroTik] ># Включить сервер каждый день в 23:00 /system/scheduler add name=wake-backup-server start-time=23:00:00 interval=1d \ on-event={ /tool/wol interface=bridge mac=11:22:33:44:55:66 :log info "WoL sent to backup server" }
Для нескольких серверов:
[admin@MikroTik] >/system/scheduler add name=wake-all-servers start-time=23:00:00 interval=1d \ on-event={ /tool/wol interface=bridge mac=11:22:33:44:55:66 :delay 2s /tool/wol interface=bridge mac=11:22:33:44:55:77 :delay 2s /tool/wol interface=bridge mac=11:22:33:44:55:88 :log info "WoL sent to all backup servers" }
Сценарий 3: Включение через Telegram-бот
Отправьте команду боту в Telegram — роутер включит ПК. Требуется настроенный Telegram-бот и скрипт опроса.
Скрипт проверки команд Telegram:
[admin@MikroTik] >/system/script add name=telegram-wol-bot dont-require-permissions=no source={ :global telegramBotToken "123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11" :global telegramChatId "-1001234567890" :global lastUpdateId :if ([:typeof $lastUpdateId] = "nothing") do={ :global lastUpdateId 0 } # Получить обновления от Telegram :do { :local url ("https://api.telegram.org/bot".$telegramBotToken.\ "/getUpdates\?offset=".$lastUpdateId."&limit=1") :local response [/tool/fetch url=$url mode=https as-value output=user] :local data ($response->"data") # Простая проверка наличия команды /wol :if ([:find $data "/wol"] > 0) do={ /tool/wol interface=bridge mac=AA:BB:CC:DD:EE:FF :log info "Telegram: WoL command received, Magic Packet sent" # Отправить подтверждение /tool/fetch url=("https://api.telegram.org/bot".$telegramBotToken.\ "/sendMessage\?chat_id=".$telegramChatId.\ "&text=Magic Packet sent to Work PC") \ mode=https keep-result=no } } on-error={ :log warning "Telegram WoL bot: fetch error" } } # Проверка каждые 30 секунд /system/scheduler add name=telegram-wol-check interval=30s \ on-event="/system/script/run telegram-wol-bot"
WoL через интернет (без VPN)
Отправить WoL через интернет напрямую — нетривиальная задача, поскольку Magic Packet — это L2 broadcast, который не маршрутизируется.
Вариант 1: через направленный broadcast (directed broadcast)
Роутер принимает UDP-пакет на определённый порт и конвертирует его в L2 broadcast:
[admin@MikroTik] ># На роутере: перенаправить UDP-порт 9 (WoL) на broadcast-адрес /ip/firewall/nat add chain=dstnat protocol=udp dst-port=9 \ in-interface=ether1-WAN \ action=dst-nat to-addresses=192.168.88.255 to-ports=9 \ comment="WoL from internet"
Внимание: это небезопасно! Любой, кто знает ваш внешний IP, может отправлять пакеты в вашу локальную сеть. Рекомендуется использовать VPN.
Вариант 2: через REST API роутера (RouterOS 7)
Настройте REST API на роутере и вызывайте /tool/wol через HTTP-запрос (требуется Let's Encrypt сертификат и аутентификация):
[admin@MikroTik] ># Включить REST API (www-ssl) /ip/service set www-ssl disabled=no port=443 # Теперь можно отправлять WoL через REST API: # curl -k -u admin:password \ # -X POST https://your-router-ip/rest/tool/wol \ # -d '{"interface":"bridge","mac":"AA:BB:CC:DD:EE:FF"}'
Рекомендация: самый безопасный способ удалённого WoL — через VPN. Подключились к VPN → отправили WoL → компьютер включился.
Настройка компьютера
BIOS/UEFI
- Войдите в BIOS/UEFI (обычно клавиша F2, Del, F12 при включении).
- Найдите раздел Power Management или Advanced → Wake On LAN.
- Включите Wake on LAN (может называться: Wake on PME, Wake on PCI, Resume on LAN, Power On By PCI-E).
- Для WoL из состояния S5 (полностью выключен) может потребоваться включить Deep Sleep → Disabled или ErP Ready → Disabled.
Windows 10/11
- Откройте Device Manager → Network Adapters → выберите сетевую карту.
- Вкладка Advanced: убедитесь, что Wake on Magic Packet = Enabled.
- Вкладка Power Management: включите Allow this device to wake the computer и Only allow a magic packet to wake the computer.
- В Settings → System → Power & sleep → Additional power settings → Choose what the power buttons do: отключите Fast Startup (быстрый запуск), так как он может мешать WoL.
Проверка через PowerShell:
codepowershell -Command "Get-NetAdapterPowerManagement | Format-List"
Linux (Ubuntu/Debian)
Установите ethtool и проверьте поддержку:
codesudo ethtool eth0 | grep -i wake # Supports Wake-on: pumbg # Wake-on: g <-- "g" = Magic Packet enabled
Если WoL выключен:
codesudo ethtool -s eth0 wol g
Для постоянной настройки создайте systemd-сервис или добавьте в /etc/network/interfaces:
codeauto eth0 iface eth0 inet dhcp ethernet-wol g
Проверка
[admin@MikroTik] ># Отправить WoL и проверить результат /tool/wol interface=bridge mac=AA:BB:CC:DD:EE:FF # Проверить, что компьютер появился в сети (через некоторое время) /ping 192.168.88.100 count=5 # Проверить ARP-таблицу /ip/arp/print where address=192.168.88.100 # Проверить DHCP-лизы /ip/dhcp-server/lease/print where mac-address=AA:BB:CC:DD:EE:FF # STATUS: bound <-- компьютер включился и получил IP
Обычно компьютеру требуется 15–60 секунд от получения Magic Packet до полной загрузки ОС и получения IP-адреса по DHCP.
Типичные ошибки
1. Компьютер не включается по WoL
Контрольный список:
[admin@MikroTik] ># 1. Проверьте, что MAC-адрес правильный /ip/dhcp-server/lease/print where host-name~"DESKTOP" # 2. Проверьте, что interface правильный (bridge, а не ether) /tool/wol interface=bridge mac=AA:BB:CC:DD:EE:FF # 3. Проверьте, что компьютер подключён кабелем /interface/ethernet/print where name=ether2 # Светодиод link на порту должен гореть даже при выключенном ПК
Если светодиод link не горит при выключенном ПК — проблема в BIOS (WoL не активирован) или в блоке питания (не подаёт standby-питание на сетевую карту).
2. WoL работает только из локальной сети
Проблема: Magic Packet — L2 broadcast, он не проходит через маршрутизатор в другую подсеть.
Решение: отправляйте WoL с роутера, который находится в одной подсети с целевым компьютером. Если вы подключены удалённо — зайдите на роутер через VPN/SSH и выполните /tool/wol оттуда.
3. WoL не работает после полного отключения питания
Проблема: компьютер был обесточен (выдернут из розетки или отключён сетевой фильтр). После подачи питания сетевая карта находится в неинициализированном состоянии и не слушает Magic Packet.
Решение: после восстановления питания компьютер нужно включить вручную хотя бы один раз. После штатного выключения (shutdown) WoL будет работать.
4. Fast Startup мешает WoL (Windows)
Проблема: Windows 10/11 с включённым Fast Startup (быстрый запуск) при «выключении» на самом деле уходит в гибернацию. Некоторые сетевые карты в этом режиме не принимают WoL.
Решение: отключите Fast Startup в настройках Windows Power Options.
5. Неправильный interface в команде WoL
Проблема: указан физический интерфейс (ether2), а компьютер подключён к bridge. Или наоборот.
Решение:
[admin@MikroTik] ># Если порты объединены в bridge — используйте bridge /tool/wol interface=bridge mac=AA:BB:CC:DD:EE:FF # Если прямое подключение без bridge — используйте физический порт /tool/wol interface=ether2 mac=AA:BB:CC:DD:EE:FF
6. Wi-Fi устройства не поддерживают WoL
Проблема: Magic Packet отправлен, но ноутбук, подключённый по Wi-Fi, не включается.
Объяснение: при выключении ноутбука Wi-Fi модуль теряет ассоциацию с точкой доступа. Без активного Wi-Fi соединения пакет не может быть доставлен. WoL по Wi-Fi работает только в режиме сна (sleep/hibernate) и только если драйвер сетевой карты поддерживает WoWLAN (Wake on Wireless LAN).
Решение: для надёжного WoL используйте проводное Ethernet-подключение.
Wake-on-LAN — простая, но чрезвычайно полезная функция. Один раз правильно настроив BIOS и сетевую карту, вы получаете возможность удалённо включать компьютеры из любой точки мира (через VPN). В сочетании с MikroTik Scheduler и скриптами WoL позволяет автоматизировать включение серверов по расписанию, экономя электроэнергию и продлевая жизнь оборудования.
# Включить компьютер по MAC-адресу
/tool/wol interface=bridge mac=AA:BB:CC:DD:EE:FF
# Указать конкретный интерфейс (если нет bridge)
/tool/wol interface=ether2 mac=AA:BB:CC:DD:EE:FF
# Из DHCP-лизов
/ip/dhcp-server/lease/print where host-name~"DESKTOP"
# ADDRESS MAC-ADDRESS HOST-NAME STATUS
# 192.168.88.100 AA:BB:CC:DD:EE:FF DESKTOP-WORK bound
# Из ARP-таблицы
/ip/arp/print where address=192.168.88.100
# ADDRESS MAC-ADDRESS INTERFACE
# 192.168.88.100 AA:BB:CC:DD:EE:FF bridge
# Из таблицы bridge hosts
/interface/bridge/host/print where mac-address=AA:BB:CC:DD:EE:FF
/ip/dhcp-server/lease/set [find host-name~"DESKTOP"] \
comment="Work PC - WoL target"
# На офисном роутере: включить ПК после подключения по VPN
# Выполняется из терминала WinBox/SSH через VPN-соединение
/tool/wol interface=bridge mac=AA:BB:CC:DD:EE:FF
/system/script
add name=wake-work-pc dont-require-permissions=no source={
/tool/wol interface=bridge mac=AA:BB:CC:DD:EE:FF
:log info "WoL sent to Work PC (AA:BB:CC:DD:EE:FF)"
}
# Запуск из CLI
/system/script/run wake-work-pc
# Включить сервер каждый день в 23:00
/system/scheduler
add name=wake-backup-server start-time=23:00:00 interval=1d \
on-event={
/tool/wol interface=bridge mac=11:22:33:44:55:66
:log info "WoL sent to backup server"
}
/system/scheduler
add name=wake-all-servers start-time=23:00:00 interval=1d \
on-event={
/tool/wol interface=bridge mac=11:22:33:44:55:66
:delay 2s
/tool/wol interface=bridge mac=11:22:33:44:55:77
:delay 2s
/tool/wol interface=bridge mac=11:22:33:44:55:88
:log info "WoL sent to all backup servers"
}
/system/script
add name=telegram-wol-bot dont-require-permissions=no source={
:global telegramBotToken "123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11"
:global telegramChatId "-1001234567890"
:global lastUpdateId
:if ([:typeof $lastUpdateId] = "nothing") do={ :global lastUpdateId 0 }
# Получить обновления от Telegram
:do {
:local url ("https://api.telegram.org/bot".$telegramBotToken.\
"/getUpdates\?offset=".$lastUpdateId."&limit=1")
:local response [/tool/fetch url=$url mode=https as-value output=user]
:local data ($response->"data")
# Простая проверка наличия команды /wol
:if ([:find $data "/wol"] > 0) do={
/tool/wol interface=bridge mac=AA:BB:CC:DD:EE:FF
:log info "Telegram: WoL command received, Magic Packet sent"
# Отправить подтверждение
/tool/fetch url=("https://api.telegram.org/bot".$telegramBotToken.\
"/sendMessage\?chat_id=".$telegramChatId.\
"&text=Magic Packet sent to Work PC") \
mode=https keep-result=no
}
} on-error={
:log warning "Telegram WoL bot: fetch error"
}
}
# Проверка каждые 30 секунд
/system/scheduler
add name=telegram-wol-check interval=30s \
on-event="/system/script/run telegram-wol-bot"
# На роутере: перенаправить UDP-порт 9 (WoL) на broadcast-адрес
/ip/firewall/nat
add chain=dstnat protocol=udp dst-port=9 \
in-interface=ether1-WAN \
action=dst-nat to-addresses=192.168.88.255 to-ports=9 \
comment="WoL from internet"
# Включить REST API (www-ssl)
/ip/service
set www-ssl disabled=no port=443
# Теперь можно отправлять WoL через REST API:
# curl -k -u admin:password \
# -X POST https://your-router-ip/rest/tool/wol \
# -d '{"interface":"bridge","mac":"AA:BB:CC:DD:EE:FF"}'
powershell -Command "Get-NetAdapterPowerManagement | Format-List"
sudo ethtool eth0 | grep -i wake
# Supports Wake-on: pumbg
# Wake-on: g <-- "g" = Magic Packet enabled
sudo ethtool -s eth0 wol g
auto eth0
iface eth0 inet dhcp
ethernet-wol g
# Отправить WoL и проверить результат
/tool/wol interface=bridge mac=AA:BB:CC:DD:EE:FF
# Проверить, что компьютер появился в сети (через некоторое время)
/ping 192.168.88.100 count=5
# Проверить ARP-таблицу
/ip/arp/print where address=192.168.88.100
# Проверить DHCP-лизы
/ip/dhcp-server/lease/print where mac-address=AA:BB:CC:DD:EE:FF
# STATUS: bound <-- компьютер включился и получил IP
# 1. Проверьте, что MAC-адрес правильный
/ip/dhcp-server/lease/print where host-name~"DESKTOP"
# 2. Проверьте, что interface правильный (bridge, а не ether)
/tool/wol interface=bridge mac=AA:BB:CC:DD:EE:FF
# 3. Проверьте, что компьютер подключён кабелем
/interface/ethernet/print where name=ether2
# Светодиод link на порту должен гореть даже при выключенном ПК
# Если порты объединены в bridge — используйте bridge
/tool/wol interface=bridge mac=AA:BB:CC:DD:EE:FF
# Если прямое подключение без bridge — используйте физический порт
/tool/wol interface=ether2 mac=AA:BB:CC:DD:EE:FF