WAN側から自宅のパソコンの電源を入れたい

Magic Packetという特殊なデータ構造を持つパケットをNICが受信するとパソコンの電源を入れるように働きます。私の使っているパソコンはNICとマザーボードのWOLコネクタの間をWOLケーブルで結んで電源オンを指令するタイプですが、PCIバスのPME#という信号でWakeUpするのが最近の主流のようです。

マジックパケットは電源を入れたいパソコンのMACアドレスが16回連続しているデータグラムを持っているイーサネットフレームです。TCP/IPプロトコルを使ってこのようなパケットを電源を入れたいパソコンのNICに届けるためにはIPブロードキャストとして送出する必要があります。なぜなら、電源が入っていないパソコンのMACアドレスは送出側のARPテーブルから時間が経てば消えてしまうからです。

家庭で使っているルータによってはWAN側にやってきたパケットをLAN側の特定のIPアドレス宛に転送する機能を持っているものがあります。この機能を持っているルータで転送先にブロードキャストアドレスを指定できるものを持っていれば幸運です。ルータによってはGUI画面からブロードキャストアドレスを設定できなくてもtelnetやシリアルコンソールからだと設定できるものがあるようです。また、見た目は設定できても、実際にブロードキャストされないものもあるようです。

私の家ではBLR3-TX4Lというルータを使っていました。これはtelnetで転送先をブロードキャストアドレスに設定でき、便利でした。でも、ファームウエアをアップデートするときに壊してしまい、修理をお願いしたら、ご親切にも、新機種の新品に交換してくれました。嬉しかったんですが、新機種のBBR-4MGはブロードキャストアドレスに転送できませんでした。

そこで、BLR3-TX4Lを買う前に作って、便利に使っていたWOLリピータを引っ張り出して使う羽目になりました。WOLリピータは自分宛にユニキャストで届いたUDPパケットをUDPデータグラムの内容を変えずに、マジックパケットの特徴を持ったままブロードキャストする基板です。私が勝手に命名しました。

WOLリピータを作る

秋月電子商会で売っているネットワークチップつきのH8マイコン基板を買いました。MITSUIWAボードというものです。みついわさん、面白いものを作っていただいて、ありがとうございます。

ボードを組み立てたら、やらなくてはならない改造があります。ネットワークチップとH8マイコンの間にウエイトをコントロールするジャンパー線を一本飛ばす必要があります。もしかしたら、新しく購入するときには修正されているかも知れません。この辺の事情はみついわさんのメーリングリストのログを取り寄せて調べてみてください。

ボードに付属しているH8/OSというOSを使うと自分で書かなければならない部分はほんの少しです。たったこれだけです。

このプログラムは、いろいろ楽しんだ結果、安定に動くようになりました。結局、NE2000互換のネットワークチップのデータシートを読み、ディバイスドライバの部分は自分で書きました。H8/OSのソースを変更した部分だけをここに掲載しておきます。楽しんだ履歴はメーリングリストのログにあります。

WOLリピータを使う

使い方は簡単です。ルータを設定してWAN側の特定のポートに来たUDPパケットをLAN側に設置したWOLリピータのIPアドレスに転送するだけです。WOLリピータがこのUDPパケットを受信してブロードキャストしてくれます。