とりあえずブログ作ってみた、的なブログ

このブログの99.99%は「与太話」でできています。

Fortigateを設定してみた(その4・VPNでWOL!)

【今回のお話は】
「俺たちの戦いはこれからだ!」的な話。別名「第一部完(多分第二部はないよ)」みたいな話。


さて、Fortigateを使った我が家のインターネット環境の整備もあとわずか。残っているのはVPN経由でWOL(Wake On LAN)を実行することのみとなった。

WOLは「マジック・パケット」と呼ばれる特殊なイーサネット・フレームをネットワークに送信することによって、待機状態のパソコンをリモートで起動する仕組み(待機状態の家電製品のスイッチをリモコンでオンにするようなもの)だが、ここで注目すべきはWOLの信号は「イーサネット・フレーム」つまり「レイヤ2(L2)」の通信ということだ(余談だが、レイヤ2レベルのデータは「フレーム」と呼ぶのに、何故かWOLでは「パケット」と呼んでいる。通常、「パケット」はレイヤ3のデータの呼び名なのだが)。ここではOSI7階層とかマジック・パケットの詳しい説明は割愛するが、FortigateのVPN(IPSec VPNSSL-VPN)はいずれも「レイヤ3(L3)」以上の階層で通信する仕組みになっているので、レイヤ2の通信をそのまま通すことはできない。この辺りの説明は長くなるので省略するが、ここで言いたいことは「マジック・パケットはそのままではVPNを通れない」ということだ。

ちなみに、以前使っていたバッファローブロードバンドルータがどのようにWOLを実現していたかと言うと、仕組みは実に単純で、ルータのLAN側ポート側にルータからマジック・パケットを送信するだけ、というものである。これなら単にLAN上の装置が同一ネットワークのPCに対してイーサネット・フレームを送信するだけなので、何の問題もなくWOLが実現できるという訳だ。

話を戻すと、本来L2で実現しているWOLを、L3で動作しているVPN(ここでは「≒ルータ」と読み替えても差し支えない)」を通して如何に利用可能にするか、これが今回の話の主題になる。

ということで、早速「Wake On LAN VPN」とか「Wake On LAN レイヤ3」等のキーワードでググってみるが、なかなかこれといった情報が見当たらない。それでも情報をかき集めていくと、
 VPNやルータをまたいだWOLは可能である
 ・そのためには、IPアドレスによる宛先指定が可能なWOLのソフトが必要
ということが分かった。

とりあえず、「IPアドレスによる宛先指定が可能なWOL」ソフトを探してみる。
まずはAndroid端末(スマホタブレット)から。
「Playストア」で「Wake On Lan」で検索してみてシンプルで使えそうなソフトとして、「Wake On Lan」というそのままズバリな名前のアプリがあったのでインストールと設定を行ってみた。

イメージ 1

アプリ起動後、WOLで起動させたいPCの情報を登録する。登録画面は下図のような感じ。
イメージ 2

ここで最低限必要な設定としては、
 (・ニックネーム←これはアプリ上でデバイスを識別するための名前なので何でもいい)
 ・デバイス(宛先PC)のIPアドレス
 ・デバイスMACアドレス
 ・デバイスが存在するネットワークのブロードキャストアドレス
だが、MACアドレスとブロードキャストアドレスはVPN経由の場合は設定しなくても行けそうな気がする。これらは例えばWi-Fi接続などでL2レベルでLANに接続されている場合にのみ使われるのではないかと思うが、一応設定しておく。

設定が終わると、下図のようにデバイス一覧に設定したデバイスが追加されるので、これをタップすることでマジック・パケットの送出が行われる。
イメージ 3

ということで、早速試してみる。
先にAndroid端末をVPNに接続しておいてから対象PCをシャットダウンして、電源が落ちた段階で「Wake On Lan」アプリの該当ホストをタップしてみると・・・対象PCから「ピッ」という音が聞こえて起動が始まった。よし、上手くいった!

と、ここで話が終わればめでたしめでたしなのだが、実は話はまだ終わっていなかった。
翌日、外出先からVPN経由でWOLを実行して帰宅すると、PCは沈黙したままだった。つまり、WOLが上手くいっていない。そこでもう一度PCの目の前でWOLを試してみると、やはりPCはウンともスンとも言わない。ここで接続をWi-Fiに切り替えてWOLを実行すると、普通にPCが起動した。ということは、アプリの問題でもPCのWOL機能の問題でもない。何故だ?「坊や(以下、自主規制)」はさておき、理由を考える。

 ・IPを直接指定したとしても、そもそもWOLはL2レベルの通信、つまりPCのLANアダプタのMACアドレス
  宛先としてマジック・パケットを送信する。
 ・そして、そもそも起動していないPCにはまだIPアドレスが割り振られていないので、IPアドレス宛ての
  通信が出来るはずがない。
 ・さらに、PCのシャットダウン直後はWOLが上手くいっていたのに、時間を置くとWOLができなくなる

これらをつなぎ合わせていくと、導き出される結論は-Fortigateの「ARPテーブル(ARPキャッシュ)」しかない。

ARPテーブルというのは、MACアドレスIPアドレスを紐付ける対応表のことで、通常のルータでは一定時間その対応関係を保持している。これがARPキャッシュ。つまり、PCシャットダウン直後にWOLが上手くいっていたのは、FortigateのARPキャッシュに「目的のPCのIPアドレス→そのPCのMACアドレス」の対応情報がまだ残っていて、IPアドレス宛のパケットを受信したFortigateはARPキャッシュからそのパケットを「投げる」先のMACアドレスが分かっていたためで、時間の経過でARPキャッシュから対応情報が消えれば、Fortigateは受け取ったIPアドレスに対応するMACアドレスが分からず、どこにパケットを投げたらいいか分からなくなる。そう考えれば全ての辻褄が合う。

そうと分かれば話は簡単。ARPキャッシュが「動的に」情報を書き換えるのなら、ARPテーブルに「静的に」情報を登録すればいい。

ということで、FortigateのCLIからコマンドを入力する(下記の「←」以降は注釈なので入力しない)。
  config system arp-table
    edit 1  ←「1」はエントリー番号なので適宜読み替えが必要
    set interface "internal1"  ←対象PCが存在するインタフェース
    set ip 192.168.1.1  ←対象PCのIPアドレス
    set mac 00:11:22:33:44:55  ←対象PCのMACアドレス
  end

確認のため、「get system arp-table」と入力してみる。
  == [ 1 ]
  id: 1   interface: internal1    ip: 192.168.1.1   mac: 00:11:22:33:44:55
  =
と表示されていれば、ARPテーブルに情報が正しく登録されている。

推測が正しいことを確認するために、シャットダウンから半日以上経過した後にVPN経由でWOLを実行してみると、今度は問題なくPCが起動してきた。

若干のトラブルはあったものの、これで外出先からのWOLが以前に比べて簡単になった。何しろ以前はVPNに接続してからブロードバンドルータにログインしてブラウザ立ち上げてWOLのページを呼び出して対象PCのアイコンをクリックする、という手順を踏まなければならなかったのが、今ではVPNへの接続を含めてタップ数回で済むようになったのだから。

なお、モバイルPCの方も、IPアドレスで宛先を指定できるタイプのWOLソフトを使えば、VPN経由でWOLが出来るのは言うまでもない。

ここまで紆余曲折あったものの、ようやく当初の目的をすべて果たすことが出来た。
今回はVPNの刷新が主目的なのでFortigateの機能を十全に使いこなしているとは言いがたいが、それでもPPTPの頃に比べると格段に使い勝手は良くなったと思うし、値段に見合った価値はあったと思っている。

おしまい。