2015年2月5日木曜日

スマホで自宅へVPN

VPN ルータ RTX1100 を使って、スマホから自宅へ VPN 接続する実験をしてみました。VPN のプロトコルには、種々ありますが比較的新しい L2TP/IPsec を試しました。
我が家のインターネット接続は、au ひかり でプロバイダとホームゲートウェイ間は PPPoE 接続。ホームゲートウェイには動的グローバル IP が割り振られています。ただ、”動的” とは言っても IP アドレスの変動は少ないようです。
VPN ルータは、インターネットに直接接続したいところですが、ホームゲートウェイに ひかり電話機能がついている都合上、ホームゲートウェイの LAN 側に接続せざるを得ませんでした。


ホームゲートウェイの設定
VPNルータの応用例を見ると、インターネットに直接接続することを前提にされている場合がほとんどです。今回の場合、インターネット → ホームゲートウェイ → VPNルータ という二重ルータ構成になってしまいます。このためインターネット側からの接続を可能とするため、IPsec で必要なポートマッピング設定(静的 IP マスカレード)を行います。

・プロトコル ESP: LAN側ホスト 192.168.0.240
・プロトコルUDP(ポート番号 500): LAN側ホスト 192.168.0.240
・プロトコルUDP(ポート番号 4500): LAN側ホスト 192.168.0.240

また、ホームゲートウェイで IP アドレス変換されてしまうので VPN パススルー機能を有効化しておきます。


VPNルータの設定
ここではVPNトンネルを3本用意し、5名分のユーザ登録をしてみました。


上記と同じ内容のテキスト文は次の通りです。

ip route default gateway 192.168.0.1

ip lan1 address 192.168.0.240/24
ip lan1 proxyarp on

pp select anonymous
pp bind tunnel1-tunnel3
pp auth request mschap-v2
pp auth username user1 password1
pp auth username user2 password2
pp auth username user3 password3
pp auth username user4 password4
pp auth username user5 password5
ppp ipcp ipaddress on
ppp ipcp msext on
ppp ccp type stac
ppp ipv6cp use off
ip pp remote address pool 192.168.0.200-192.168.0.210
ip pp mtu 1258
ip pp tcp mss limit auto
pp enable anonymous

tunnel select 1
tunnel encapsulation l2tp
ipsec tunnel 101
ipsec sa policy 101 1 esp aes-cbc sha-hmac
ipsec ike keepalive use 1 off
ipsec ike local address 1 192.168.0.240
ipsec ike nat-traversal 1 on
ipsec ike pre-shared-key 1 text himitsu
ipsec ike remote address 1 any
l2tp tunnel disconnect time off
l2tp keepalive use on 10 3
l2tp keepalive log on
l2tp syslog on
ip tunnel tcp mss limit auto
tunnel enable 1

tunnel select 2
tunnel encapsulation l2tp
ipsec tunnel 102
ipsec sa policy 102 2 esp aes-cbc sha-hmac
ipsec ike keepalive use 2 off
ipsec ike local address 1 192.168.0.240
ipsec ike nat-traversal 2 on
ipsec ike pre-shared-key 2 text himitsu
ipsec ike remote address 2 any
l2tp tunnel disconnect time off
l2tp keepalive use on 10 3
l2tp keepalive log on
l2tp syslog on
ip tunnel tcp mss limit auto
tunnel enable 2

tunnel select 3
tunnel encapsulation l2tp
ipsec tunnel 103
ipsec sa policy 103 3 esp aes-cbc sha-hmac
ipsec ike keepalive use 3 off
ipsec ike local address 1 192.168.0.240
ipsec ike nat-traversal 3 on
ipsec ike pre-shared-key 3 text himitsu
ipsec ike remote address 3 any
l2tp tunnel disconnect time off
l2tp keepalive use on 10 3
l2tp keepalive log on
l2tp syslog on
ip tunnel tcp mss limit auto
tunnel enable 3

ipsec transport 1 101 udp 1701
ipsec transport 2 102 udp 1701
ipsec transport 3 103 udp 1701
ipsec auto refresh on

dns server 192.168.0.1
dns private address spoof on
l2tp service on
save


スマホの設定
ヤマハのWebに設定方法が記載されています。

 ヤマハ: アンドロイドからリモートアクセスする
 ヤマハ: iOSからリモートアクセスする

Android 4.0 では微妙に画面が違いました。
システム設定 → (ワイヤレスとネットワーク)その他の設定 → VPNネットワーク → 基本VPN → VPNネットワークを追加

・VPN名: (適当に名前をつける)
・タイプ: L2TP/IPSec PSK
・サーバーのアドレス: グローバルIPアドレス または FQDN
・L2TP保護: (未使用)
・IPSec ID: (未使用)
・IPSec事前共有鍵: (VPNルータに設定した文字列)


VPN接続で速度は?
スピードテストをやってみました。3G 回線で1.69Mbps のところ、VPN接続で自宅経由では976kbpsに低下しました。こんなものなんですかね?もっと遅くなるかと思っていました。

2015.02.07 追記
平均速度でみると、1.41Mbps が VPN 経由では 615kbps になってます。理論値はわかりませんが感覚的にはしっくりときます。


ところで Android 4.0でのスクリーンショットは、電源ボタンとボリュームキー(下)を同時長押しすると、カメラのシャッター音が出て取得できました。





WindowsでVPN接続
実家の Windows7 から自宅に VPN 接続してみました。実家のルータは、特段の設定変更なしに接続できました。
コントロールパネル → ネットワークとインターネット → ネットワークと共有センター → 新しい接続またはネットワークのセットアップ → 職場に接続します → インターネット接続(VPN)を使用します → 下図の通り設定 して次へ

インターネットアドレス: 接続先のFQDNかIPアドレス
接続先の名前: 適宜
今は接続しない にチェック


次へ をクリック。
ユーザ名、パスワード: VPNルータで設定したもの
ドメイン: (空白)

作成をクリック後、閉じる。(「今すぐ接続します」を選ばないこと)


コントロールパネル → ネットワークと共有センター → アダプターの設定の変更
作成したVPN接続をクリック → プロパティ→ セキュリティ タブ

・VPNの種類 で L2TP/IPSecを選ぶ
・詳細設定 で 認証に事前共有キーを使う を選び VPNルータに設定した事前共有キーをセット



次に、NATトラバーサル機能を有効にするため、Windowsのレジストリを変更します
Windows Vista や 7 の場合には "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PolicyAgent" 

に、"AssumeUDPEncapsulationContextOnSendRule" という名前の "REG_DWORD" を作成して、値には "2" を設定します。

値の意味は次の通りです。
 0: NAT トラバーサルを無効にします。何も指定しなかった場合はこれが選択されているものとします。
 1: NAT トラバーサルを有効にします。片一方が NAT の背後の場合に設定するそうです。
 2: NAT トラバーサルを有効にします。サーバとクライアントの両方が NAT の背後にある場合に使用するそうです。

これらから、適切な値を設定して Windows を再起動すれば、設定した動作モードが有効になります。





Windows で radikoを聞いてみる
実家から自宅に VPN 接続して radiko を聞いてみました。すると、"MIYAGI JAPAN" と表示されます。自宅では山形なのに宮城と誤認識されてますので、まさに自宅に VPN 接続されていることを確認出来ました。



Android でブラウザを使って radiko を聞いてみる
ブラウザで radiko にアクセスすると、アプリのダウンロードへ誘導されてしまいます。そこで Firefox ブラウザでPCサイトモードでアクセスしてみました。しかし、Flash がないので肝心な再生ボタンが表示されません。そこで Play ストアで Flash を検索しましたが出てきません。そういえばスマホ向け Flash はサポート終了していたんでしたっけ。
それでも Adobe のサイトに Flash Player アーカイブ版のインストール方法が掲載されています。こうしてようやく radiko を使うことが出来ました。


参考資料
ヤマハRTX1200の設定例:複数のL2TPクライアント(アドレス不定)の接続を受け付ける場合
はむのブログ Ver.4.8.6 ~= Irregular childRTX1100でF-05d→ひかり電話のVPN組んでみた
Aterm.jp: VPNパススルー機能
アライドテレシス: ダイナミックDNSを利用した動的IPアドレスを持ったルーター同士のIPsec VPN
マイナビニュース: ヤマハルータでつくるインターネットVPN
インターネットイニシアティブ SEIL: Windows 7のVPN(L2TP/IPsec)設定手順

0 件のコメント:

コメントを投稿