EPISODE 02

モバイルワークを試行錯誤するブログ

AWS EC2にL2TP VPNを設定する

AWSが制限付きではあるが、無償で利用できるのと、SoftEther VPNの評判がすこぶる良さそうなので、EC2にVPNサーバを設定してみた。以下手順をメモしておく。

前提条件

VPNサーバの前提条件
AWS :インスタンスが立ち上がっていて、固定IPが設定され、SSHでログイン可能なこと
OS:EC2 t2.micro Amazon Linux
VPN:SoftEther VPN v4.22

インスタンスに設定したセキュリティグループの内容は以下の通り

タイプ プロトコル ポート 送信元
SSH TCP 22 999.999.999.999/32
カスタム UDP ルール UDP 4500 0.0.0.0/0
カスタム UDP ルール UDP 500 0.0.0.0/0

VPNクライアント条件
MacBook macOS Sierra 10.12.3
iOS 10.2.1

手順の概要は以下の通り
1)SoftEther VPNのダウンロードとインストール
2)仮想HUBとユーザの設定
3)L2TP/IP Secの設定
4)仮想NAT、DHCPサーバの設定
5)クライアントの設定

VPNサーバ設定

EC2インスタンスにrootでログインする(以下すべての作業はrootで実施した)

$ sudo su -

gccソフトウェアのインストール

# yum install -y gcc

SoftEther VPNのダウンロード

# wget http://jp.softether-download.com/files/softether/v4.22-9634-beta-2016.11.27-tree/Linux/SoftEther_VPN_Server/64bit_-_Intel_x64_or_AMD64/softether-vpnserver-v4.22-9634-beta-2016.11.27-linux-x64-64bit.tar.gz

ファイルの解凍

# tar -zxvf softether-vpnserver-v4.22-9634-beta-2016.11.27-linux-x64-64bit.tar.gz

make

# cd vpnserver
# make #ライセンスへの同意が促されたら1で同意する(3回)

フォルダを/usr/localに移動し、権限の変更

# cd 
# mv vpnserver /usr/local #フォルダを移動する
# cd /usr/local/vpnserver/ #移動したフォルダへ移動
# chmod 600 * #権限の変更
# chmod 700 vpncmd
# chmod 700 vpnserver

インストールと動作をチェックする

# ./vpncmd
VPN Tools>check

All checks passed. It is most likely that SoftEther VPN Server / Bridge can operate normally on this system.
The command completed successfully.

VPN Tools>exit

常時バックグラウンドで動作し続けるデーモンプロセスとして登録する。

# vi > /etc/init.d/vpnserver

以下の文字列をそのままコピペし最後の行の改行の後に Ctrl+D キーを押す

#!/bin/sh
# chkconfig: 2345 99 01
# description: SoftEther VPN Server
DAEMON=/usr/local/vpnserver/vpnserver
LOCK=/var/lock/subsys/vpnserver
test -x $DAEMON || exit 0
case "$1" in
start)
$DAEMON start
touch $LOCK
;;
stop)
$DAEMON stop
rm $LOCK
;;
restart)
$DAEMON stop
sleep 3
$DAEMON start
;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 1
esac
exit 0

スクリプトのパーミッションを変更

# chmod 755 /etc/init.d/vpnserver

chkconfigコマンドを使用して、上記のスタートアップスクリプトが Linux カーネル起動時に、自動的にバックグラウンドで起動するようにする。

# /sbin/chkconfig --add vpnserver 

サービススタート

# /etc/init.d/vpnserver start 
The SoftEther VPN Server service has been started.

言語の変更

# vi lang.config

# PacketiX VPN / SoftEther VPN Language Setting File
(省略)
# Specify a Language ID here.
ja #ここをenからjaに書き換えて保存する

ポートと仮想 HUBの設定

# ./vpncmd

vpncmd プログラムを使って以下のことができます。
1. VPN Server または VPN Bridge の管理
2. VPN Client の管理
3. VPN Tools コマンドの使用 (証明書作成や通信速度測定)

1 - 3 を選択: 1 #1を入力

接続先の VPN Server または VPN Bridge が動作しているコンピュータの IP アドレスまたはホスト名を指定してください。
'ホスト名:ポート番号' の形式で指定すると、ポート番号も指定できます。
(ポート番号を指定しない場合は 443 が使用されます。)
何も入力せずに Enter を押すと、localhost (このコンピュータ) のポート 443 に接続します。
接続先のホスト名または IP アドレス: #そのままエンター

サーバーに仮想 HUB 管理モードで接続する場合は、仮想 HUB 名を入力してください。
サーバー管理モードで接続する場合は、何も入力せずに Enter を押してください。
接続先の仮想 HUB 名を入力: #そのままエンター
VPN Server "localhost" (ポート 443) に接続しました。

VPN Server 全体の管理権限があります。

仮想HUBの設定  自動作成された仮想HUBの存在を確認するため、一覧を取得する。

VPN Server>hublist

HubList コマンド - 仮想 HUB の一覧の取得
項目            |値
----------------+-------------------
仮想 HUB 名     |DEFAULT
状態            |オンライン
種類            |スタンドアロン
ユーザー        |0
グループ        |0
セッション      |0
MAC テーブル    |0
IP テーブル     |0
ログイン回数    |0
最終ログイン日時|2017-02-23 08:36:36
最終通信日時    |2017-02-23 08:36:36
転送バイト数    |0
転送パケット数  |0

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

新しい仮想HUBの作成 

VPN Server>HubCreate

HubCreate コマンド - 新しい仮想 HUB の作成
作成する仮想 HUB の名前: EC2   #EC2という名前の仮想HUBを作成
パスワード: ********       #パスワードを2度入力
確認入力  : ********

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

DEFAULT仮想HUBの削除

VPN Server>HubDelete

HubDelete コマンド - 仮想HUBの削除
削除する仮想HUBの名前:DEFAULT

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

仮想HUBの選択

VPN Server>HUB EC2 

Hub コマンド - 管理する仮想 HUB の選択
仮想 HUB "EC2" を選択しました。

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

ユーザ一覧の取得

VPN Server/EC2>Userlist

UserList コマンド - ユーザー一覧の取得
項目|値
----+--

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

ユーザの作成

VPN Server/EC2>UserCreate

UserCreate コマンド - ユーザーの作成
ユーザー名: sakuma
参加するグループ名: #未入力
ユーザーの本名:   #未入力
ユーザーの説明:   #未入力

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

ユーザパスワードの設定

VPN Server/EC2>UserPasswordSet

UserPasswordSet コマンド - ユーザーの認証方法をパスワード認証に設定しパスワードを設定
ユーザー名: sakuma
パスワードを入力してください。キャンセルするには Ctrl+D キーを押してください。
パスワード: ***********
確認入力  : ***********

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

LT2P/IPSecの設定

VPN Server/EC2>IPsecEnable

IPsecEnable コマンド - IPsec VPN サーバー機能の有効化 / 無効化
L2TP over IPsec サーバー機能を有効 (yes / no): yes
Raw L2TP サーバー機能を有効 (yes / no): no
EtherIP / L2TPv3 over IPsec サーバー機能を有効 (yes / no): no
IPsec 事前共有鍵の文字列 (9 文字以下を推奨): ********* #事前共有鍵の文字列を入力する
VPN 接続時に仮想 HUB 名が省略された場合のデフォルト仮想 HUB 名: EC2

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

仮想 NAT および DHCP サーバー機能の設定

VPN Server/EC2>SecureNatEnable

SecureNatEnable コマンド - 仮想 NAT および DHCP サーバー機能 (SecureNAT 機能) の有効化

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

以上でサーバ側の設定は完了。特にエラーでハマるようなところはないはず。公式サイトのドキュメントが日本語で充実しているため、設定前にざっと読んでおくとより作業は楽になる。

クライアントの設定

今回はmacOSとiOSでの利用を想定しているため、構成プロファイルを作成して設定する方針とした。VPN設定の構成プロファイルはiOS、macOSともに共通なので、1つ作成してしまえば、iPhone、iPad、Macそれぞれの端末で手入力で設定する必要はない。

構成プロファイルの作成はAppleConfigurator2を利用する。AppleConfigurator2はMacAppStoreより無償でダウンロードできる。

ファイル>新規作成>一般で適当な値を入力する

f:id:bcorp:20170224141603p:plain

左タブのVPNから接続に必要なパラメータを入力する

f:id:bcorp:20170224141711p:plain

接続名:任意
接続のタイプ:L2TP
サーバ:EC2に設定した固定IPアドレス
アカウント:作成したアカウント名@作成した仮想HUB名
パスワード:ユーザ作成時に作成したパスワード
全てのトラフィックをVPN経由で送信にチェック
コンピュータ認証:共有シークレット
グループ名:空白
共有シークレット:IPsec 事前共有鍵の文字列で設定した文字列

作成した構成プロファイルは任意の場所に保存し、保存したプロファイルはメールやDropbox経由で端末送信しインストールする。

Macは作成した構成プロファイルをダブルクリックすることでインストール

f:id:bcorp:20170224141730p:plain

iPhone、iPadはメールで送るかDropboxに直接Safariからアクセスすることでインストールする。

f:id:bcorp:20170224141747p:plain

Macでの接続は、システム環境設定>構成プロファイルで作成したVPNを選択>接続をクリックして接続。

f:id:bcorp:20170224141803p:plain

iOSで接続するには、設定>VPNをONにすることで接続される。

f:id:bcorp:20170224142145p:plain

今回初めてEC2からSoftEther VPNの起動、設定までやってみたけど、AWSの契約からVPNの接続確認まで半日もかからずにとりあえず使える状態になっている。今のところ安定して使えているし、通信速度が極端に落ちるようなこともない。

AWSの無償期間が終了するまでは費用が発生することもなさそうなので、しばらくこのVPNを使ってみる予定。また、せっかくの無料期間なのでVPN以外にも試していきたいところ。