この記事は公開されてから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 を使用して下さい。
iPhoneでは、L2TPという選択になっており、一瞬レイヤ2接続のように見えますが、これが L2TP/IPSec の事です。
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を許可する必要があります。
(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種類ある認証方式のうち、この一番上の方式を選択したことになります。
(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 事前共有鍵の文字列」を設定しますが、これが、クライアント設定の下記の部分になります。
(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 を選択します。
サーバアドレスは、今回、SoftEther VPN Serverが動作しているEC2のグローバルアドレス、アカウント名は、仮想HUBのユーザ名です。
入力が終わったら、引き続き「認証設定...」を選択します。
こちらでは、ユーザのパスワード及び、IPSecの共有シークレットを入力します。
「接続」ボタンを押すと、VPN接続が完了します。
「詳細」を開いて、オプショのページで「すべてのトラフィックをVPN経由で送信」にチェックを入れると、全部の通信がVPNに向かいます。
(2) 動作確認
下図は、EC2上に立てたWebサーバに、VPC上のローカルアドレスからアクセスしている様子です。 VPN接続を利用すると、このようにVPCの中で立ち上げたサービスを、外部に公開することなくセキュアにアクセスすることが出来ます。
4 iPhoneからの接続
(1) 設定
「設定」ー「一般」ー「VPN」と辿り、「VPN構成を追加」を選択します。
タイプは L2TP 、サーバは、EC2のグローバルアドレス、アカウントは仮想HUBのユーザ名、パスワードは、ユーザのパスワード、シークレットは、IPSecの共有シークレットをそれぞれ入力します。 (「説明」につては、入力が必須ですが、なんでも構いません)
「接続」スイッチで、VPN接続が開始されます。
(2) 動作確認
こちらも、VPC内のアドレスでアクセスしてみました。
5 最後に
今回、L2TP over IPSecの端末(iPhone/OS X)からの接続について纏めてみました。 ネットワークをVPNで接続するのと違って、ルータなどの設定が必要なく、端末単位で設定できるので非常に簡単です。
なお、今回のような接続は、VPN接続した端末からのアクセスのみを許可するもので、この繋がった端末でデザリングなどを行っても、そちらからのルーティングは出来ないことにご注意下さい。
おまけです。 下記は、VPNの通信をモニタしたものです。UDP4500で通信しているパケットが確認できます。wiresharkでは、ProtocolでESPとなっています。
6 参考にさせて頂いたリンク
SoftEther VPN プロジェクト
AWS(EC2)でSoftEtherを使ってL2TP/IPsecなVPNを構築する (Mac)
[Amazon VPC] ハードウェアVPN接続についてまとめてみた Developers.IO
[Amazon VPC] ハードウェアVPN接続を設定する Developers.IO