Настройка wake on lan ubuntu

Обновлено: 05.07.2024

Совсем недавно LeeMiller описал как воспользоваться посылкой «волшебного пакета» для удаленного включения компьютера под управлением Windows, большое ему спасибо.
Очень странно, что ни кто не спросил в комментариях, — А как же быть с Линуксом? Ничего не получается, у него нет, как минимум, Пуск — Панель Управления — Сетевые Подключения!

UPD: перенёс в «Железо», поближе к топику-мотиватору. Смотрится странно, выслушаю пожелания на перенос в другое место.


Всю теорию и настройку BIOS'а я опускаю, её замечательно разобрал LeeMiller.
Нашей задачей будет заставить сетевую карту оставаться в ждущем режиме после выключения компьютера. Если в Windows для этого достаточно поставить одну галку, то в Linux настройки сетевой карты не запоминаются и надо их производить при каждом запуске системы. Для этого понадобится сделать скриптик и поставить его на загрузку ОС.
Опыты ставились над Ubuntu, но я думаю что с «другими линуксами» проблем возникнуть не должно.

Приступим

Наблюдаем результат наподобие
eth0 Link encap:Ethernet HWaddr 01:23:45:67:89:ab
inet addr:192.168.1.2 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::215:f2ff:fe6f:3487/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:71495 errors:0 dropped:0 overruns:0 frame:0
TX packets:76190 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:23164212 (22.0 MiB) TX bytes:7625016 (7.2 MiB)
Interrupt:217 Base address:0xd400

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:1290 errors:0 dropped:0 overruns:0 frame:0
TX packets:1290 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:161182 (157.4 KiB) TX bytes:161182 (157.4 KiB)

В данном примере у нас одна сетевая карта, eth0. Если карт несколько, то их несколько :)

— Теперь создаем сам скрипт, для этого сначала необходимо получить права администратора:

Здесь я хочу обратить внимание на параметры: -s eth0 wol значит «заставить WOL карточки eth0» g — «ждать волшебного пакета». У WOL есть еще пяток вариантов чего ждать, но к данной теме это не относится.


— Создаем символическую ссылку, делаем скрипт исполняемым при загрузке:

На экране должно отобразиться что-то вроде
Adding system startup for /etc/init.d/wakeonlanconfig .
/etc/rc0.d/K20wakeonlanconfig -> ../init.d/wakeonlanconfig
/etc/rc1.d/K20wakeonlanconfig -> ../init.d/wakeonlanconfig
/etc/rc6.d/K20wakeonlanconfig -> ../init.d/wakeonlanconfig
/etc/rc2.d/S20wakeonlanconfig -> ../init.d/wakeonlanconfig
/etc/rc3.d/S20wakeonlanconfig -> ../init.d/wakeonlanconfig
/etc/rc4.d/S20wakeonlanconfig -> ../init.d/wakeonlanconfig
/etc/rc5.d/S20wakeonlanconfig -> ../init.d/wakeonlanconfig

— Проверяем что всё нормально получилось, вводим в терминале

Если никакого вывода не последовало и показалась следующая строка ввода — значит всё прошло гладко.

— Проверяем на практике.
Распечатываем данное руководство, выключаем первый компьютер и идём ко второму :)
Шлём пакет одним из предложенных LeeMiller'ом способов. Если способы не нравятся — рекомендую свой любимый, простенький веб-сервис, которым можно воспользоваться даже при помощи браузера в сотовом телефоне.


Хочу обратиться к тем, кто умнее меня, — если есть (наверняка есть) более красивый способ реализации — сообщайте, будем обновлять знания!

И благодарю LeeMiller'a за то что отсыпал кармы из волшебного пакета, без этого ничего бы не вышло.

Я нашел лучший способ, который работал для меня. По крайней мере, чище. Я пишу об этом, потому что, гугляя Ubuntu 16 wol и другие подобные поиски, я сталкивался с этим постом несколько раз. Это может помочь кому-то еще.

Очевидно, Ubuntu изменил upstart для systemd, это в Ubuntu 15, Ubuntu 16 и, вероятно, в следующих версиях. Я новичок в обеих системах, но это сработало для меня.

Чтобы WOL работал, мне приходилось включать его каждый раз при загрузке системы. Чтобы избежать этого вручную, я использовал systemd для этой цели. Вот что я сделал:

Включите это для интерфейса при загрузке, выполните следующую команду (измените eth3 с вашим интерфейсом):

Вы должны увидеть что-то вроде этого:

Чтобы проверить, включен ли он, выполните следующую команду (измените eth3 с вашим интерфейсом), и он должен вернуть enabled :

Чтобы проверить это, перезагрузитесь и запустите (измените eth3 с вашим интерфейсом):

Вы должны увидеть строку со следующим:

Upstart - это основанная на событиях замена для демона /sbin/init, который обрабатывает запуск задач и служб во время загрузки, останавливает их при завершении работы и контролирует их во время работы системы.
- upstart - основанный на событиях демон init

systemd - это набор основных строительных блоков для системы Linux. Он предоставляет диспетчер системы и услуг, который запускается как PID 1 и запускает остальную часть системы. (. )
- systemd

В Ubuntu 16.04 установлены WOL_DISABLE=N в /etc/default/tlp чтобы избежать отключения WOL с помощью управления питанием TLP.

добавлять NETDOWN=no в /etc/default/halt для предотвращения отключения сетевой карты во время выключения

Включить Wake on LAN в /etc/network/interfaces когда используется статическая конфигурация сети.

Включите wake on lan в BIOS, войдите в настройки BIOS и найдите что-нибудь под названием "Wake up on PCI event", "Wake up on LAN" или подобное. Измените это так, чтобы это было включено. Сохраните настройки и перезагрузите компьютер.

Предупреждение. Некоторые материнские платы / сетевые контроллеры не поддерживают WOL при "холодной" загрузке (состояние S5, когда питание системы физически отключается и снова включается). В этом случае должен быть выполнен как минимум один цикл питания (включение, выключение). Чтобы решить эту проблему, BIOS можно настроить на включение при восстановлении переменного тока и запланировать выключение в Ubuntu после этого. Обратитесь к руководству по материнской плате для получения дополнительной информации.

Для того, чтобы WOL работал, убедитесь, что ваш интерфейс Ethernet правильно отключен вашей системой при отключении питания.

Создайте скрипт bash с именем wol_poweroff.sh в каталоге /etc/rc6.d/:

Поместите этот код в это:

Скопируйте его в каталог /etc/rc0.d (чтобы он также работал с halt):

Сделайте их обоих исполняемыми:

По словам автора, Робби Уильямсона, это работает из-за следующего:

Чтобы заставить WOL работать, интерфейс Ethernet должен быть надлежащим образом отключен как часть выключения системы. Это должно быть выполнено как часть уровней запуска rc0 и rc6, отмечая, что Linux обычно имеет 7 различных уровней запуска (или режимов работы):

rc0.d - система остановлена

rc1.d - однопользовательский режим

rc2.d - однопользовательский режим с поддержкой сети

rc3.d - многопользовательский режим - загрузка в текстовом режиме

rc4.d - еще не определено

rc5.d - многопользовательский режим - загрузка в X Windows

rc6.d - выключение и перезагрузка

Запустите следующее в терминале:

Вы должны увидеть g рядом с пробуждением по локальной сети после написания второй команды

Помимо параметров, предложенных @nkef, вы можете установить следующие параметры в /etc/network/interfaces, если вы используете DHCP вместо статических настроек IP для сетевого адаптера (здесь он называется eth0):

(проверено на Ubuntu 16.04 LTS).

Если вы используете NetworkManager, то вы можете включить WOL через nmcli :

Запомните НАИМЕНОВАНИЕ подключения ТИПА "802-3-ehternet" для УСТРОЙСТВА, представляющего интерес. Скажите, что это имя "Проводное соединение 1". Затем измените его правильно:

Чтобы получить его MAC-адрес:

Теперь вы можете выключить его и включить с другого компьютера в той же локальной сети с помощью wakeonlan 1a:2b:3c:4d:5e:6f команда, где 1a:2b:3c:4d:5e:6f MAC-адрес сетевой карты предыдущего шага

Это меня немного поразило в Ubuntu 18.04 (безголовая / минимальная установка), к сожалению, уже перечисленные здесь ответы, хотя иногда они могут показаться работающими, не дают надежного решения, поскольку они создают условия гонки или сражаются с подобными systemd, Нетплан и Удев.

Я тоже сначала попробовал этот подход, и он, похоже, сработал, я планирую загрузку системы каждый вечер через WakeOnLan для запуска резервного копирования, поскольку системный BIOS не обеспечивает опцию запланированного включения переменного тока.

Он работал бы в течение нескольких дней, а затем отказывался просыпаться, включение его вручную и запуск ethtool показывали, что WoL был отключен:

Поэтому я решил, что нужно было еще кое-что отключить, и у меня было много таких проблем в последние несколько лет, когда systemd захватил части системы, и я решил начать здесь, о чудо:

WakeOnLan =. По умолчанию выключено.

Примеры онлайн показывают что-то вроде:

Как бы то ни было, это все еще не работает. Потом я наткнулся на это:

И что я могу найти в /run/systemd/network/10-netplan-eno1.link?

Решение Либо:

  1. удалить нетплан,
  2. настроить сеть через конфигурацию netplan,
  3. или установите файл systemd.link для более высокого приоритета.

Поскольку у меня уже был файл systemd.link, я просто переименовал его в 00-wired.link, перезагрузился, и теперь отчеты ethtool eno1:

Без каких-либо дополнительных услуг исключительно для того, чтобы попытаться включить WoL.

Как настроить Wake On Lan в Linux-01

Как настроить Wake On Lan в Linux-01

Всем привет сегодня расскажу как настроить Wake On Lan в Linux.

WakeOnLan (WOL) — это технология позволяющая включить компьютер, методом отправки на него специального пакета данных, называемыми Magic Packet. Принцип работы этой технологии таков, что при выключении компьютера он переходит в дежурный режим и переводит сетевую карту в режим пониженного потребления, просматривая все поступающие пакеты из сети. Если сетевой адаптер обнаружит Magic Packet, он выдаст сигнал на включение компьютера. Примечание: для использования данной технологии необходима поддержка данной функции (технологии) сетевым адаптером, почти все современные сетевые адаптеры поддерживают данную технологию.

В данном посте мы рассмотрим настройку данной функции на примере ОС Linux.

1. В первую очередь мы просмотрим список наших сетевых интерфейсов используя утилиту ethtool:
ifconfig

В ответ получим список наших используемых сетевых интерфейсов (в моём случае он 1):

eth0 Link encap:Ethernet HWaddr 6c:62:6d:f0:ce:b4
inet6 addr: fe80::6e62:6dff:fef0:ceb4/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:4528 errors:0 dropped:0 overruns:0 frame:0
TX packets:491 errors:0 dropped:0 overruns:0 carrier:1
collisions:0 txqueuelen:1000
RX bytes:686281 (670.1 KiB) TX bytes:61590 (60.1 KiB)

Нам необходим интерфейс который имеет доступ к внешней сети (в моём случае eth0). Теперь проверим поддерживает ли сетевой адаптер данную технологию и настроим её используя утилиту ethtool. Устанавливаем её:
apt-get install ethtool — для Debian
yum install ethtool — для CentOS

и запустим её, для просмотра информации о сетевом интерфейсе:
ethtool eth0

В ответ мы получим всю информацию о нашем сетевом интерфейсе:

Settings for eth0:
Supported ports: [ TP ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Supported pause frame use: No
Supports auto-negotiation: Yes
Advertised link modes: Not reported
Advertised pause frame use: No
Advertised auto-negotiation: Yes
Speed: 100Mb/s
Duplex: Full
Port: Twisted Pair
PHYAD: 0
Transceiver: internal
Auto-negotiation: on
MDI-X: Unknown
Supports Wake-on: pg
Wake-on: d
Current message level: 0x0000003f (63)
drv probe link timer ifdown ifup
Link detected: yes

Где Supports Wake-on: pg — означает что наш сетевой интерфейс поддерживает технологию Wake On Lan, Wake-on: d — но она отключена.

Wake On Lan можно включить вручную 1 командой, но при каждой перезагрузке нашей машины он будет деактивироватся, для этого мы создадим и будем использовать специальный скрипт.
Для этого выполняем следующее:
cd /etc/init.d/
nano wakeonlanconfig

Даём права скрипту:
chmod a+x wakeonlanconfig

Создаём символическую ссылку и делаем наш скрипт исполняемым:
update-rc.d -f wakeonlanconfig defaults

Проверяем что всё нормально вводим команду:
/etc/init.d/wakeonlanconfig

Если ничего в ответ не получили, значит всё хорошо и можно проверить на практике.

Удалённое выключение Linux-системы не представляет особого труда, лишь бы был доступ к SSH. А вот с аппаратным включением системы дело обстоит несколько иначе. В этой статье я расскажу о том, что и как необходимо сделать, чтобы удалённо включить компьютер, поддерживающий технологию Wake On Lan. Wake On Lan поддерживается практически во всех современных материнских платах. Для того, чтобы иметь возможность разбудить компьютер удалённо, необходимо, чтобы в нём был установлен источник питания ATX версии не ниже 2.01, материнская плата, поддерживающая Wake On Lan, а также сетевая плата с поддержкой этой технологии.


Настройка

Определить, поддерживает ли материнская плата вашего компьютера Wake On Lan, можно. зайдя в настройки CMOS Setup в раздел настроек управления питанием. Найдите там опцию «Wake On Lan» и убедитесь, что она включена.

После загрузки системы установите, если необходимо, пакет ethtool, при помощи которого можно в том числе и переключать сетевую плату в режим пробуждения по сигналу Wake On Lan от других машин:

Далее, необходимо определить, поддерживает ли установленная сетевая плата Wake On Lan, и включена ли эта опция:

В строке Supports Wake-On перечислены механизмы, поддерживаемые сетевой платой. В моём примере я пользуюсь методом отправки т. н. Magic Packet, и если вам нужно то же самое, то убедитесь, что в Supports Wake On присутствует буква «g». Буква «d» в строке Wake-on обозначает, что Wake On Lan для данного сетевого интерфейса отключён. Чтобы включить его в режим распознавания Magic Packet, необходимо:

Имейте ввиду, что после включения компьютера, вероятней всего, опция Wake-on опять перейдёт в состояние «d» и, если вам нужно, добавьте приведённую выше команду куда-нибудь в /etc/rc.local.

Теперь можно выключать систему:

Включение

Теперь с любого другого компьютера, находящегося в том же сегменте сети (в принципе, это необязательно, но тогда необходимо, чтобы в вашей сети маршрутизаторы корректно пробрасывали широковещательные пакеты), можно включить ранее сконфигурированную удалённую систему. Для этого понадобится утилита wakeonlan, которую необходимо установить, если её ещё нет в вашей системе:

Разбудить выключенную систему теперь можно командой (обратите внимание, wakeonlan не требует прав суперпользователя):

Читайте также: