LinuxマシンでWake-on-LANを動作させる方法
LinuxでWoLを使うのは、ちょっと奇妙で、時々イライラさせられます。BIOSやネットワークツールなど、すべて設定しても、何も反応しない。あるいはもっとひどいのは、ハードウェアがWoLに対応しているはずなのに、「WoLはサポートされていません」と表示されることです。このガイドでは、よくある落とし穴と実際の解決策を解説することで、面倒な作業を軽減し、毎回頭を悩ませることなくLinuxマシンをリモート起動できるようになることを目指しています。
LinuxでWoLが動作しない問題を解決する方法
BIOSがWake-on-LANをサポートし、有効になっていることを確認する
これは最初のステップですが、見落とされがちです。BIOS設定は、奇妙なメニューの裏に隠れていたり、マザーボードによって名前が異なっていたりすることがあります。PCを再起動し、Delキー、F2Wake on PCI/PCI-Eキー、あるいはBIOS/UEFIを起動するキーを押します。「電源管理」または「詳細設定」セクションに移動します。 、、、Power on By PCI-Eといった名前のオプションを探しますS5 Wake on LAN。これらを切り替えて有効にします。保存して終了します。当然ですが、Windowsでは必要以上に設定を複雑にする必要があるため、Linuxはこれらの奇妙な癖をすべて継承しているのです。
一部の環境では、この設定が分かりにくく、デフォルトで無効になっている場合があります。そのため、WoL は何もトリガーしません。有効にした後、再起動して、ネットワークカードがマジックパケットに対応しているかどうかを確認してください。
ethtool をインストールして使用し、WoL をチェックして有効にする
このツールはまさに命綱ですが、コマンドラインは最初は戸惑うかもしれません。なぜ便利なのか?それは、ネットワークカードのドライバーと直接やり取りするため、WoLがサポートされているかどうかはethtoolが判断し、有効化してくれるからです。もしWoLがサポートされていない場合、あるいはドライバーがWoLを全くサポートしていない場合は、正直言ってゲームオーバーです。
まだインストールしていない場合はインストールしてください。 $ sudo apt install ethtool
イーサネットインターフェースを見つけます。おそらくenp3s0または のようなものですeth0。すべてのインターフェースを一覧表示します。 $ ifconfigまたは$ ip link
走る: $ sudo ethtool enp3s0 | grep "Wake-on"
d(無効)、w(マジックパケットによる起動)、その他のフラグが 表示されます。無効になっている場合は、以下を試してください。$ sudo ethtool --change enp3s0 wol g
このコマンドは、NICにマジックパケットを受け入れるように指示します。変更が確認されたら、素晴らしいです。これがステップ1です。のようなエラーが表示されたらnetlink error: cannot enable unsupported WoL mode (offset 36)、ハードウェアまたはドライバーがそのインターフェースでWoLをサポートしていないというサインです。
再起動後もWoLを維持する – NetworkManagerまたはsystemdを使用する
Linuxは再起動時にこれらの設定をリセットするため、当然ながらこの設定を自動化する必要があります。いくつかの選択肢を以下に示します。
方法 1: nmcli (NetworkManager 用) を使用する
多くのディストリビューション、特にUbuntu、Debian、Rocky、FedoraはNetworkManagerを使用しています。WoLを有効にするには、次のコマンドを実行します: 接続を一覧表示し、有線接続を見つけます。 「有線接続1」$ nmcli con showのような名前や、カスタム名が表示されます。
その接続に対して WoL を有効にします。 $ sudo nmcli c modify "Wired connection 1" 802-3-ethernet.wake-on-lan magic
有効になっているかどうかを確認します。 $ nmcli c show "Wired connection 1" | grep 802-3-eth
不明瞭であったり機能しない場合は、起動のたびにこれを再適用するか、起動ルーチンにスクリプト化する必要があります。
方法2: systemdを使用して起動時にethtoolを実行する
これはちょっとハックっぽいですが、うまく機能します。基本的には、起動時にコマンドを実行するsystemdサービスを作成しethtool、毎回WoLを自動的に有効にします。
/etc/systemd/system/wol.service次の内容の ファイルを作成します:
[ユニット] 説明=Wake-on-LANを有効にする After=network-online.target [サービス] タイプ=ワンショット ExecStart=/sbin/ethtool --change enp3s0 wol g [インストール] WantedBy=ネットワークオンライン.ターゲット
実際のインターフェース名に置き換えてくださいenp3s0。ファイルを保存し、次のコマンドを実行してください: $ sudo systemctl daemon-reload $ sudo systemctl enable wol.service $ sudo systemctl start wol.service
ステータスを確認するには: $ systemctl status wol
この方法だと、再起動のたびに WoL が自動的に有効になるので安心です。
マジックパケットのテストと送信
設定が完了したら、テストを始めましょう。お使いのマシンがサスペンドなどのスリープモードをサポートしていることを確認し( で確認$ systemctl status suspend.target)、テストのためにシャットダウンするか、サスペンド状態にします。その後、クライアントアプリやwakeonlan、etherwakeなどのCLIツールを使用して、MACアドレスを入力します。
ツールをインストールします。 $ sudo apt-get install wakeonlan etherwake
マジックパケットを送信します: $ wakeonlan <MAC-address>または: $ etherwake <MAC-address>
ネットワーク設定が過度にロックダウンされておらず、BIOSが適切に設定されていれば、PCは起動するはずです。WoLパケットは通常、同じLANセグメント内でのみ機能するため、ルーティングの魔法は発生しません。
まとめ
- BIOS で WoL が有効になっていることを確認します。
ethtoolWoL サポートの確認と切り替えに使用します。- NetworkManager または systemd スクリプトを使用して WoL を永続化します。
wakeonlanまたはでテストしますetherwake。
まとめ
LinuxでWoLを動作させるには、ソフトウェアそのものよりも、ハードウェアのサポートやドライバの不具合を追う必要がある場合が多いです。しかし、一度設定してしまえば、かなり便利です。SSH接続のない別の部屋からサーバーやPCを起動できるのは、悪くありません。ただし、NICがWoLに対応していない場合は、いくら調整してもうまく動作しないことがある点に注意してください。この記事が、誰かがこの障害を乗り越え、リモート起動を信頼できるものにするのに役立つことを願っています。