自宅に Linux Mint のサーバーを置いて SSH でつないでいたら、いつの間にか電源が落ちていた。
再起動するには物理的に電源ボタンを押すしかないのか?
有線LANで接続しているなら、その必要はありません。
Wake-on-LAN という仕組みを使えば、同じLAN内の別PCやスマホから起動パケットを送って電源を入れられます。
1. Wake-on-LANとは?
PCがシャットダウンしていても、有線LANポートには待機電力が供給されています。
「Wake-on-LAN(WoL)」は、この待機状態のLANポートに「マジックパケット」と呼ばれる特殊なUDPパケットを送ることで、PCを起動させます。
電源オフ中もLANカードだけが起動信号を待っている構造1です。
ただし、大事なのは有線LAN接続であること。
基本的にはWi-Fiアダプタは電源オフ中に待機しないため、WoLは使えません2。
1.1. 別PCからの起動方法(MACアドレスにパケット送信)
送信側のPCには、 wakeonlan をインストールします3。
sudo apt install wakeonlanCode language: Bash (bash)
起動したいサーバー側のMACアドレスを調べます。
サーバーにまだ接続できる状態であれば、次のコマンドで確認できます。
ip link show enp3s0Code language: Bash (bash)
link/ether の後に表示される AA:BB:CC:DD:EE:FF 形式の値がMACアドレスです4。
MACアドレスが分かれば、別PCから次を実行します。
wakeonlan AA:BB:CC:DD:EE:FFCode language: Bash (bash)
数秒後にサーバーが起動してきます5。
2. 起動される側の有線LANとBIOS/UEFIの対応
サーバー側がマジックパケットを受け取るためには、前提条件があります。
- 電源ケーブルが刺さった状態で待機電力があること。
- 有線でLANに接続していること。
- BIOS/UEFIがWoLに対応していて、有効になっていること。
- OSの設定でWoLが有効になっていること。
WoLの待機中はLANカードが最低限のリンク速度でごく少量の電力を消費し続けるため、不要であれば無効にするとシャットダウン中の消費電力をわずかに抑えられます6。
たしかに、BIOSをみたときに、「Wake-on-LAN」の項目はよく見ますね。
2.1. BIOS/UEFIを有効にする
まずは、BIOS/UEFI の設定画面で次のような項目を探して有効にしてください。
- Wake on LAN
- Power On By PCI-E
- Resume by LAN
項目名はマザーボードのメーカーによってばらつきがあり、「LAN」「PCI-E」「Network」などのキーワードで探すと見つかります7。
3. Windowsでの設定
3.1. WindowsでWoLを有効にする
Windowsでは、デバイスマネージャーから有線LANアダプターの設定を確認します。
まず、スタートボタンを右クリックして「デバイス マネージャー」を開きます。
「ネットワーク アダプター」を展開し、有線LANアダプターをダブルクリックします。
「電源の管理」タブで、次の項目を有効にします。
- このデバイスで、コンピューターのスタンバイ状態を解除できるようにする
- Magic Packet でのみ、コンピューターのスタンバイ状態を解除できるようにする
次に、「詳細設定」タブを開き、Wake-on-LAN 関連の項目を探します。項目名はLANアダプターによって異なりますが、次のような名前で表示されます。
- Wake on Magic Packet
- Wake on pattern match
- Wake from Shutdown
- Shutdown Wake-On-Lan
- PME
基本的には、Wake on Magic Packet を有効にします。
電源オフ状態から起動したい場合は、Wake from Shutdown や Shutdown Wake-On-Lan も有効にします。
3.2. 高速スタートアップを無効にする
Windowsでは「高速スタートアップ」が有効になっていると、シャットダウン後のWoLがうまく動かないことがあります。
「コントロール パネル」を開き、「ハードウェアとサウンド」→「電源オプション」→「電源ボタンの動作を選択する」を開きます。
「現在利用可能ではない設定を変更します」をクリックし、「高速スタートアップを有効にする」のチェックを外します。
スリープや休止状態からの復帰ではなく、シャットダウン状態からWoLで起動したい場合は、この設定も確認しておくとよいです。
4. Linuxでの設定
4.1. LinuxでWoLが有効かを確認する
まず ethtool をインストールします。
sudo apt install ethtoolCode language: Bash (bash)
有線LANのインターフェース名を調べます。
ip linkCode language: Bash (bash)
enp3s0 や eth0 のような名前が出ます。
それを使って WoL の状態を見ます。
sudo ethtool enp3s0Code language: Bash (bash)
出力の中に次の2行を探してください。
Supports Wake-on: g
Wake-on: d
Supports Wake-on: g があればハードウェアは対応しています。Wake-on: d は現在無効という意味で、g はマジックパケットで起動する設定8です。
4.2. 有効化と恒久化
一時的に有効にするには次を実行します。
sudo ethtool -s enp3s0 wol gCode language: Bash (bash)
この設定は再起動で消えます9。
NetworkManager 経由で設定すると、再起動後も維持されます。
接続名を確認します。
nmcli connection showCode language: Bash (bash)
接続名が Wired connection 1 であれば、次のように設定します。
sudo nmcli connection modify "Wired connection 1" 802-3-ethernet.wake-on-lan magic
sudo nmcli connection up "Wired connection 1"Code language: Bash (bash)
5. うまく起動しないときの確認ポイント
ethtool enp3s0でWake-on: gになっているか- BIOS/UEFIでWoL関連の項目が有効になっているか
- 電源ケーブルが刺さっていて待機電力が来ているか
- 送信先のMACアドレスが正しいか
電源が停電や瞬断で落ちているのが原因であれば、BIOS/UEFI の Restore on AC Power Loss や After Power Failure という項目を Power On に設定しておくと、電源が復旧したときに自動で起動するようになります。
- マジックパケットは先頭6バイトを0xFF(16進数)で埋め、続いてMACアドレスを16回繰り返した計102バイトのパケットです。UDPポート7番または9番で送信されることが多いですが、ポート番号は任意です。 – Wake-on-LAN – ArchWiki
- Ubuntuのヘルプでも、WoLはNIC、つまりネットワークインターフェースカードがマジックパケットを受け取って起動する仕組みとして説明されています。 – WakeOnLan – Community Help Wiki
wakeonlanがない環境では、python3 -m pip install wakeonlanでインストールしたPythonモジュールや、bashのUDP擬似デバイス(/dev/udp)を使った1行コマンドでも同等の動作が可能です。 – wakeonlan – PyPI- サーバーが起動中であれば、送信側から
arp -n <サーバーのIPアドレス>を実行することでもMACアドレスを取得できます。 – Wake-on-LAN – ArchWiki - マジックパケットはLAN内のブロードキャストとして送信されるため、ルーターを越えた別サブネットへは届きません。インターネット越しに起動したい場合はルーターでのポートフォワーディングか専用ゲートウェイが必要です。 – Wake-on-LAN – Wikipedia
- 待機中のLANカードはGigabit NICでも10 Mbit/sまで速度を落として電力を節約しています。使用しない場合は無効にすることで消費電力を微減できます。 – Wake-on-LAN – Wikipedia
- 項目がBIOS画面に見当たらない場合は、マザーボードのマニュアルで「Wake on LAN」「WoL」などで検索すると設定場所を確認できます。一部のマザーボードではデフォルトで有効になっており、項目そのものが表示されないこともあります。 – Wake-on-LAN Configuration – calculate-linux.org
- ethtoolのWoLフラグには他にも p(物理レイヤの変化)、u(ユニキャスト)、m(マルチキャスト)、b(ブロードキャスト)、a(ARP)があります。マジックパケットによる起動には g だけ有効にすれば十分なケースがほとんどです。 – ethtool(8) – Linux manual page
- NetworkManagerは接続を再適用する際にドライバのデフォルト値に戻すことがあるため、ethtoolだけで設定しても再起動で上書きされます。systemd-networkdを使っている環境では .network ファイルに WakeOnLAN=magic と記述する方法もあります。 – Wake-on-LAN – ArchWiki