見出し画像

WoL(Wake on LAN)遠隔PC起動~実践編~情報処理安全確保支援士・ネットワークスペシャリスト

PC遠隔起動(WoL)ハンズオン

今日はパソコンを遠隔で起動したり、スリープモードから復帰したりさせる技術のWoLについてハンズオンを交えて説明していきます。

画像1

◆動画解説◆




◆文字おこし◆(ソースコード)

この動画作成に至った経緯なのですが、
令和3年春の情報処理安全確保支援士の解説動画を作っていてこんな問題がありました。

画像2


b FF:FF: FF:FF FF:FF オールエフのブロードキャストアドレス、MACアドレス
選択肢が簡単だったので、消去法で答えは分かるのですが、本当にこんなのでパソコンがスリープ復帰や遠隔で電源つけられるのかと半信半疑だったので、実際に試してみました。

画像3

さきに技術概要を説明します。
WoLは「Wake on LAN(ウェイク オン ラン)」の略で、ネットワークに接続されたコンピューターにマジックパケットと言われる特殊なフレームを送ることで、離れた場所からでも電源をオンにしたり、スリープを解除したりできる機能のことです。


たとえば、同一ネットワーク内のパソコンAからパソコンB起動するパターンで説明していきます。
パソコンAは、マジックパケット言われるイーサネットフレームをブロードキャスト送出します。その中にはパソコンBのMACアドレスが含まれていて、そのフレームを受け取ったパソコンBはパソコンを起動したり、スリープモードから復帰します。

画像4

マジックパケットのフレームについて説明します。
UDPヘッダーの後に、オールFのブロードキャストアドレス、そして起動したいパソコンのMACアドレスを16回繰り返して記述したものになります。

Windowsパソコンを使ってのハンズオンの前にWoLについてもう少し説明します。
WoLはスリープ状態 や シャットダウンしているパソコンに対して マジックパケットと呼ばれる信号を送信して起動させる機能です。パソコンはシャットダウンしている状態でも電源ケーブルが接続されていれば マザーボードには待機電源が供給されています。
そのため、WOL を有効にすると「 電源ボタン 」の代わりになるアプリケーションを使用して、ネットワーク上にある PCを起動させることが可能になるという技術です。

画像5

令和3年の情報処理安全確保支援士の試験では、暫く起動していないパソコンがセキュリティパッチが最新化できておらず、ウィルスに感染したという事例から、深夜にWoLを利用して定期的にパソコンを強制起動させてセキュリティパッチを適用するというものでした。

WoLを学ぶ上での事前知識としてACPI ( Advanced Configuration and Power Interface ) があります。ACPIは電源管理の規格で S0 ~ S5 までのスリープ状態が規定されています。

画像6

Windows10のデフォルトシャットダウンはS5ではなく、S4のハイブリットシャットダウンになるのでWoLを使うには、設定を変更しS5の状態にする必要があります。

画像7

WoLにはソフトウェアWoLとハードウェアWoLがあります。
Windows10の場合、S3スリープ、S4の休止状態からの復帰が可能です。

ハードウェアWoLは電源断のS5の状態から電源ONが可能です。ただ、BIOSの設定を変える必要があり、パソコンによっては対応していない場合もあります。

このあとスリープ状態、電源断状態 両方のパターンでハンズオン交えて説明しますが、電源OFFつまりS5からの復活は無線LANでは難しい様で、有線LANでハンズオンしています。
皆さんの環境によっては機器自体が対応していない場合もあるので、私の環境の場合ということで説明していきます。

まずは、ソフトウェアWoLから行っていきます。

画像8

私の家の環境ですが、同一ネットワーク内で複数端末が無線LANでつながっています。
パソコンBはスリープモードとして、パソコンAからマジックパケットを送出します。


まず、パソコンBがマジックパケットを受け取れる状態します。
ネットワークインタフェースごとにWoLの無効と有効が設定できます。

画像9

左下のウィンドウズマークで右クリックしてディバイスマネージャーを選びます。
ネットワークアダプターから、現在ルータと接続しているネットワークアダプターを選択します。
詳細設定タブからWake on Pattern Macheを選びます。
そして値が無効だったら有効に変更します。
機器によってWOLだったり名前が違ったり、項目自体が存在しなかったりします。WoL未対応の場合もあります。

画像10


つぎに、電源管理タブをクリックして、このデバイスで、コンピュータのスタンバイ状態を解除できるようにするにチェックを入れます。

マジックパケットを投げるうえで必要になるのがネットワークインタフェースカードのMACアドレスです。

コマンドプロンプトを起動しipconfig -allで調べることができます。


複数ある場合は、今使っているネットワークにつながっている方のMACアドレスを控えておいてください。

コントロールパネルのネットワークとインターネットから調べることも可能です。
無線ならWi-Fi
有線ならイーサーネットでハードウェアのプロパティから参照することができます。

設定とMACアドレスの控えが出来たら、スリープモードにしておきます。

---------------------
今度はマジックパケットを送出する端末側で、マジックパケットのフレームを作成してUDPで送出するプログラムを組んでいきます。ググった限りPythonやPhpやLinuxシェルでのサンプルプログラムもあったのですが、環境構築が不要なWindowsのデフォルト環境である、Powerシェルを使います。
Windowsバッチより、より高度な処理を組むことができるものです。

概要欄にリンクを貼っている、こちらのブログ記事をベースにプログラム作成させてもらいました。

$macAddress=[byte[]]("XX:XX:XX:XX:XX:XX".Split(":")|%{ [Convert]::ToInt32($_, 16)}) #富士通PC有線LAN NIC
$header=[byte[]](@(0xFF)*6)
$magicpacket = $header + $macAddress * 16 
$client=new-object System.Net.Sockets.UdpClient
$target=[System.Net.IPAddress]::Parse("192.168.1.255")  #対象セグメントブロードキャストアドレス
$client.Connect($target,2304)
$client.Send($magicPacket,$magicPacket.Length)
$client.Close() 


XX:XX:XX:XX:XX:XXに電源操作したい、端末のMACアドレスを入れます。
後のフレーム作成処理で16回繰り返してくれます。

$target=[System.Net.IPAddress]::Parse("192.168.1.255") 

の部分は相手のIPアドレスはDHCPで随時変わることを想定して、固定化せずにブロードキャストアドレスにしています。

wol.ps1という名前で保存します。
ps1はパワーシェルの拡張子です。

パワーシェルを実行するために、パワーシェルのアプリケーションを立ちあげます。
ここに入力して検索でpowershellと入力するとでてくるので、管理者として実行してください。管理者じゃないとスクリプトが実行できません。

さらに初回実行時は実行ポリシーを変更する必要があります。
Get-ExecutionPolicy (エクセキューション)
と入力しエンターキーを押します。
Restricted

の場合は、スクリプトの実行が制限されているので、許可する必要があります。

(エクセキューション)
> Set-ExecutionPolicy RemoteSigned
と入力しエンターを押します。変更しますか とでたらYを押します。

ポリシーにはいくつか種類がありますが、Restrictedは全てのスクリプトの実行を制限しています。RemoteSignedはローカル上のスクリプトと非―ローカル上の署名のあるスクリプトを実行可能とするモードです。

画像11

これでスクリプトが実行できる状態になったので、先ほど作成したwol.ps1のスクリプトファイルを指定します。
マジックパケットを送出します。目覚めよザメハ!

スリープモードが解除されました。

ちなみに、このマジックパケットはブロードキャストされているので、同一ネットワーク内端末に届き、NICで破棄されます。
同一ネットワーク内に端末Cを用意して、ワイヤシャークでパケットキャプチャーした結果がこちらになります。
オールFのブロードキャストアドレスの後ろは、起動したい端末のMACアドレスが16回続いたフレームが届いていることが分かります。

ワイヤーシャークの使い方については、まさるの勉強部屋のまさるさんが詳しく説明しているので、これも概要欄にリンクを貼っておきます。


---------------------

次にハードウェアwolで遠隔電源起動を試していきます。
色々調べたのですが、無線LANでは難しいようなので起動する端末は有線LANで行います。
BIOSの設定などが追加で必要になります。
まずBIOS設定モードで、Wake on LAN パケットによる電源起動を許可します。この画面がパソコンによって違ったり、そもそも対応していなかったりします。

Windows10の場合、シャットダウンしても先ほど説明したACPIがS4のハイブリットシャットダウンがデフォルトの様で、今回行うハードウェアWoLを実施するためにはS5の電源断の状態にする必要があります。

ウィンドウズマークを右クリックし、電源オプション画面を開きます。
電源とスリープメニューを選択し電源の追加設定を選びます。
電源ボタンの動作を選択するをえらんで、現在利用可能ではない設定を変更しますのリンクをクリックします。
下のシャットダウン設定が有効になるので後続スタートアップを有効にするのチェックを外します。そして変更を保存します。
こうすることでシャットダウン後の状態がS5の電源断になります。

先ほどのスリープ設定をWiFiで行った方は、有線LANのネットワーク設定をWoLを有効にしてMACアドレスを控えてください。
そして、準備が出来たら電源をシャットダウンしておきます。


-------
マジックパケットを送出する側の端末の方の設定は特に変更はありませんが、先ほど無線LANで行った方は、対象のMACアドレスを有線LANのNICに変更する必要があります。

では、マジックパケットを送出します。
復活せよザオリク
見事に遠隔電源起動しました。今は同一ネットワーク内で行いましたが、ネットワーク越えも可能なので自宅から会社、会社内の別セグメントの様なことも可能です。

今回は情報処理安全確保支援士の試験問題をベースに実機演習をしてみました。
はじめは上手くいかなくても、色々ググりながらできた時は、何にもかえがたい喜びがあります。
同時に、多くの実践的な知識が身につきます。
参考にしていただければ幸いです。
最後までご視聴ありがとうございました。

以下、参考にさせて頂いたサイト

◆PowerShell起動プログラム(杜撰ブログ)
http://sloppy-content.blog.jp/archives/9489063.html

◆ワイヤーシャーク実践(まさるの勉強部屋)
https://www.youtube.com/watch?v=RvlnchPUiI4&t=1s

◆PowerShell起動
https://qiita.com/Targityen/items/3d2e0b5b0b7b04963750
https://qiita.com/ponsuke0531/items/4629626a3e84bcd9398f

◆ACPI
https://eizone.info/window10-wake-on-lan/

#WoL #情報処理安全確保支援士 #ネットワークスペシャリスト


この記事が気に入ったらサポートをしてみませんか?