LinuxでのWake-on-LAN (WoL):サーバーの電源投入を「苦行」にしないために

Network tutorial - IT technology blog
Network tutorial - IT technology blog

深夜2時の「悪夢」のようなシナリオ

一日の仕事を終えてぐっすり眠っている深夜、突然スマホが震えてメッセージが届くところを想像してみてください。「サーバーダウン」。飛び起きてSSH接続しようとしたものの、オフィスにあるマシンが完全に停止していることに気づきます。誰かがうっかりシャットダウンしたのか、あるいは停電後の自動復旧機能がうまく動作しなかったのかもしれません。

50人規模のオフィスのインフラを5年間管理してきましたが、現場まで走って電源ボタンを押すためだけに, どれほどの労力を費やしてきたことか。特にサーバーが10キロも離れた場所にある場合、これは非常な時間の無駄です。だからこそ、私は新しいマシンを開封した瞬間に、必ずWake-on-LAN (WoL)を設定するようにしています。

仕組み:Magic Packetの魔法

その秘密はMagic Packetにあります。コンピュータの電源がオフでも、コンセントが繋がっていれば、ネットワークカード(NIC)は0.5Wから1W程度の電力を消費し続けます。この微量な電力により、マシンは「休止」状態を維持しながら、ローカルネットワークからの信号に耳を澄ませています。

NICは特定のイーサネットフレームを待っています。それには、6バイトの「0xFF」と、その後に続くそのマシンのMACアドレスを16回繰り返したデータが含まれています。正しい識別コードを検知すると、NICは即座にマザーボードへ起動信号を送ります。覚えておいてほしいのは、この仕組みはレイヤー2(データリンク層)で動作するということです。この時点ではマシンにIPアドレスが割り当てられていないため、Pingを打っても決して反応しません。

LinuxでWoLを確実に設定する4つのステップ

私は何百もの Ubuntu、Debian、CentOSノードでこのプロセスをテストしてきました。これが最も迅速で安定した方法です。

ステップ1:BIOS/UEFIでの有効化

BIOS側で制限されていると、どんなソフトウェアも役に立ちません。マシンを起動し、F2またはDelキーを押してセットアップ画面に入ります。「Power Management(電源管理)」に関連する項目を探してください。「Wake up on LAN」や「Resume by PCI-E」といった項目をEnable(有効)にします。「ErP Ready」という項目がある場合は、電源オフ時でもNICに電力が供給されるよう、Disable(無効)にする必要があります。

ステップ2:ethtoolによるネットワークカードの設定

次に、OS側の設定です。ここで役立つ万能ツールがethtoolです。インストールは数秒で終わります。

sudo apt update && sudo apt install ethtool -y  # Ubuntu/Debian
sudo yum install ethtool -y                    # RHEL/CentOS

ip linkと入力してインターフェース名(例:enp3s0)を確認します。その後、カードがWoLをサポートしているかチェックします。

sudo ethtool enp3s0

Supports Wake-onの行に注目してください。g(Magic Packetの略)と表示されていれば、半分は成功です。もしWake-ond(disabled)になっている場合は、以下のコマンドで有効化します。

sudo ethtool -s enp3s0 wol g

ステップ3:再起動後の設定消失を防ぐ

よくある問題は、再起動のたびにethtoolの設定がリセットされてしまうことです。これを解決するために、systemdサービスを作成します。この方法は、.bashrcにコマンドを記述するよりも、はるかにプロフェッショナルなやり方です。

sudo nano /etc/systemd/system/wol.service

以下のコードをコピーしてください(enp3s0は自身のネットワークカード名に置き換えてください):

[Unit]
Description=Enable Wake-on-LAN
After=network.target

[Service]
Type=oneshot
ExecStart=/usr/sbin/ethtool -s enp3s0 wol g

[Install]
WantedBy=multi-user.target

起動時に自動実行されるよう、サービスを有効化します:

sudo systemctl enable wol.service && sudo systemctl start wol.service

ステップ4:リモートからサーバーを起動する

最後に、同じネットワーク内の別のマシンから、wakeonlanツールを使って起動コマンドを送信します。構文は非常にシンプルです。

# 操作用マシンにインストール
sudo apt install wakeonlan -y
# 指定したMACアドレスのマシンを起動
wakeonlan 00:11:22:33:44:55

難問:インターネット経由でマシンを起動するには?

自宅から会社のMagic Packetを送る方法について、多くの質問をいただきます。これはレイヤー2のパケットであるため、そのままではルーターを越えることができません。主に2つの選択肢があります:

  1. UDP 9番ポートのフォワーディング: 一般的ですが、セキュリティ上のリスクがあり、多くのルーターが外部からのブロードキャストパケットを遮断します。
  2. VPNを利用(推奨): 私は常にRaspberry PiやMikroTikルーターを24時間稼働させています。必要な時にWireGuard経由で内部ネットワークにVPN接続し、その Piからwakeonlanコマンドを実行します。この方法が最も安全です。

トラブルを避けるための実務経験

LANケーブルの品質チェックも忘れずに。古いCat5ケーブルや、芯線が断線しかかっている場合、スタンバイモードでNICに十分な電力が供給されないことがあります。また、サーバーには固定IPを使用することをお勧めします。WoL自体はMACアドレスを使用しますが、固定IPにしておけば、起動直後にPingで状態を確認できるからです。

WoLの設定はわずか10分で終わりますが、緊急時にあなたを救ってくれるでしょう。設定はうまくいきましたか?それともBIOSの手順で詰まっていますか?コメント欄で教えていただければサポートします!

Share: