前回発覚した外からWOL(Wake-on-LAN)でNASサーバーを起動できない問題ですが、無事に解決することができました。
今回の問題をあらためて整理すると
- WOLでPCを起動するにはブロードキャストアドレス宛にMagicPacketを送る必要がる。PCが起動してないということは当然IPも割り振られていない状態なので特定のIPを指定してMagicPacketは送ることはできない。よってブロードキャストアドレス宛(LAN内の全てのデバイス)にMagicPacketを送らないとダメ。
- 同じLANに参加しているMac book airからWOLでNASを起動することはできる。Mac book airはブロードキャストアドレス宛にMagicPacket送っているので何の問題も無い
- 携帯の4G回線等、LANの外からWOLを利用する場合、ルーターを経由する必要がある。ルーターでポートフォワーディングの設定を行い、特定のポートにアクセスがあったらIP XXXに転送するみたいな設定をするのだが、ルーター(AirMac)ではその転送する宛先をブロードキャストアドレス宛に設定できない。基本的にブロードキャストはネットワークに負荷がかかる処理なので、セキュリティ的にこの振る舞いは妥当と言うこともできる。
そして、この問題を解決する方法は2つです。
- ブロードキャストアドレス宛へのポートフォワーディングをサポートしているルーターを購入する。
- LAN内に常時起動させておくマシンを用意して、そのマシンからブロードキャストアドレス宛にMagicPacketを送ってもらう。
1の方法はそこそこハイスペックな安定したルーターが必要で、予算的に厳しいと判断し今回は2の方法を選択しました。
次に問題になるのは常時起動しておくマシンの選定です。今回の用途では単にパケットの送受信ができれば良いのでハイスペックである必要は全くありません。求められるのは低価格、コンパクト、低消費電力、プログラミングの容易性、の4つぐらいのものです。当初、最近流行ってるRaspberry Piにしようと思ったのですが、調べてみると本体以外にケースやらSDカードやら初期導入コストが結構かかるようで合計で1万円弱ってところでしょうか。技術的には興味深いのですがちょっと高い気がします。結局いろいろ悩んだはてに選択したのはスティックタイプのAndroid端末です。Andoer MK808B プラス HD
お値段4840円ぽっきりです。Androidなので開発するのも簡単です。
数あるスティックタイプのAndroid端末からこれを選んだ理由は、HDMI端子が出っ張ってないからです。今回の用途では電源だけ常に供給してディスプレイには繋がないのでHDMI端子の出っ張りは邪魔なだけです。
この端末を使ってみて気づいたことは
- GooglePlayが標準で使える
- USBマウスとUSBキーボードで操作可能なのでスマホ向けのアプリも普通に使用可能
- PCと接続してもデバッグすることはできない。Mac book airと接続しても電源すら入らなかった。。。
- 野良apkはメール経由でインストール可能
- 本体は結構発熱する。
発熱はちょっと気になりますが、今回の用途にはうってつけの端末ですねこれは。サーバーアプリはRestletを使って6時間ぐらいでベータ版が完成しました。
HTTPサーバーとして動作してるので、サーバーに対して以下の様なリクエストを投げると、MagicPacketを指定したブロードキャストアドレス宛に投げてくれます。このHTTPリクエストを投げられるのであれば、クライアントはWindows、Android、iOSでもなんでもOKです。
# 宛先はAirMacのグローバルアドレス。9998ポートはポートフォワーディングの設定でAndoer MK808Bにマッピング curl -v -X POST http://xxx.xxx.xxx.xxx:9998/wol \ -d '{ "target_ip":"10.0.1.255", # ブロードキャストアドレス "target_port_no":"7", # WOLはUDP 7か9らしいです。 "mac_address":"XX:XX:XX:XX:XX:XX" # NASのマックアドレス }'
上記リクエストを投げるクライアント用のAndroidアプリを開発したら、サーバーアプリとセットでGooglePlayに公開しようかと考えています。あと時間があったらこれを買って外出先から家のエアコンを操作できるようにしたいです。S.M.A.R.TでHDDの温度の異常を検知したら、外からエアコンの起動するみたいな
0 件のコメント:
コメントを投稿