SoftEtherによるVPN(IPSec)に、IPhone及び、OS X からの接続してみた

2016.08.08

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

1 はじめに

SoftEther VPN Server は、筑波大学の研究プロジェクトとして開発されているもので、現在OSSとして公開されています。

各種のプラットフォームで利用可能ですが、今回は、AWS上のEC2(t2.micro Amazon Linux)にこれをインストールして、L2TP over IPSec のVPNサーバを構築し、IPhone及びOS Xから接続してみました。

なお、OS Xの場合も、iPhoneの場合も、VPNの設定の中に IPSec という表現が有るのですが、L2TPv3/IPsec(Cisco)との区別に注意が必要です。

OS Xの場合は、L2TP over IPSec を使用して下さい。

009

iPhoneでは、L2TPという選択になっており、一瞬レイヤ2接続のように見えますが、これが L2TP/IPSec の事です。

010

2 SoftEther VPN Serverのセットアップ

(1) インストール

サーバー(EC2)にSoftEther VPN Serverをインストール手順は以下のとおりです。

$ sudo yum install -y gcc // makeを使用するため
$ wget http://jp.softether-download.com/files/softether/v4.20-9608-rtm-2016.04.17-tree/Linux/SoftEther_VPN_Server/64bit_-_Intel_x64_or_AMD64/softether-vpnserver-v4.20-9608-rtm-2016.04.17-linux-x64-64bit.tar.gz
$ tar -zxvf softether-vpnserver-v4.20-9608-rtm-2016.04.17-linux-x64-64bit.tar.gz
$ cd vpnserver
$ make
// ここでLicenceに関する質問があるので、承諾する場合は、全部 **1** で答えるとmakeが始まります。

次に、 vpnserver/usr/local に置き、権限を制限します。

$ cd ..
$ sudo mv ./vpnserver /usr/local
$ cd /usr/local/vpnserver/
$ chmod 600 *
$ chmod 700 vpncmd
$ chmod 700 vpnserver

(2) 設定確認

vpncmdメニュー3(VPN Tools)からCheckコマンドを利用して、正しく設定できているかどうかの確認ができます。

$ ./vpncmd
1. VPN Server または VPN Bridge の管理
2. VPN Client の管理
3. VPN Tools コマンドの使用 (証明書作成や通信速度測定)

1 - 3 を選択: 3 <= 3を選択する

VPN Tools> Check <= Checkコマンドを使用する
Check コマンド - SoftEther VPN の動作が可能かどうかチェックする
---------------------------------------------------
SoftEther VPN 動作環境チェックツール

'カーネル系' のチェック中...
              [合格] ○
'メモリ操作系' のチェック中...
              [合格] ○
'ANSI / Unicode 文字列処理系' のチェック中...
              [合格] ○
'ファイルシステム' のチェック中...
              [合格] ○
'スレッド処理システム' のチェック中...
              [合格] ○
'ネットワークシステム' のチェック中...
              [合格] ○

すべてのチェックに合格しました。このシステム上で SoftEther VPN Server / Bridge が正しく動作する可能性が高いと思われます。

コマンドは正常に終了しました。

VPN Tools> exit <= exitでコマンドを終了します。
$

(3) 起動、停止及び、再起動

start(stop,restart) コマンドで、vpnserver 起動(再起動,停止)します。

$ sudo /usr/local/vpnserver/vpnserver start(stop,restart)
The SoftEther VPN Server service has been started.

(4) プロセスの確認

psコマンドで起動しているプロセスを確認すると、次のようになっています。

$ ps -ael | grep vpnserver
4 S     0  2807     1  0  60 -20 -  4380 -      ?        00:00:00 vpnserver
5 S     0  2808  2807  0  60 -20 - 169025 -     ?        00:00:00 vpnserver

(5) ポートの確認

vpnserverが使用するポードは、UDPの500と4500です。

$ netstat -atnu | grep 500
udp        0      0 127.0.0.1:4500              0.0.0.0:*
udp        0      0 10.0.0.217:4500             0.0.0.0:*
udp        0      0 127.0.0.1:500               0.0.0.0:*
udp        0      0 10.0.0.217:500              0.0.0.0:*
udp        0      0 ::1:4500                    :::*
udp        0      0 fe80::407:49ff:fe58:bdf:4500 :::*
udp        0      0 ::1:500                     :::*
udp        0      0 fe80::407:49ff:fe58:bdff:500 :::*

lsofでもPID 2808 のプロセスが500と4500を使用していることが確認できます。

$ sudo lsof -i:500
COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
vpnserver 2808 root   63u  IPv4  15619      0t0  UDP 10.0.0.217:isakmp
vpnserver 2808 root   67u  IPv4  15623      0t0  UDP localhost:isakmp
vpnserver 2808 root   71u  IPv6  15629      0t0  UDP [fe80::407:49ff:fe58:bdff]:isakmp
vpnserver 2808 root   75u  IPv6  15633      0t0  UDP localhost:isakmp

$ sudo lsof -i:4500
COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
vpnserver 2808 root   64u  IPv4  15620      0t0  UDP 10.0.0.217:ipsec-nat-t
vpnserver 2808 root   68u  IPv4  15624      0t0  UDP localhost:ipsec-nat-t
vpnserver 2808 root   72u  IPv6  15630      0t0  UDP [fe80::407:49ff:fe58:bdff]:ipsec-nat-t
vpnserver 2808 root   76u  IPv6  15634      0t0  UDP localhost:ipsec-nat-t

このため、EC2で使用する場合、インバウンドで UDP 500と4500を許可する必要があります。

001

(6) ログの確認

SoftEtherのログは、packet_log,security_log,server_logの下に出力されます。

$ ls -la /usr/local/vpnserver/ | grep log
drwx------  2 root     root        4096  8月  7 14:31 packet_log
drwx------  4 root     root        4096  8月  7 14:31 security_log
drwx------  2 root     root        4096  8月  7 14:31 server_log

事後の作業は、server_logの下のログ(日付ごと)を出力しながら進めると、分かりやすいかも知れません。

$ sudo ls -la /usr/local/vpnserver/server_log/
-rw------- 1 root     root     24014  8月  7 14:42 vpn_20160807.log

$ sudo tail -f  /usr/local/vpnserver/server_log/vpn_20160807.log

(7) 仮想HUB

SoftEther VPN Server では、レイヤ2の通信を扱う部分を仮想 HUBと呼んでおり、複数設定することが出来ますが、インストール時にDEFAULTという名前の仮想HUBが一つ設定されておりますので、今回は、これをそのまま利用することにします。

vpncmdメニュー1(VPN Server または VPN Bridge の管理) から HubListコマンド を利用して、設定されている仮想HUBの一覧を確認できます。

$ sudo ./vpncmd
1. VPN Server または VPN Bridge の管理
2. VPN Client の管理
3. VPN Tools コマンドの使用 (証明書作成や通信速度測定)

1 - 3 を選択: 1 <= 1を選択する

<= このあとプロンプトに対して入力無しでEnterを2回押すと、localhost:443でVPN Serverに接続されます。

VPN Server>hublist
HubList コマンド - 仮想 HUB の一覧の取得
項目            |値
----------------+-------------------
仮想 HUB 名     |DEFAULT
状態            |オンライン
種類            |スタンドアロン
ユーザー        |0
グループ        |0
セッション      |0
MAC テーブル    |0
IP テーブル     |0
ログイン回数    |0
最終ログイン日時|2016-08-06 23:05:57
最終通信日時    |2016-08-06 23:05:57
転送バイト数    |0
転送パケット数  |0
コマンドは正常に終了しました。

(8) ユーザの作成

仮想HUBに接続するには、ユーザが必要です。仮想HUB(DEFAULT) には、当初、ユーザが設定されておりませんので、ここで作成します。

上記の、メニュー1(VPN Server または VPN Bridge の管理) から引き続き行います。

当初、HUBコマンドで DEFAULT の設定に入ります。(プロンプトが VPN Server/DEFAULT に変わります)

VPN Server>Hub default
Hub コマンド - 管理する仮想 HUB の選択
仮想 HUB "DEFAULT" を選択しました。
コマンドは正常に終了しました。
VPN Server/DEFAULT>

続いて、UserCreateコマンドでユーザを作成します。ここでは、user1という名前で作成しました。 参加するグループ、ユーザの本名、ユーザの説明は、空でも大丈夫です。

VPN Server/DEFAULT>UserCreate 
UserCreate コマンド - ユーザーの作成
ユーザー名: user1

参加するグループ名:
ユーザーの本名:
ユーザーの説明:

コマンドは正常に終了しました。

VPN Server/DEFAULT>

UserListコマンドで、作成されたユーザを確認しておきましょう。

VPN Server/DEFAULT>UserList
UserList コマンド - ユーザー一覧の取得
項目            |値
----------------+--------------
ユーザー名      |user1
本名            |
所属グループ    |-
説明            |
認証方法        |パスワード認証
ログイン回数    |0
最終ログイン日時|(なし)
有効期限        |無期限
転送バイト数    |0
転送パケット数  |0
コマンドは正常に終了しました。

VPN Server/DEFAULT>

(9) ユーザのパスワードの設定

ユーザにパスワードを設定しないと、利用することが出来ません。

パスワード設定も、引き続き、仮想HUB(DEFAULT)の設定(VPN Server/DEFAULT)プロンプトからUserPasswordSetコマンドで行います。

VPN Server/DEFAULT>UserPasswordSet
UserPasswordSet コマンド - ユーザーの認証方法をパスワード認証に設定しパスワードを設定
ユーザー名: user1

パスワードを入力してください。キャンセルするには Ctrl+D キーを押してください。

パスワード: ***
確認入力  : ***


コマンドは正常に終了しました。

VPN Server/DEFAULT>

次の図は、OS XでVPN接続を設定する場合の、認証情報の入力画面ですが、UserPasswordSetコマンドを使用すると、5種類ある認証方式のうち、この一番上の方式を選択したことになります。

002

(10) IPSecの設定

ここまでで、レイヤ2(仮想HUB)までの設定は、完了です。続いて、この上で IPSecを使用するように設定を進めます。

設定は、IPsecEnableコマンドで行い、「L2TP over IPsec サーバー機能を有効」 という質問に対してだけ yes を設定します。

VPN Server/DEFAULT>IPsecEnable
IPsecEnable コマンド - IPsec VPN サーバー機能の有効化 / 無効化
L2TP over IPsec サーバー機能を有効 (yes / no): yes <= yesを入力

Raw L2TP サーバー機能を有効 (yes / no): no <= noを入力

EtherIP / L2TPv3 over IPsec サーバー機能を有効 (yes / no): no <= noを入力

IPsec 事前共有鍵の文字列 (9 文字以下を推奨): xxxxxx  <= IPsec 事前共有鍵の文字列を決めて入力する

VPN 接続時に仮想 HUB 名が省略された場合のデフォルト仮想 HUB 名: DEFAULT <=DEFAULTを入力する

コマンドは正常に終了しました。

途中、「IPsec 事前共有鍵の文字列」を設定しますが、これが、クライアント設定の下記の部分になります。

003

(11) NATの設定

最後は、NATの設定です。これも、仮想HUBごとの設定ですので、(VPN Server/DEFAULT)のプロンプトから行います。

使用するコマンドは、SecureNatEnableです。

VPN Server/DEFAULT>SecureNatEnable
SecureNatEnable コマンド - 仮想 NAT および DHCP サーバー機能 (SecureNAT 機能) の有効化
コマンドは正常に終了しました。

VPN Server/DEFAULT>

3 OS Xからの接続

(1) 設定

「ネットワーク環境設定」から、新しいネットワークを作成します。 インターフェースとして VPN を選択し、VPNタイプは L2TP over IPSec を選択します。

004

サーバアドレスは、今回、SoftEther VPN Serverが動作しているEC2のグローバルアドレス、アカウント名は、仮想HUBのユーザ名です。

入力が終わったら、引き続き「認証設定...」を選択します。

005

こちらでは、ユーザのパスワード及び、IPSecの共有シークレットを入力します。

006

「接続」ボタンを押すと、VPN接続が完了します。

007

「詳細」を開いて、オプショのページで「すべてのトラフィックをVPN経由で送信」にチェックを入れると、全部の通信がVPNに向かいます。

015

(2) 動作確認

下図は、EC2上に立てたWebサーバに、VPC上のローカルアドレスからアクセスしている様子です。 VPN接続を利用すると、このようにVPCの中で立ち上げたサービスを、外部に公開することなくセキュアにアクセスすることが出来ます。

008

4 iPhoneからの接続

(1) 設定

「設定」ー「一般」ー「VPN」と辿り、「VPN構成を追加」を選択します。

011

タイプは L2TP 、サーバは、EC2のグローバルアドレス、アカウントは仮想HUBのユーザ名、パスワードは、ユーザのパスワード、シークレットは、IPSecの共有シークレットをそれぞれ入力します。 (「説明」につては、入力が必須ですが、なんでも構いません)

012

「接続」スイッチで、VPN接続が開始されます。

013

(2) 動作確認

こちらも、VPC内のアドレスでアクセスしてみました。

014

5 最後に

今回、L2TP over IPSecの端末(iPhone/OS X)からの接続について纏めてみました。 ネットワークをVPNで接続するのと違って、ルータなどの設定が必要なく、端末単位で設定できるので非常に簡単です。

なお、今回のような接続は、VPN接続した端末からのアクセスのみを許可するもので、この繋がった端末でデザリングなどを行っても、そちらからのルーティングは出来ないことにご注意下さい。

おまけです。 下記は、VPNの通信をモニタしたものです。UDP4500で通信しているパケットが確認できます。wiresharkでは、ProtocolでESPとなっています。

016

6 参考にさせて頂いたリンク


SoftEther VPN プロジェクト
AWS(EC2)でSoftEtherを使ってL2TP/IPsecなVPNを構築する (Mac)
[Amazon VPC] ハードウェアVPN接続についてまとめてみた Developers.IO
[Amazon VPC] ハードウェアVPN接続を設定する Developers.IO