VPNで自宅パソコンをリモート起動

この記事は2014年1月に作成しました。
ずいぶん時間が経っていますが、VPNを使ってリモート起動させる設定としては、現在でも同じだと思います。

2020年9月23日

WiMAX経由のVPNでMeMO Pad HD7から自宅のWin8.1をリモートデスクトップしてやろうと思ったが、よく考えるとRDPを実現する前に遠隔から自宅のパソコンを起動出来るようにしないといけない。というわけで、その備忘録

リモート起動のためには、マジックパケットを送り込む

タブレットのMeMO Pad HD7やスマホのXperiaから自宅のルーターへVPN接続できているので、その先にあるノートパソコンをリモート起動させてやらねばならない。常時電源を入れておいてもいいのだが、ノートパソコンとは言え電気代がもったいない。

パソコンをネットワーク経由で起動させるにはWOL(Wake ON Lan)というツールを使用する。パターンとしては、大きく分けて以下の3通りがあると思われる。

  1. 同一セグメントのLAN内でPCを起動させる
  2. ルーターなどで区切られた外部から内部のPCを起動させる
  3. VPNで接続された外部から内部のPCを起動させる

1に関しては、WOLに対応したパソコンであれば、何の問題もなく起動できるので、特筆することはないだろう。

※WOL : Wake On Lan の略。中身は難しいので知らなくてもOK。

2と3に関しては、間にルーターが挟まっているため、ネットワークの知識がないと少々やっかいなことになる。
リモート起動には、MACアドレスを含んだパケットをブロードキャスト・アドレスに送信する必要があるが、通信経路にルーターを挟むと、とたんに上手く行かなくなるのである。

WOLに使用するパケットは、マジックパケットと呼ばれるものを利用するのが一般的だ。
WOLツールから送信されると、自分の所属しているネットワークにあるパソコンすべてに送りつけられる。(これをブロードキャストという)

マジックパケットを受け取ったパソコンは、そこに含まれているMACアドレスと自分のMACアドレスが一致していれば、電源を入れる。というとても単純な仕組みだ。

しかし、世にでまわっているルーターのほとんどは、セキュリティの観点から、外部から来るブロードキャストを遮断するように出来ている。

従って、ルーターを越えてリモート起動させたいパソコンのあるLAN内にマジックパケットを送り込めるように設定してやる必要がある。

今回利用しているルーターはヤマハさんのRT107eというルーター。(既に生産終了しているが、基本的なところは、現行の製品でも変わりはない。)

これを使っての設定を以下のようにした。

起動対象となるパソコンの設定

WOLによるリモート起動を有効にするために、BIOSの設定とOSからネットワークカードの設定をする必要がある。

BIOSの設定

BIOSでの設定方法は、ものによって様々なのだが、概ねよく似た項目を有効にしてやることでOK。
ちなみに、今回利用するノートパソコンはDELLのVostro3550という機種だが、それらしき設定が見当たらないというか、何もしないでもWOLで起動できる状態になっていた。

というわけで、参考にデスクトップのサンプルを掲載。

BIOS起動

パソコンが起動するときにBIOSを呼び出す。ほとんどの場合、メーカーロゴが出るときに「F2」や「F10」を押しつづけると可能。
HPの場合は「F10」を押して、「セットアップを開始中...」と表示された離す。

bios_main

このBIOSの場合、「パワー」という項目にWOLの設定がある。

bios-wol

「無効」になっていたら、「有効」にする。そして、必ず保存して終了し、OSを起動させる。

OSでの設定

ネットワークカードの設定で、WOLを受け付けるようにする。

adapter

コントロールパネルを開き、画面左うえにある「アダプターの設定の変更」をクリック

WOL起動させるネットワーク・アダプターを右クリックで「プロパティ」を表示する。

「構成」をクリックする。

プロパティ内にあるWOLに関する項目を探す。ここでは、「Wake on 設定」という項目にある「Wake on Magic Packet」を選択。

以上で、起動対象となるパソコンの設定は完了。

アンドロイドの設定

リモート端末のアンドロイドにWOLツールをインストールする。

今回使用したのは、「WoL Wake On Lan Wan」という無料アプリ。
設定は以下の通り。

Google Playにアクセスして、Wol Wake On Lan Wanをインストールする。

「Add New」をタップして、新規作成画面を表示する。
(画面では、すでにVostro3550の設定ができあがっている)

  1. Name:適当にわかりやすい名前をいれる
  2. MAC:リモート起動させたいPCのMACアドレス
  3. IPorDomain:リモート起動させたいPCのIPアドレス
  4. Port:今回はVPNを使って送信するので適当で良い。
  5. Send as Broadcast:3にブロードキャストアドレス(ex.192.168.0.255)を入れていなければチェック。
  6. 残りはそのまま

3のアドレスは、今回の場合、ブロードキャストアドレス(ex.192.168.0.255)でも、対象PCのIPアドレスでもどちらでもよい。WAN側からVPNを使わずに送信する場合はDDNSのFQDNを入力。

最後にSaveをタップして保存

以上で、Android側のWol設定は終了。

ルーターの設定

ここからが本題だが、ネットで調べていると基本的には、外部から直接ルーターにアクセスして、パケットを通過させるパターンがほとんど。(上で書いた2の環境)。
その場合の設定は概ね以下の通り。

  1. ブロードキャストアドレスを任意のポートで通すフィルタを作る
  2. IPマスカレードにブロードキャストアドレスを任意のポートに流す設定を入れる
  3. WAN側のINフィルタに1を適応する
  4. ip filter directed-broadcast を off にする

4のdirected-broadcastは、ヤマハルーターにはじめから設定されているブロードキャストを破棄するフィルタで、各インターフェースに共通で適応される。
これをoffにするとWANから来るブロードキャストを全面許可ということになるので、ヤマハさんの推奨ではonとなっている。

確かに上記の設定では、送信元のIPが固定ではないため、絞り込みをかけるには、指定ポートしか条件がなく、セキュリティ面で不安が残る。

今回は、セキュアなVPNでつながれた端末からのみブロードキャストを受け付けるようにしたいので、いろいろ考えたが、以下の方法でためしてみた。

directed-broadcastはonのままにする。問題は、このフィルタの効力がどこまで及ぶのかだ。FAQには、「パケットフィルタによる防御と実現出来る内容は同じ」とある。ということは、挙動はパケットフィルタと同じということか。しかし、各インターフェースに共通の設定になるらしい。ということは、tunnelインターフェースにも自動的に適応されることになり、tunnelを通ってきたブロードキャストも破棄されてしまう。となると、フィルタの優先順位が手動設定より上か下かということになる。もし、下ならこちらの思惑どおりの挙動になってくれるので、試してみる価値はありそうだ。

ということで、実際にやってみた。(失敗例です。)

  1. ip filter directed-broadcast on
  2. ip filter [任意のフィルタ番号] pass [VPNで割り当てたIP] [ブロードキャストアドレス] udp * [任意のポート番号]
  3. tunnel select [トンネル番号]
    ip tunnel secure filter in [2のフィルタ番号]
    no tunnel select [トンネル番号]
  4. ip lan1 arp static [リモートされるPCのIPアドレス] [リモートされるPCのMACアドレス]
  5. save
  1. ip filter directed-broadcastをonにする
  2. VPNで接続された端末のIPから来たブロードキャストを通すパケットフィルタを作成する
  3. tunnelに2のフィルタを適応する
  4. arpテーブルに起動対象のパソコンのデータをstaticで書き込む
  5. 保存

思惑通りなら、これでうまくいくはず。・・・だめでした。

ログをみると見事に「Rejected directed broadcast:UDP ・・・・・」と表示されている。

どうやら、各インターフェースに最優先で適応されているようだ。
マジックパケットを放り込むには、directed-broadcastをoffにするしかないようだ。
しかし、コマンドリファレンスを見ると、単にoffするだけではなくフィルターの適応というのが設定できるらしい。

そこで、次の様に設定してみた。(成功例です)

  1. tunnel select [tunnel番号]
  2. no ip tunnel secure filter in [さっき作ったフィルタ番号](要らない設定の削除)
  3. no tunnel select [tunnel番号]
  4. ip filter directed-broadcast filter [さっき作ったフィルタの番号]

通った・・・

特定のローカルIPアドレスから特定のポートに送られたブロードキャストパケットなら通すという状態。
気がかりなことは、この穴を開けた状態がWANに接続されたインターフェースにも適応されていて、プライベートアドレスからのINを拒否するフィルターよりも先に適応されていること。
off設定に比べると随分小さな穴になったことは確かだが、ベストな状態とは言えない。
しかし、現状これ以上に良い方法は見つからない。

いろいろ調べてみると、どうやらRT107eではこれが限界のようだ。SRT-100以降になると「wol relay」というのが使えるらしい。
なんとこれなら、tunnelを通ってきたブロードキャストだけを通すことが可能なのだとか。

参考URL:YAMAHAルーター RTX810のL2TP/IPsecをWOLで貫くに至るいきさつ

起動確認

セキュリティ面で少々不安を残す形となったが、ともかくマジックパケットを遠隔から自宅LAN内に放り込むことができた。
問題なくノートパソコンがリモート起動できているか、PINGを打ってみると応答あり!というわけで、ようやく次回は外出先からのリモートデスクトップに挑戦。

失敗事例

こんな失敗をするやつはわたしぐらいだと思う。が、万が一同じ失敗をするひとがいてはいけないので掲載しておく。

上記のルーター設定、WOLツールの設定、VPNの状態、すべてが問題ないはずなのにリモート起動してくれない・・・。
そんな状況に陥ってしまった。何度も設定を確認し、再設定しても起動できない。

悩みに悩んで、丸一日。
いつもどおり帰宅し、デスクトップのモニターの電源をいれるため、電源タップの元スイッチをON。デスクトップでいろいろ調べながら、再度スマホからWOLでパケット送信。

「ウィーーーーーン」

「えっ?起動した!」・・・なんのことはない、ノートパソコンの電源も同じタップにつながっていた。
主電源が入っていなかったので、ネットワークカードが待機状態になっていなかっただけだった。。。

ご参考まで・・・。

おすすめの記事