Wake on LAN je síťový standard umožnující vzdálené probuzení počítače. Nutnou podmínkou pro užívání této funkce na straně cílového počítače (tedy toho, kterého chceme budit) je:
-
Podpora základové desky pro funkci WOL
-
Povolení WOL v BIOSu
-
Povolení funkce WOL na ethernetu u koncového stroje
Jak funguje WOL?
WOL funguje velmi jednoduše a přímočaře na úrovni ethernetu a to nejlépe v lokálním subnetu. Obchází tak potřebu DNS nebo IP adresace.
Wake-on-LAN má ve své implementaci zabudován tzn: „magic packet“, což je broadcastový frame jehož payload je 6 bajtů, všech 255. (FF:FF:FF:FF:FF) následován šestnácti repeticemi MAC adresy koncového počítače.
Jak povolit WOL?
A) BIOS
Nejdříve se nalogujme do našeho BIOSu a zkontrolujme, že máme WOL povolen(enable). WOL má u různých výrobců různé názvy a schovává se různě. Může být v sekci Power/power management, nebo v sekci Configuration. Nezbývá než odkázat na manuálovou stránku výrobce, který napoví mnohem více.
Níže je uveden příklad z Dell Latitude C800 stroje.
B) Povolení na ethernetovém portu u cílového PC.
Přihlásíme se na našem stroji do terminálu a zadáme příkaz ifconfig (nebo nově ip addr show)
connectica@NB01:~$ ifconfig
enp0s25: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
ether b4:99:ba:e6:b7:03 txqueuelen 1000 (Ethernet)
RX packets 2211661 bytes 2534406691 (2.3 GiB)
RX errors 0 dropped 783 overruns 0 frame 0
TX packets 1631778 bytes 164757022 (157.1 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 20 memory 0xd7400000-d7420000
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 245879 bytes 27583477 (26.3 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 245879 bytes 27583477 (26.3 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
vmbr0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.0.200 netmask 255.255.255.0 broadcast 192.168.90.255
inet6 fe80::b699:baff:fee6:b703 prefixlen 64 scopeid 0x20<link>
ether b4:99:ba:e6:b7:03 txqueuelen 1000 (Ethernet)
RX packets 1034796 bytes 772150816 (736.3 MiB)
RX errors 0 dropped 12 overruns 0 frame 0
TX packets 1076814 bytes 116516148 (111.1 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
connectica@NB01:~$ ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp0s25: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master vmbr0 state UP group default qlen 1000
link/ether b4:99:ba:e6:b7:03 brd ff:ff:ff:ff:ff:ff
3: vmbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether b4:99:ba:e6:b7:03 brd ff:ff:ff:ff:ff:ff
inet 192.168.90.200/24 brd 192.168.90.255 scope global vmbr0
valid_lft forever preferred_lft forever
inet6 fe80::b699:baff:fee6:b703/64 scope link
valid_lft forever preferred_lft forever
connectica@NB01:~$
Zjistíme tím, jaké máme označení našeho ethernetového portu v PC. Na OS Debian/Ubuntu je nově konvence ve formátu enpXYsZ (například enp0s25), ve starších distribucích byla konvence ethX (například eth0).
Pro další práci budeme potřebovat doinstalovat balíček ethtool příkazem:
sudo apt-get update
sudo apt-get install ethtool
A poté si vypíšeme podrobnosti o naší síťové kartě:
connectica@NB01:~$ sudo ethtool enp0s25
[sudo] password for connectica:
Settings for enp0s25:
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: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Advertised pause frame use: No
Advertised auto-negotiation: Yes
Speed: 1000Mb/s
Duplex: Full
Port: Twisted Pair
PHYAD: 2
Transceiver: internal
Auto-negotiation: on
MDI-X: on (auto)
Supports Wake-on: pumbg
Wake-on: d
Current message level: 0x00000007 (7)
drv probe link
Link detected: yes
Nejdůležitější část ve výpisu je část Supports Wake-on a písemné označení možných stavů hned za názvem.
O řádek níže je poté aktuální stav síťové karty.
Supports Wake-on: pumbg
Wake-on: d
Suma a přehled možných výpisů stavů ethernetové karty je zde:
p
|
Wake on PHY activity
|
u
|
Wake on unicast messages
|
m
|
Wake on multicast messages
|
b
|
Wake on broadcast messages
|
a
|
Wake on ARP
|
g
|
Wake on MagicPacket™
|
s
|
Enable SecureOn™ password for MagicPacket™
|
d
|
d Disable (wake on nothing).
|
My si přejeme aktivovat vzdálené probouzení koncového PC pomocí magických paketů, což je označení písmenem g. Proto zadáme příkaz
ethtool -s enp0s25 wol g
Nastavení perzistentního režimu:
A) Přes /etc/rc.local
Pouze toto nastavení autorovi fungovalo na stroji Dell Latitude E5440 s OS Ubuntu 12.04
Zeditujeme /etc/rc.local
connectica@NB01:~$ sudo nano /etc/rc.local
sleep 5
ethtool -s enp0s25 wol g
C+XY
Přidáme jeden řádek do /etc/init.d/halt
connectica@NB01:~$ sudo nano /etc/init.d/halt
NETDOWN = no
C+XY
B) Přes /etc/network/interfaces
Pouze toto nastavení WOL autorovi fungovalo na stroji od společnosti HP Elitebook na OS Debian9.
Zeditujeme /etc/network/interfaces dle ukázky níže. Nezapomeňte změnit enp0s25 za název rozhraní ve Vašem stroji:
post-up /sbin/ethtool -s enp0s25 wol g
post-down /sbin/ethtool -s enp0s25 wol g
connectica@NB01:~$ cat /etc/network/interfaces
# network interface settings; autogenerated
# Please do NOT modify this file directly, unless you know what
# you’re doing.
#
# If you want to manage parts of the network configuration manually,
# please utilize the ‚source‘ or ‚source-directory‘ directives to do
# so.
# PVE will preserve these directives, but will NOT read its network
# configuration from sourced files, so do not attempt to move any of
# the PVE managed interfaces into external files!
source /etc/network/interfaces.d/*
auto lo
iface lo inet loopback
auto enp4s0
iface enp4s0 inet manual
auto enp0s25
iface enp0s25 inet manual
auto vmbr0
iface vmbr0 inet static
address 192.168.90.200
netmask 255.255.255.0
gateway 192.168.90.1
broadcast 192.168.90.255
bridge-ports enp0s25 enp4s0
bridge-stp off
bridge-fd 0
network 192.168.90.0
# dns-nameserver 8.8.8.8
post-up /sbin/ethtool -s enp0s25 wol g
post-down /sbin/ethtool -s enp0s25 wol g
C) Nastavení na Ubuntu 18.04 a vyšších pomocí běžící služby v pozadí.
Pouze toto nastavení fungovalo autorovi na libovolném stroji s OS Ubuntu 19.10
Utvoříme si název nové služby
sudo nano /etc/systemd/system/wol.service
Zkopírujeme obsah vně do wol.service a zeditujeme proměnnou enp0s25 za název síťové karty
[Unit]
Description=Configure Wake On LAN
[Service]
Type=oneshot
ExecStart=/sbin/ethtool -s enp0s25 wol g
[Install]
WantedBy=basic.target
Necháme náš stroj, aby si změnu uvědomil příkazem:
sudo systemctl daemon-reload
Službu poté povolíme:
sudo systemctl enable wol.service
A restartujeme ji příkazem:
sudo systemctl start wol.service
Poslání příkazu WOL z mobilního telefonu nebo jiného stroje.
Pro potřeby zaslání příkazu ke vzdálenému probuzení stroje je potřeba znát MAC adresu rozhraní, na které budeme zasílat magic paket. MAC adresa se u výpisu ifconfig nebo ip addr show.
Při užití ifconfig je MAC adresa za názvem našeho rozhraní za ether:
connectica@NB01:~$ ifconfig
enp0s25: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
ether b4:99:ba:e6:b7:03 txqueuelen 1000 (Ethernet)
Při užití ip addr show je MAC adresa za názvem link/ether:
2: enp0s25: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master vmbr0 state UP group default qlen 1000
link/ether b4:99:ba:e6:b7:03 brd ff:ff:ff:ff:ff:ff
Debian/Ubuntu
Na zdrojové mašině si nainstalujeme wakeonlan:
sudo apt update
sudo apt-get install wakeonlan
Pak příkaz pro probuzení vzdáleného počítače zadáváme příkaz:
wakeonlan b4:99:ba:e6:b7:03
MikroTik
Pokud si chceme zapnout domácí PC přes Mikrotik, tak stačí v příkazové řádce napsat:
tool wol interface=ether1 mac=b4:99:ba:e6:b7:03
V syntaxi je obsaženo rozhraní (ether1), kam se posílá magic packet a kde se očekává, že je koncový stroj, který chceme zapnout a samozřejmě MAC adresa koncového zařízení.