Wake On Lan 實作心得


Posted by 孫胖 on 2023-02-03

紀錄一下這幾天設定 wake on lan 的重點,以免自己之後回來又忘記。

前情提要

之前已經設定好 Linux Mint 的 VNC 了,現在只要一開機就會自動啟動 VNC,然後我們就可以用 VNC Viewer 連進去,不過一直讓電腦處於開機狀態似乎是很吵又很浪費電的一件事情,所以我希望只有我要用的時候再讓它開機就好,這時候使用 Wake On Lan 就是一個很棒的解決方法。

Wake On Lan 是什麼?

顧名思義,就是利用網路喚醒機器,以下簡稱 wol。

wol server

一台常駐開機的設備,負責傳送 Magic Packet,我們就是透過它來喚醒機器。

wol client

需要被喚醒的機器,負責接收 Magic Packet。

設備

  • 樹梅派 -> wol server
  • sun (Linux Mint) -> wol client

使用到的工具

  • Terminus: 用於 SSH 連線
  • Deco: 固定 wol client (sun) ip address 以及透過外部 Port 導向至內部 ip
  • remoteit: 讓 wol server (樹梅派) 啟動
  • VNC Viewer: 用於測試 sun 是否開機成功

開始

首先透過 remoteit 啟動 wol server (樹梅派)

使用 SSH 連進去

接著安裝 wakeonlan

sudo apt install wakeonlan

這樣就可以了,暫時先離開,等等再回來發送 Magic Packet


要先確認主機板是否支援 Wake On Lan 喔~

如果有支援,記得要去 BIOS 開啟功能

接下來用 SSH 連進 wol client (sun)

安裝 ethtool

sudo apt install ethtool

查看網卡名稱

ip a

OUTPUT

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: enp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 08:60:6e:6e:c7:eb brd ff:ff:ff:ff:ff:ff
    inet 192.168.68.115/24 brd 192.168.68.255 scope global dynamic noprefixroute enp3s0
       valid_lft 6941sec preferred_lft 6941sec
    inet6 ::1014/128 scope global dynamic noprefixroute
       valid_lft 86144sec preferred_lft 86144sec
    inet6 fe80::ca8a:e292:99e0:781c/64 scope link noprefixroute
       valid_lft forever preferred_lft forever

可以看到我這邊的網卡名稱是 enp3s0

然後 MAC ADDRESS 是 08:60:6e:6e:c7:eb (記起來,等下會用到)

接下來查看 wol 的啟用狀態

sudo ethtool enp3s0 # 將 enp3s0 改成你自己的網卡名稱

OUTPUT

Settings for enp3s0:
        Supported ports: [ TP    MII ]
        Supported link modes:   10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Full
        Supported pause frame use: Symmetric Receive-only
        Supports auto-negotiation: Yes
        Supported FEC modes: Not reported
        Advertised link modes:  10baseT/Half 10baseT/Full
                                100baseT/Half 100baseT/Full
                                1000baseT/Full
        Advertised pause frame use: Symmetric Receive-only
        Advertised auto-negotiation: Yes
        Advertised FEC modes: Not reported
        Link partner advertised link modes:  10baseT/Half 10baseT/Full
                                             100baseT/Half 100baseT/Full
        Link partner advertised pause frame use: Symmetric
        Link partner advertised auto-negotiation: Yes
        Link partner advertised FEC modes: Not reported
        Speed: 100Mb/s
        Duplex: Full
        Auto-negotiation: on
        master-slave cfg: preferred slave
        master-slave status: slave
        Port: Twisted Pair
        PHYAD: 0
        Transceiver: external
        MDI-X: Unknown
        Supports Wake-on: pumbg
        Wake-on: g
        Link detected: yes

可以看到 Wake-on 目前是 g

如果你是 d (disable) 的話,可以透過以下指令將其開啟

sudo ethtool -s enp3s0 wol g

這樣就設定好了,可以使用以下指令讓機器休眠

sudo pm-hibernate

接下來回到 wol server (樹梅派)

wakeonlan 08:60:6e:6e:c7:eb # 記得改成你自己的 wol client MAC ADDRESS

OUTPUT

Sending magic packet to 255.255.255.255:9 with 08:60:6e:6e:c7:eb

如果成功,你的機器現在就會啟動了~

補充

由於 Wake-On 的設定重開機就會變回 d (disable)

所以我們可以透過 rc local 讓他在開機的時候自動啟動

sudo vim /etc/rc.local

輸入以下內容

#!/bin/bash
sleep 5
ethtool -s enp3s0 wol g

存檔離開之後再更改權限

sudo chmod a+x /etc/rc.local

接下來使用 systemd 開啟 rc-local

sudo systemctl enable rc-local.service # 在開機的時候自動啟動服務
sudo systemctl start rc-local.service # 現在啟動服務

筆記 for myself

Deco 注意事項

固定 wol client (sun) ip address --> 位置保留

透過外部 Port 導向至內部 ip --> NAT 導向


#Wake On Lan #linux







Related Posts

2. 架構完整的 React 專案結構

2. 架構完整的 React 專案結構

DAY 05 : 字串

DAY 05 : 字串

【Tips】建立OnPropertyChanged。其中的方法簽章若沒有寫入,則預設為呼叫的成員名稱

【Tips】建立OnPropertyChanged。其中的方法簽章若沒有寫入,則預設為呼叫的成員名稱


Comments