AWS(EC2)でSoftEtherを使ってL2TP/IPsecなVPNを構築する (Mac)

  • 177
    いいね
  • 9
    コメント

SoftEtherのVPNソフトがすごい! らしいので、EC2のAmazon Linuxで環境構築をしてみた。
2014年の頭にOSSになって、無償でつかえるようになったらしい。

[追記]
2016/04/17 最新版の v4.20-9608-rtm の情報に更新
2015/11/16 最新版の v4.18-9570-rtm の情報に更新

環境

サーバー側

  • EC2 t2.micro Amazon Linux
  • SoftEther VPN

クライアント側

  • Mac OS X (10.9.5 or higher)
  • iOS (8.1 or higher)
  • Android, PC (動作未確認ですが、普通に動くはずです)
  • Macしか手元に無く、SoftEtherのWindows向けGUIソフトが使えない前提です。

その他の記事

1. サーバー(EC2)にSoftEtherをインストール

基本的には公式ドキュメントのここに沿って行えば良いです。


 # 以下すべてrootで行います
$ sudo su –

 # make で必要
$ yum install -y gcc

 # ソースコードを落としてきます。
$ 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

make をした後に、ダラダラと文字が流れてきて、ライセンスに同意しますか?
と聞いてくるので、すべて1と回答する。

作成したvpnserverを/usr/localに置く。


$ cd
$ mv vpnserver /usr/local

ファイルの権限を変更する。


$ cd /usr/local/vpnserver/
$ chmod 600 *
$ chmod 700 vpncmd
$ chmod 700 vpnserver

SoftEtherのコマンドラインを使って、正しく設定ができているか確認する。


$ ./vpncmd

どのモードを使うか聞いてくるので、3を入力して


VPN Tools> check

とコマンドを入力する。
6つぐらいのテストをパスすれば、とりあえずここまではOK。


VPN Tools> exit

一旦終了。

2. スタートアップスクリプトへの登録

バックグラウンドで常に実行させるために、デーモンプロセスとして登録する。
/etc/init.d/vpnserverに以下を書き込む。

#!/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

root以外のユーザが変更できないように、ファイルの権限を変更する。


$ chmod 755 /etc/init.d/vpnserver

サーバーを再起動した時にも自動的にVPNサーバーが起動するように設定


$ /sbin/chkconfig --add vpnserver 

動くかどうか試してみる

$ service vpnserver start
> The SoftEther VPN Server service has been started.

となればOK。

3.クライアントのアカウント作成

既存の記事はここからWindowsのGUIソフトを使うものばかりだったので、サーバー側でCUIで設定する方法を書く。

コマンドラインを起動する。


$ cd /usr/local/vpnserver/
$ ./vpncmd

今回はサーバーの設定をするので、1のモードを選択。
接続先のホスト名 と 仮想HUB名 を聞かれるけど、空白のままEnterを2回押せば良い。

ここのコマンドラインで使えるコマンドはHELPと入力すると、全部見れる。全部で205個のコマンドがあるらしい。
(ちなみに、コマンドの大文字小文字は関係なく、コマンドのスペルを少し間違えても推測して訂正してくれてすごい。)

仮想HUBの作成

仮想HUBが何なのかよく理解できていないけど、感覚的には、ユーザは仮想HUBに属していて、VPNを繋ぐ時の認証などはそこに所属する仮想HUBが担当するものらしい。
学校のクラスみたいなものを想像すればよいのかな。

とりあえず

VPN Server> HubList

という仮想Hubの一覧を見るコマンドを打ってみると、DEFAULTという仮想HUBが既に作られているのが分かる。
でも、やっぱり自分で作ったものがあると嬉しいので、exampleという名前の仮想HUBを作ってみる。

VPN Server> HubCreate
HubCreate コマンド - 新しい仮想 HUB の作成
作成する仮想 HUB の名前: example

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

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

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

となればOK。

ユーザの作成

既存のユーザがいるのかなと調べてみる

VPN Server> UserList

とすると

UserList コマンド - ユーザー一覧の取得
このコマンドを実行する前に、Hub コマンドで管理対象の仮想 HUB を選択してください。

と怒られてしまう。
管理対象の仮想HUBを指定しないといけないようなので

VPN Server> HUB example

として、仮想HUBexampleを指定する。

VPN Server/example> UserList

とすると、まだだれもユーザがいないようなので、新しくhogeさんを作成する。

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

参加するグループ名: #option 空白EnterでOK

ユーザーの本名: #option 空白EnterでOK

ユーザーの説明: #option 空白EnterでOK

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

となればOK。
認証方法は5種類ぐらい用意されているらしいけど、今回はパスワード認証を選ぶことにする。

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

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

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


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

となればOK。

これでユーザ作成は完成。
簡単!!!

4. L2TP/IPsecなVPNにする

MacやiOSなど(PC,Androidも含めて)では標準でL2TP/IPsecでVPN接続できるので、それに対応できるようにする。
公式ドキュメントでは以下の辺りを参考にすると良いと思う。

引き続き、コマンドラインで作業を続ける。
IPsecEnableとコマンドを入力すると、いくつか設定の値を聞かれるので、以下のように答える。

VPN Server/example> 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 名: example

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

これだけで、L2TP/IPsec で接続できるようになる。すごい。

L2TP/IPsec で繋ぐには、UDPのポートをいくつか開けないといけないので、AWSのセキュリティグループで以下のものを開けておく

  • UDP 500
  • UDP 4500
  • UDP 1701 ←不要です

【追記】
UDP 1701 は開放不要とのコメントを頂きました。ありがとうございます!

5. ぼくがめちゃくちゃハマったところ

「仮想 NAT および DHCP サーバー機能 (SecureNAT 機能) の有効化」をする必要があった。
だけど、実はこれが何なのかよく分かっていない。勉強不足。。。

これもコマンドラインで有効化する。

VPN Server/example> SecureNatEnable

これを有効化しないと、クライアントから接続した時に「PPPサーバーとの接続が確立ができません」みたいなエラーが出る。
SoftEtherのログインログを見てみると、ちゃんとログイン回数は増えていたので、認証は通るけど、そのあとVPNが正しく構築されないという状況らしい。

これで5時間ぐらいハマった。

6. めでたくMacからVPN接続する

いつものシステム環境設定からVPN繋ぐやつ。
よくわからない人は公式ドキュメントのここを見てください。
iOSの場合はこっち

ちょっと注意すべきなのはアカウント名が [ユーザ名]@[仮想HUB名] になること。

VPN Server/example> IPsecEnable
 (略)
VPN 接続時に仮想 HUB 名が省略された場合のデフォルト仮想 HUB 名: example

に指定した仮想HUB(上の例では example)に所属する場合はアカウント名から @[仮想HUB名] を除いた [ユーザ名] だけでもログインできます。

7. ついでに宣伝

回線状況が悪いところでネットをしていて、プツプツVPNが切れると何回も繋ぎ直したりしてイライラしますよね。
そんなあなたのために、自動でVPNを繋ぎ直してくれるMac向けのアプリケーションを作ってたりするので、興味ある人はどうぞ。
ダウンロード: https://github.com/showwin/FeVPN/releases
ソースコード: https://github.com/showwin/FeVPN