ただ DMZ とはいえ、公開 WEB サーバなどはありませんので、この DMZ ネットワークにアクセスする人は僕しかいません。 となると、僕しかアクセスしない DMZ 内のノート PC を 常に稼働状態にしておく必要がない ことになります (電気代もったいない…)。
そこで、普段はマシンをシャットダウンさせておき、必要なときだけ 「遠隔地から起動させる」 といった仕組みが必要となります。 この遠隔地から PC の電源を ON にする技術が、今回メモする Wake on LAN という技術です。 知っておくとスッゲー便利っす!!
Wake On LAN とは
前述しましたが Wake On LAN は 「PC を遠隔操作で起動させる技術」 で、WOL と略されます。
その仕組みはこんな感じです。
LAN に繋がっている電源が切れた状態の PC に対して、別の PC から “マジックパケット” と呼ばれるパケットを LAN 上に流します。 電源が切れた PC がこのマジックパケットを受信すると PC は独りでに電源を投入し、マシンが稼働状態になります。 マジックパケットを流すときは、大抵は WOL ツールなどを使うことが多いです。
たとえば、この仕組みを “知っている A さん” と “知らない B さん” の2人のエンジニアがいました。 彼らの部署は 1F ですが、急に 3F に配置された電源の落ちた PC をメンテナンスすることになりました。
このとき賢い A さんは、マジックパケットを 1F の PC から 3F の PC に向けて放出し、あとは優雅にスマホでもいじりながらリモートメンテナンスを開始します。 かっこいいですね。。
ところが B さんは WOL の存在を知らないため、電源を投入しに行くためだけに、わざわざ 1F から 3F へダッシュ する羽目になります。 こういうエンジニアは一見忙しそうですが、実は一番忙しくない存在だったりしますよね。 そう、僕のように…。 OTL
↑図1:走れフォレスト、みたいに走る羽目になる…。
ただし WOL を実現させるには、ハードウェアや OS などが WOL に対応していなければなりません。 全ての PC が対応しているとは限らないので、少々注意した方がいいかもしれませんね。
WOL テスト
さっそく WOL を試します。
WOL を使って起動させるマシンは dynabook T772/W5TF という WOL に対応したノート PC です。 OS は Windows 8.1 Pro (x64) が入っており、比較的新しめのマシンです。
WOL を実行する前準備として、BIOS 画面をから “Wake-up On LAN” といった設定を有効にします。 また、ネットワークアダプタの設定も必要です。 NIC プロパティの詳細設定を確認すると “Wake on Magic Packet” みたいな項目がありますので、そちらも有効にします。
これら WOL の項目名はベンダーや OS によって異なると思いますが、大抵はパッと見で判断できます。 もし該当する項目がない場合は、残念ながらそのマシンは WOL に対応していないことになります…。
■ Windows から MagicPacket を送信
Windows OS から MagicPacket を送信するときは、基本的には WOL のフリーソフトを使います。
僕が使っている WOL ツールは “Wake up On Lan tool” というフリーソフトですが、WOL ツールならどれでも大丈夫です。 Vector あたりから一番人気のツールを落とすのもよし、プログラミングができる方なら自分で作ってもよし。 MagicPacket が送信できるなら、どれを選んでも大丈夫です。
WOL ツールの使い方に関しては、ツールの readme などを読んで下さいまし(手抜きw)。
■ RTX1100 から MagicPacket を送信
ヤマハルータ RTX シリーズからも MagicPacket の送信ができます。
冒頭に書きましたプチ DMZ 領域に配置したノート PC は、この方法を使って WOL します。 RTX から WOL するには wol コマンド を使います。 本メモでは明記しない限り、この RTX から MagicPacket を送出して検証をしています。
EtherType は後述しますが、UDP は4層なので構造的には IP アドレスの指定が可能です。 図9 の MagicPacket は RTX1100 から生成されたものですが、こちらには L3 と L4 のヘッダーフィールドが存在しますので、イメージ的にはそこに WOL 対象の PC の IP アドレスを入れてあげればいいのです。
RTX1100 では、以下のコマンドからそれが可能です。
↓ 実行コマンド
wol send lan1 00:00:00:00:00:00 192.168.1.1 udp 12345
↑図14:IP アドレスを指定した MagicPacket
上図には MAC アドレス、IP アドレス、ポート番号を各色四角で囲っていますが、見るからにこれは完全なユニキャストですよね。 この MagicPacket でしたら、経由するルータにルーティングを書いてあげるだけで WOL は成立するはずです。
試しに以下のような環境で試したところ、無事に WOL してくれました。
図15では、192.168.0.1 の PC から 192.168.1.1 の PC へ向けて MagicPacket を送信して WOL させています。 このとき 192.168.0.1 では Windows の WOL ツール (Wake up On Lan tool) を使って MagicPacket を生成し、宛先 IP アドレスには 「192.168.1.1/"32"」 を指定しました。
また PC 間には2台の RTX1100 を配置しています。 これらのルータにはインターフェースアドレスとルーティングのみ設定しています (ファイアウォールは前回ですが)。
↑図15:ユニキャスト送信だと MagicPacket はあっけなく通る
ユニキャスト送信に対応した WOL ツールであれば、ルータ越えはあっさりと行けそうですね。
■ MagicPacket のブロードキャスト送信
次に WOL 本来の通信方式となるブロードキャスト送信を試します。
環境は図15と同じものを使っていますが、今回はユニキャスト送信ではなくブロードキャスト送信です。 そのため宛先 IP アドレスには 「192.168.1.255/"24"」 を指定しています。 ここではブロードキャストアドレスを指定しましたが、/24 を指定しているからか、ホストアドレスを適当に指定しても大丈夫でした。
するとその結果、ついに WOL のブロードキャスト通信 ルータ越えに成功しました!!! (^ω^*)
↓図15 でいう右側のルータに設定した
ip lan1 wol relay broadcast
ついでにもう一つメモを。
RTX1100 では directed broadcast の転送に [ wol relay ] コマンドを使いましたが、[ ip filter ] コマンドからも directed broadcast の転送が可能のようです。 [ no ip lan1 wol relay ] コマンドを処理したあと、この転送許可を設定したことで WOL に成功したことを確認しました。
↓directed broadcast の転送許可
ip filter directed-broadcast off
これら [ wol relay ] コマンドと [ ip filter ] コマンドは、NAT と同じように 適用順位 がありました。 nat descriptor では 「NAT → ip filter」 といった適用の順番でしたが、こちらも同じように 「WOL → ip filter」 という順番になるようです。 MagicPacket のフィルタリングの方が先なんですね。
↑図19:directed broadcast フィルタリング適用の順番
ということは。。。
↓ こんなガッツリした ip filter を設定しても……
ip filter directed-broadcast 1 999 ip filter 1 pass 192.168.0.1/32 192.168.1.0/24 udp * 12345 ip filter 999 reject * * * * *