【リモートワーク自由自在】Windows 10 Wake On LAN(WoL)入門WoLでPCを起動(2/2 ページ)

» 2020年04月20日 05時00分 公開
[塩田紳二]
前のページへ 1|2       

ハードウェアWoLの設定

 「ハードウェアWoL」は、ネットワークコントローラーが内蔵するマジックパケット検出機能を使い、電源イベントをシステム側に発生させることで、スリープからの復帰を行う。ハードウェアWoLは、ハードウェア機能として実装されるため、メーカーでの設計段階で、採用の可否が決まる。

 そのため、単純にネットワークコントローラーの型番などから、その存在を判定できない。それでも、簡易には、UEFIの設定メニューにWoLの有効/無効を切り替える項目があれば、ハードウェアWoLを搭載していると断定できる。ファームウェアパスワードとの両立をどうさせるかといったセキュリティ的な問題もあるため、UEFIの設定メニューに項目が存在しないのに、機能が実装されている可能性は低いだろう。

 また、別の問題としてメーカーや機種ごとにUEFIの設定メニューにおけるWoLの表現が違っていることが挙げられる。原因は不明だが、ざっと見た感じでも下表のように表現にばらつきがある。

メーカー 呼称
DELL Wake on LAN
富士通 LANによるウェイクアップ
HP Wake on LAN
Lenovo Wake on LAN
NEC Remote Power On
Panasonic Power On by LAN機能
東芝 Wake-up On LAN
主なメーカーのWoL表記

 ハードウェアWoLを有効にするには、UEFIのセットアップメニューを起動する必要がある。Windows 10の起動中なら、[Windowsの設定]アプリの[更新とセキュリティ]−[回復]にある「PCの起動をカスタマイズする」で[今すぐ再起動]ボタンを押す。

[Windowsの設定]アプリの[更新とセキュリティ]画面 [Windowsの設定]アプリの[更新とセキュリティ]画面
UEFIの設定画面を開くには、[Windowsの設定]アプリの[更新とセキュリティ]画面で[回復]−[PCの起動をカスタマイズする]−[今すぐ再起動]を使うのが楽だ。

 再起動後、[オプションの選択]画面が表示されるので、[トラブルシューティング]−[詳細オプション]−[UEFIファームウェアの設定]とメニューをたどり、[再起動]ボタンを押す。あるいは[スタート]メニューから再起動を行い、起動時に[F2]キーの連打で呼び出すこともできる(詳細はTech TIPS「Windows 10でBIOS/UEFIセットアップ画面を確実に開く方法」参照)。

 UEFIが主流になってセットアップの起動は[F2]キーに集約されつつある一方、BIOS世代との互換性のため、他のキーを使うメーカーや機種もある。Lenovoには、[F1]キーを使う機種があり、Hewlett-Packard(HP)には[Esc]キーを使う機種がある。キーによるUEFIの設定画面の起動は、製品のマニュアルなどで確認が必要だ。

 UEFIの設定画面が表示されたら、WoLと思われる機能を探す。そのありかは周辺デバイスの設定かもしれないし、電力関係の設定かもしれない。このあたりはメーカーの違いが出るところだ。見つけたらWoL機能を有効にする。これでハードウェアWoLを使う準備ができた。

Panasonic Let's noteのUEFIの設定画面 Panasonic Let's noteのUEFIの設定画面
Let's noteでは、[詳細]タブの「CPU設定」の下に「Power On by LAN機能」としてWoLの設定がある。ここを「有効」にしておく必要がある。

 次にWindows 10を起動し、ソフトウェアWoLと同じく、デバイスドライバのプロパティにある[詳細設定]タブでWoLを有効化する設定を行う。また、同じくデバイスドライバのプロパティにある[電源の管理]タブの「このデバイスで、コンピューターのスタンバイ状態を解除できるようにする」にチェックを入れる。この部分の設定は、ソフトウェアWoLと同じである。

 もう1つ注意するのは、Windows 10の標準のシャットダウンは前述のように「S4」ステートを使う点だ。ハードウェアWoLは、「S5(完全なる電源オフ)」ステートからの復帰のみをサポートしているため、シャットダウンを「S5」ステートで行う「クラシックシャットダウン」を選ぶ必要がある。

 これには、「高速スタートアップ」を禁止し、常にクラシックシャットダウンとする設定と、[Shift]キーを押しながら[スタート]メニューの[電源]ボタンの[シャットダウン]をクリックして、強制的にクラシックシャットダウンを行わせる方法などがある(詳細はTech TIPS「Windows 10を完全にシャットダウンする」参照)。

高速スタートアップをオフにする 高速スタートアップをオフにする
高速スタートアップを「オフ」にするには、[コントロールパネル]の[電源オプション]で設定する。[電源ボタンの動作を選択する]画面を開いたら、「現在利用可能でない項目を設定します」をクリックしてシャットダウン設定のグレーアウト状態を解除し、「高速スタートアップを有効にする」のチェックを「オフ」にすればよい。

 前者は、常にクラシックシャットダウンとなるのに対して、起動が高速になるという「高速スタートアップ」が無効になるというデメリットがある。これに対し、後者は、高速スタートアップ設定は無効にならないものの、毎回シャットダウン時にWoLでの起動の有無を考えて[Shift]キーを押すかどうかを判断しなければならず、シャットダウン操作がかなり面倒だ。

WoLで使われる「マジックパケット」とは

 WoLでは、ネットワーク側から「マジックパケット」を送信することで、対象とするPCを「起動」(あるいは「復帰」)させることができる。このマジックパケットは以下のような仕様になっている。

  • UDPパケット
  • 宛先はIPv4ブロードキャストアドレス
  • 宛先ポートは任意(何でも構わない)
  • パケットの本体には、6バイトの「0xFF」と対象PCのMACアドレス(48ビット/6バイト)の16回の繰り返しを入れる
マジックパケットの中身 マジックパケットの中身
マジックパケットのメッセージ部分は、6個の0xFFと対象マシンのMACアドレスの16回の繰り返しから構成されている。

 このように比較的簡単な仕様なのに、Windows OSには標準でマジックパケットを送信する機能がない。このためフリーソフトウェアなどを使うことが多い。

 しかし、社内でフリーソフトウェアの利用には制限がある場合や、できれば素性がはっきりしており、問題がないソフトウェアを使いたい場合もあるだろう。インターネット検索をすると幾つかのツールが見つかるものの、バイナリプログラムは、ウイルス感染の可能性などもあり、素直に推奨ができない。

PowerShellによるマジックパケット送信

 そこで今回は、PowerShellによるマジックパケット送信プログラムを作成した。これは単に指定されたブロードキャストアドレスに対して、指定されたMACアドレスを使ったマジックパケットを送信するものだ。たいしたプログラムではないし、短いものなので自由に使ってもらって構わない。ただし、エラー処理などはほとんどしていないため、間違ったパラメーターでもエラーに気が付かないことがある点には注意されたい。呼び出し方は、以下の通りである。

WakeOnLAN "<対象のMacアドレス>" "<ブロードキャストアドレス>"


マジックパケットを送信するPowerShellスクリプトの書式

 「<対象のMACアドレス>」は、16進数をハイフンで区切った形式で、「"1A-2B-3C-4D-5E-0F"」のように指定する(ipconfigコマンドや「Windowsの設定」アプリの[ネットワークとインターネット]などで使われている形式)。「<ブロードキャストアドレス>」は利用しているLANのブロードキャストアドレスを「"192.168.0.255"」のように指定する。ブロードキャストアドレスに関しては、Tech TIPS「ブロードキャストアドレスの種類を知る」を参照いただきたい。

 ただし、WoLでは、前記の記事で言う「ディレクテッドブロードキャストアドレス」のみが利用でき、「255.255.255.255」を宛先としたブロードキャストでは動作しない。また、ブロードキャストという仕様からIPv4でのみ動作する。このため、前記のプログラムも全てIPアドレスの指定はIPv4で行う。

 下に示したスクリプトのテキストをメモ帳などのテキストエディタに貼り付け、「WakeOnLAN.ps1」という名前で保存する(文字コードはUTF-8にすること)。

#
# (C) 2020 Shinji Shioda
#
# WakeOnLAN
#   Magic Packet送信
# Usage: WakeOnLAN "Terget MAC Address" "Broadcast Address"
#   "Terget MAC Address"    起動するマシンのMACアドレス(文字列)
# "Broadcast Address"     マジックパケットを送るブロードキャストアドレス(文字列)
# Ex: WakeOnLAN "1F-2E-3D-4C-5B-6A" "192.168.0.255"
function global:WakeOnLAN ([string]$MacAddress,[string]$BroadCastAddress) {
    $MacPart=($MacAddress.Split("-") | ForEach-Object { [System.Convert]::ToByte($_,16) })
    $EndPoint=New-Object System.Net.IPEndPoint ([system.net.IPAddress]::Parse(($BroadCastAddress)),10000)
    $Socket=New-Object System.Net.Sockets.Socket `
        ([System.Net.Sockets.AddressFamily]::InterNetwork),`
        ([System.Net.Sockets.SocketType]::Dgram),`
        ([System.Net.Sockets.ProtocolType]::UDP)
    $Socket.SetSocketOption(`
        [System.Net.Sockets.SocketOptionLevel]::Socket,`
        [System.Net.Sockets.SocketOptionName]::Broadcast,$true)
    [void] $Socket.SendTo(([byte[]] (@(0xFF) *6))+($MacPart*16),$EndPoint)
    $Socket.Close()
}

マジックパケットを送信するPowerShellのスクリプト

 PowerShellを管理者権限で起動し、「WakeOnLan.ps1」を保存したフォルダに移動(Set-Locationコマンドレットまたはcdコマンドを使う)して、「./wakeonlan.ps1」を実行して、スクリプトを読み込ませる。後は、上記のように「WakeOnLAN」を実行すればよい。

./WakeOnLan.ps1
WakeOnLAN "<対象のMacアドレス>" "<ブロードキャストアドレス>"

Wake On Lanを実行する

 なお、マジックパケットの仕様から、送信元と起動するマシンは同一のIPサブネットに接続している必要がある。遠隔地のPCを起動させるのであれば、起動させたいPCが接続しているLANにVPNなどで接続しておく必要がある。

 また、MACアドレスは事前に調べておく必要がある。電源がオフになっているマシンのMACアドレスを調べることができないからだ。WoLを使って起動するのであれば、対象となるPCのIPアドレスやMACアドレスのリストを作っておくべきだろう。IPアドレスは、DHCPでの予約が望ましい。WoLではIPアドレスは直接には不要だ。しかし、トラブル時にはpingコマンドなどのツールを使うために必要になる。

 対象となるPCのMACアドレスとIPアドレスは、対象となるPC上で[Windowsの設定]アプリで[ネットワークとインターネット]画面を開き、左ペインで[状態]を選択、右ペインの[ネットワークのプロパティを表示]リンクをクリックすると表示される。複数のネットワークアダプターが搭載されている場合は、マジックパケットを受信するアダプターを「名前」で判断する。

IPアドレスとMACアドレスの確認方法(1) IPアドレスとMACアドレスの確認方法(1)
[Windowsの設定]アプリの[ネットワークとインターネット]画面を開き、左ペインで[状態]を選択、右ペインの[ネットワークのプロパティを表示]リンクをクリックする。
IPアドレスとMACアドレスの確認方法(2) IPアドレスとMACアドレスの確認方法(2)
[ネットワークのプロパティを表示]画面に変わるので、ここで該当するネットワークデバイスを探し、「IPv4アドレス」と「物理アドレス(MAC)」のそれぞれをメモする。

実際にWoLを試してみよう

 ここでは、手元にあった機材を使ってWoLをテストしてみた。対象のPCは、4機種で、うち2機種は、Modern Standby対応機種である。結論からいうと、Modern Standby非対応のメーカー製品は全てハードウェアWoLに対応していて動作した。また内蔵LANではWoLによりスリープ、休止状態からの復帰が行えた。

 これに対して外付けUSBネットワークアダプターは、WoLで「S3」ステートからの復帰には対応した一方で、「S4」ステートからは復帰できなかった。無線LANからのWoLは1機種のみが対応していた。

機種 Modern Standby Windows 10 LAN ハードウェアWoL*1 内蔵LANからのWoL 外付けUSB-LANからのWoL*2
Panasonic CF-RZ6 × November 2019 Update
(Build18363.720)
Intel Ethernet Connection I219-LM S3/S4 S3/−
Lenovo ThinkPad X1 Yoga(2018) × May 2019 Update
(Build 18362.657)
Intel Ethernet Connection I219-LM S3/S4 S3/−
HP Elite X2 1013 G3 November 2019 Update9
(Build18363.720)
Realtek USB GbE Family Controller(TB) ×*3 ×*4/S4 −/−
WoLの実験結果(有線LAN)
*1:UEFIメニューで確認
*2:ロジテック LAN-GTJU3使用
*3:LANはThunderBolt3接続の外部ドックに内蔵
*4:S3ステートには入ることはない

機種 Modern Standby Windows 10 無線LAN 内蔵WLANからのWoL*5
Panasonic CF-RZ6 × November 2019 Update
(Build18363.720)
Intel Dual Band Wireless-AC-8265 S3
Lenovo ThinkPad X1 Yoga(2018) × May 2019 Update
(Build 18362.657)
Intel Dual Band Wireless-AC-8265 ×
HP Elite X2 1013 G3 November 2019 Update9
(Build18363.720)
Intel Dual Band Wireless-AC-8265 ×
WoLの実験結果(無線LAN)
*5:対応はpowercfgコマンドで確認

 なお、WoLが正しく動作したかどうかは、復帰後に、「powercfg /lastwake」コマンドを使って、最後の復帰の原因となったデバイスを表示させて行った。Modern Standbyでは、ハードウェアWoLに対応していた機種はなかった。一方、内蔵LAN(正確には純正ThunderBold3接続ドッキングステーション内蔵のLAN)からのソフトウェアWoL(ただし「S4」ステートからの復帰)には、1機種が対応していた。しかし、無線LANや外付けUSBネットワークアダプターからのWoLは行うことができなかった。

powercfgコマンドで復帰を確認する powercfgコマンドで復帰を確認する
WoLによる復帰を確認するには、コマンドラインから「powercfg.exe /lastwake」コマンドを実行する。

 前記の表から分かるように、内蔵ネットワークデバイスの型番のみでは、WoL対応の可否は判断できず、powercfgコマンドを使う必要があった([電力の管理]タブで設定項目がグレーアウトしていることでも確認は可)。また、Modern Standby構成でWindows 10がプリインストールされている場合、内蔵LANがあれば、「S4」ステートからのWoLができることが確認できた。ただし、こちらもハードウェア設計に依存する部分なので、事前に確認が必要だろう。

 外付けUSBネットワークアダプターは手元の3つを評価してみた。ファストリング(Fast Ring)のプレビュー版(東芝 dynabook RZ83/VB)では動作しなかったものの、May 2019 Update(バージョン1903)、November 2019 Update(バージョン2019)ともに3つのUSBネットワークアダプターで動作した。

アダプター名称 内蔵チップ Panasonic CF-RZ6 Lenovo ThinkPad X1 Yoga(2018) 東芝 dynabook RZ83/VB
ロジテック LAN-GTJU3H3 ASIX AX88179 ×
ロジテック LAN-GTJU3 ASIX AX88179 ×
メーカー不明 USB3.0 Gigabit Ethernet adapter Realtek USB GbE Family Controller ×
外付けUSBネットワークアダプターによるWoLの実験結果
東芝 dynabook RZ83/VBのWindows 10はファストリングのプレビュー版。動作しなかった原因は、プレビュー版である可能性がある。

 うち1つはメーカーが不明で、メーカーのWebサイトも不明である。また、メーカー品(ロジテック)は、どれも製品ページには、WoLに対応しているとの記載がなかった。

 表には掲載していないが、PanasonicとLenovoは前の表と同じで、東芝がファストリングのプレビュー版(Build19603)である。このプレビュー版(非Modern Standby)では、WoLが正しく動作せず、復帰が行えなかった。

 Windows 10側の問題やデバイスドライバのバージョン(今回の評価ではBoxドライバを利用)によって、WoLが動作しない可能性が考えられる。特にWindows 10では半年ごとにバージョンが変わり、アップデートによっては、不具合が発生することも珍しくない。Windows 10をアップデートしたらWoLが動作しなくなる可能性は否定できない。WoLが重要な機能である場合、アップデートの取り消しが可能な期間にWoLが可能かどうかのテストを行っておくべきだろう。

前のページへ 1|2       

Copyright© Digital Advantage Corp. All Rights Reserved.

スポンサーからのお知らせPR

注目のテーマ

4AI by @IT - AIを作り、動かし、守り、生かす
Microsoft & Windows最前線2025
AI for エンジニアリング
ローコード/ノーコード セントラル by @IT - ITエンジニアがビジネスの中心で活躍する組織へ
Cloud Native Central by @IT - スケーラブルな能力を組織に
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。