Wake on lan from linux
Как настроить 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
Добавляем в скрипт строки:
#!/bin/bash
ethtool -s eth0 wol g
exit
Даём права скрипту:
chmod a+x wakeonlanconfig
Создаём символическую ссылку и делаем наш скрипт исполняемым:
update-rc.d -f wakeonlanconfig defaults
Проверяем что всё нормально вводим команду:
/etc/init.d/wakeonlanconfig
Если ничего в ответ не получили, значит всё хорошо и можно проверить на практике.
Вот так вот просто настроить Wake On Lan в Linux
Источник
- WakeOnLan
Wake On LAN (WOL) enables other systems on your local area network (LAN) to turn on your system over the network. Support for WOL is required in your network card, motherboard, UEFI/BIOS boot firmware and operating system network configuration.
Hardware
Your first step towards booting your computer from over the network is to make sure your network card and motherboard support some type of Wake On LAN (WOL) feature.
Motherboards with onboard NICs usually support WOL without the need for any pins/cables.
For motherboards without onboard NICs there are two main systems:
- Newer motherboards use a WOL pin on the PCI bus, negating the need for the cable.
- Older motherboards use a WOL three pin connector between your network card and your main board. Both headers are usually labelled ‘wol’.
- Some motherboards support both and only provide the header for backwards compatibility with network cards that don’t support the PCI pin.
Examples
- 3Com’s -NM (non managed) cards do not support WOL while their -M (managed) cards do.
Firmware
In the UEFI/BIOS boot firmware settings under power management or network you may have a clear, intuitive option labelled «Wake On LAN». If you do not have that option, there may be another power management or network option that enables WOL.
Examples
Shuttle XPC SK41G: Power Management Setup -> IRQ/Event Activity Detect -> PowerOn by PCI Card or Modem Ring Resume
Software
After activating WOL in hardware and firmware, it must also be activated in software.
First check if WOL functionality is already activated.
If it is activated, then you can power down your system, and then use another system to wake it.
If it is not activated, then you need to enable automatic activation. You can use the integrated WOL functionality of systemd networkd, NetworkManager or ifupdown. Alternatively you can activate it manually.
Checking WOL
You can check if WOL is enabled using the ethtool command from the ethtool package:
Wake-on: g means it is enabled.
Enabling WOL
ifupdown
You can check if you manage network by ifupdown with ifquery. This is the default on Debian installations.
Since squeeze ethtool parameters can be set directly from an interface configuration file. See the documentation in /usr/share/doc/ethtool/README.Debian for more information.
Add an interface config file /etc/network/interfaces.d/eth0 (or modify the global interface config file /etc/network/interfaces):
systemd-networkd
You can check if your network is managed by systemd-networkd by networkctl list command.
Set the WakeOnLan field to one of the available options in the [Link] section of the .link file for the network interfaces you want to use WOL on:
Beware that only the first .link file is applied and that there is a 99-default.link. The name needs to be lexicographically smaller.
NetworkManager
You can check if your network devices are managed with nmcli d command.
NetworkManager supports WOL since version 1.0.6 and you can enable it from either your desktop network configuration GUI, or the nm-connection-editor GUI from nm-connection-editor, or from the nmcli command-line tool using this command:
Manual
The ethtool command from the ethtool package can tell the network interface to respond to the magic packet. Replace eth0 with your network interface device name:
Using WOL
WOL utilities typically require the target host’s NIC MAC address; this can be found by running standard network configuration utilities on the target (e.g. ip a, ifconfig), or by pinging the target system and then checking the local arp table (arp).
Install the etherwake package in the controlling system for the etherwake command to send the «Magic Packet» to my computer to wake it up. The program must be run as root to send the packet (I use sudo to execute it).
The wakeonlan package is also available, wakeonlan is a program that uses UDP packets not TCP, and hence does not need to be run as root. It is also slightly more configurable.
Troubleshooting WOL
I found that I didn’t want any of the Wake On LAN settings except Wake on «Magic Packet» (g). I only wanted my machine to turn on when I specifically told it to, not on unicast messages (u), broadcast messages (b) or multicast messages (m).
However, if you do want Wake On LAN on any of these events (other than «Magic Packet»), you may find conflicts with pm-utils. At the time of writing, scripts in this package will set the wake option for all relevant interface cards to «Magic Packet» only , (g). This will be a problem if you want your machine to wake «on-demand», when it receives traffic (u), for example. The issue and a fix is discussed below.
WOL Persistence
Hardware looks up to spec, you think the BIOS is set right, but it still doesn’t work without some tweaking using the software. According to the Wake On Lan client FAQ most Linux drivers disable the WOL feature on boot 1 , so we need to get it going.
Kernel 2.6
With a 2.6 kernel we’re using /etc/modprobe.d. You may be using /etc/modprobe.conf, but if it’s not including /etc/modprobe.d you’re probably getting told about that each time you boot and some stuff may not be configured properly. I’m using /etc/modprobe.d and I added a file local.conf into the directory:
ethtool comes from the ethtool package, so you’ll need to install that unless your card supports a load option to set WOL. If that’s the case I’d make an local.conf file with the appropriate options line, maybe something like:
If your kernel uses an initramfs image (eg. Debian stock kernels), also run update-initramfs -u (or update-initramfs -u -k all if necessary) to rebuild kernel initial ramdisk(s).
Testing on another machine with a C3905B-TXNM and a 3C905C-TXM that uses the 3c59x module to drive them both I found that ethtool was unable to query them or set the WOL setting, but that the enable_wol=1 setting did work and was required.
While I was messing with these settings, I noticed that both 8139too and 8139cp were loading, but loading just 8139cp alone failed since my chipset isn’t new enough so I blacklisted it.
Debugging state with ethtool
After an hour struggling with why my system still didn’t work I started throwing in the ethtool query command all over the place to see what the deal was:
I found that (at least with my 8139too driver on Debian 3.1/Sarge) the install line was working when I’d modprobe 8139too, but ifup also resets the WOL setting, so I added an up line to /etc/network/interfaces under eth0:
I kept the ethtool command in /etc/modprobe.d/local.conf in case I boot and ifup isn’t executed before shutting down.
PM-Utils Conflicts
The pm-utils package contains scripts that are run on suspend, hibernate and on resume of the system. There is one script, /usr/lib/pmutils/power.d/disable_wol, which sets the configuration for interfaces to only wake on «Magic Packet» (g), regardless of the settings you may have configured in /etc/network/interfaces (or one of the files under /etc/network/interfaces.d, or manually using ethtool or in some other way). Look for lines in the file similar to the following:
Obviously, if you have set an interface to Wake on LAN in the event of a unicast packet or «Magic Packet» (ug), then suspend using pm-suspend, for example, this script will set the interface to «Magic Packet» only (g) as part of the suspension process.
You can detect the problem, once you know what you’re looking for, by noticing through ethtool after a resume that the «Wake-on» settings for interfaces have been set to «g».
A simple fix (that will not interfere with package updates) is to add a file with the same name, disable_wol to the local configuration directory, /etc/pm/power.d/. This overrides the script in /usr/lib/pm-utils/power.d/disable_wol.
This is my (somewhat verbose, and functionally trivial) /etc/pm/power.d/disable_wol:
Conclusion
Wake On LAN works on Debian and opens up new options for machine management.
I can log into my gateway and boot my desktop, grab what I need and then power it back off remotely. I’m using DHCP with MAC-to-IP mappings so I can look in that file on my gateway system to know the MAC address of the system I wish to wake up. If I didn’t have that I could keep a text file.
My next feat is to have non-essential systems power-off (not just halt) on a power outage to extend the battery runtime for the essential systems and then use WOL to power the other systems back on after power is restored and the battery has hit some specific charge level. I think some settings with halt or APM or ACPI are not right on those systems. See OffAndOnAgain.
Источник
WOL: Приключения «Волшебного Пакета» в Linux
Совсем недавно LeeMiller описал как воспользоваться посылкой «волшебного пакета» для удаленного включения компьютера под управлением Windows, большое ему спасибо.
Очень странно, что ни кто не спросил в комментариях, — А как же быть с Линуксом? Ничего не получается, у него нет, как минимум, Пуск — Панель Управления — Сетевые Подключения!
Либо все и так всё знают, либо это никому не надо, но я, всё же, рискну об этом написать.
Пост будет творческой переработкой моего стародавнего HowTo, опубликованного на forum.ubuntu.ru, написанного, в свою очередь, после чтения англоязычных мануалов.
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 есть еще пяток вариантов чего ждать, но к данной теме это не относится.
Если никакого вывода не последовало и показалась следующая строка ввода — значит всё прошло гладко.
— Проверяем на практике.
Распечатываем данное руководство, выключаем первый компьютер и идём ко второму 🙂
Шлём пакет одним из предложенных LeeMiller’ом способов. Если способы не нравятся — рекомендую свой любимый, простенький веб-сервис, которым можно воспользоваться даже при помощи браузера в сотовом телефоне.
Хочу обратиться к тем, кто умнее меня, — если есть (наверняка есть) более красивый способ реализации — сообщайте, будем обновлять знания!
И благодарю LeeMiller’a за то что отсыпал кармы из волшебного пакета, без этого ничего бы не вышло.
Источник