L2TP/IPsecサーバを構築して自宅サーバにアクセスする。

外に出ている時に、自宅の備忘録を記録しているwikiにアクセスしたくなったりします。
AndroidはVPNクライアント機能を持っているので、VPNサーバを構築して、
自宅サーバにアクセスできるようにしましょう。

今回はSoftEhter VPN Server Linux版を使います。
以下のURLで「SoftEther VPN Server」⇒「Linux」⇒「Intel x64 / AMD64(64bit)」
もしくは「Intel x86 (64bit)」を選択して、適当にRTM版をダウンロードしましょう。
http://www.softether-download.com/ja.aspx?product=softether
(ちなみに私はsoftether-vpnserver-v4.04-9412-rtm-2014.01.15-linux-x64-64bit.tar.gzをダウンロードしました。)

/optあたりにインストールしましょう。ライセンスへの同意が求められるので、内容を確認して同意していきます。
※gccが入っていないとmakeできませんので、先にインストールしておきましょう。
[root@vpn opt]# tar xvzf softether-vpnserver-v4.04-9412-rtm-2014.01.15-linux-x64-64bit.tar.gz
[root@vpn opt]# cd vpnserver
[root@vpn vpnserver]# make

makeに成功したら、まずはvpnserverのサービスを起動させ、設定を行っていきます。
[root@vpn vpnserver]# ./vpnserver start
[root@vpn vpnserver]# ./vpncmd
vpncmd コマンド - SoftEther VPN コマンドライン管理ユーティリティ
Version 4.04 Build 9412  (Japanese)
Compiled 2014/01/15 17:48:18 by yagi at pc25
Copyright (c) SoftEther VPN Project. All Rights Reserved.
 
vpncmd プログラムを使って以下のことができます。
 
1. VPN Server または VPN Bridge の管理
2. VPN Client の管理
3. VPN Tools コマンドの使用 (証明書作成や通信速度測定)
 
1 - 3 を選択: 1
 
接続先の VPN Server または VPN Bridge が動作しているコンピュータの IP アドレスまたはホスト名を指定してください。
'ホスト名:ポート番号' の形式で指定すると、ポート番号も指定できます。
(ポート番号を指定しない場合は 443 が使用されます。)
何も入力せずに Enter を押すと、Localhost (このコンピュータ) のポート 443 に接続します。
接続先のホスト名または IP アドレス:
 
サーバーに仮想 HUB 管理モードで接続する場合は、仮想 HUB 名を入力してください。
サーバー管理モードで接続する場合は、何も入力せずに Enter を押してください。
接続先の仮想 HUB 名を入力:
VPN Server "localhost" (ポート 443) に接続しました。
 
VPN Server 全体の管理権限があります。

仮想HUBを自宅のネットワークに接続(ブリッジ接続)させ、L2TP/IPsecを有効化させましょう。
VPN Server>BridgeCreate
BridgeCreate コマンド - ローカルブリッジの作成
ブリッジする仮想 HUB 名: DEFAULT
 
ブリッジ先のデバイス名: eth0
VPN Server>Hub DEFAULT
Hub コマンド - 管理する仮想 HUB の選択
仮想 HUB "DEFAULT" を選択しました。
コマンドは正常に終了しました。
 
VPN Server/DEFAULT>IPsecEnable
IPsecEnable コマンド - IPsec VPN サーバー機能の有効化 / 無効化
L2TP over IPsec サーバー機能を有効 (yes / no): yes
 
Raw L2TP サーバー機能を有効 (yes / no): no
 
EtherIP / L2TPv3 over IPsec サーバー機能を有効 (yes / no): no
 
IPsec 事前共有鍵の文字列 (9 文字以下を推奨): test
 
VPN 接続時に仮想 HUB 名が省略された場合のデフォルト仮想 HUB 名: DEFAULT
 
コマンドは正常に終了しました。

続いて、L2TP/IPsec用の接続ユーザーを作成しましょう。
VPN Server/DEFAULT>UserCreate
UserCreate コマンド - ユーザーの作成
ユーザー名: test
 
参加するグループ名:
 
ユーザーの本名:
 
ユーザーの説明:
 
コマンドは正常に終了しました。
 
VPN Server/DEFAULT>UserPasswordSet
UserPasswordSet コマンド - ユーザーの認証方法をパスワード認証に設定しパスワードを設定
ユーザー名: test
 
パスワードを入力してください。キャンセルするには Ctrl+D キーを押してください。
 
パスワード: ****
確認入力  : ****
 
コマンドは正常に終了しました。

VPNサーバの準備ができましたので、ファイアウォールに許可定義を追加しましょう。
自宅環境で多くはNAPT(IPマスカレード)が構成されていると思いますので、以下を許可すれば大丈夫です。
  • ISAKMP(UDP 500)
  • IPsec NAT Traversal(UDP 4500)
例えば、Omronのルーターの場合は以下を追加しましょう。
service table 1 ISAKMP 500 500 -1 UDP
service table 2 IPSec_NAT_Traversal 4500 4500 -1 UDP
ip filter 1 pass in * 192.168.1.xx/32 ISAKMP wanany
ip filter 2 pass in * 192.168.1.xx/32 IPSec_NAT_Traversal wanany
ip nat 1 192.168.1.xx/ISAKMP dynamic *
ip nat 2 192.168.1.xx/IPSec_NAT_Traversal dynamic *

最後にAndroid側の設定をおこないましょう。
IPが固定されていない場合にはDynamic DNSサービスに登録して、ドメイン名でアクセスできるようにしましょう。
(事前共有鍵やユーザー名/パスワードは先ほど作成したものです。)
vpn_fig1.pngvpn_fig2.png

以上で、L2TP/IPsecを利用して接続できるようになりました。
vpnserverの自動起動は以下のリンクを参考に構成してみてください。
http://www2.softether.jp/en/vpn3/manual/web/7-3.aspx