SoftEther VPN でPC間接続VPNをする (Server編)


# はじめに
SoftetherVPNはオープンソースのVPNソフトウェアです。
非常に多機能で素晴らしいソフトウェアで、個人的に大好きです。
詳細については[公式サイト](https://ja.softether.org/)を参照してください。

ここでは、SoftEther VPNを使用して[PC 間接続 VPN](https://ja.softether.org/4-docs/2-howto/1.VPN_for_On-premise/1.Ad-hoc_VPN)を構築することを目的としたインストール手順、および、設定を書いていきます。
なお、インストール手順など公式のマニュアルが非常に詳しいので写経に近いです。

# 環境
・Amazon Linux（VPN Server側）
・Windows 10 Pro（VPN Server Manager(GUI) 実行用）

```bash
$ uname -a
Linux ip-XXX-XXX-XXX-XXX 4.4.44-39.55.amzn1.x86_64 #1 SMP Mon Jan 30 18:15:53 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
```

# ダウンロード
[SoftEther ダウンロード センター](http://www.softether-download.com/ja.aspx?product=softether)からダウンロードします。
今回の対象は以下の通りです。

**ダウンロードするソフトウェア：**SoftEther VPN (Freeware)
**コンポーネント：**SoftEther VPN Server
**プラットフォーム：**Linux
**CPU：**Intel x64 / AMD 64 (64bit)

# インストール 下準備

## yum update

```bash
$ sudo yum update
```

## EPEL有効化

```bash
$ sudo yum-config-manager --enable epel
```

## ダウンロードファイル配備
ここでは以下のように配備します。

```bash
$ mkdir ~/Installer
$ mv ~/softether-vpnserver-v4.22-9634-beta-2016.11.27-linux-x64-64bit.tar.gz ~/Installer/
```

# インストール
インストールは公式のドキュメントを参考に進めます。
・[7.3 Linux へのインストールと初期設定](https://ja.softether.org/4-docs/1-manual/7/7.3)

## 必要なソフトウェアおよびライブラリの確認
gccをインストールしておきます。

```bash
$ sudo yum install gcc
```

## パッケージの解凍
tarで解凍します。

```bash
$ tar xzvf softether-vpnserver-v4.22-9634-beta-2016.11.27-linux-x64-64bit.tar.gz
vpnserver/
vpnserver/Makefile
vpnserver/.install.sh
vpnserver/ReadMeFirst_License.txt
vpnserver/Authors.txt
vpnserver/ReadMeFirst_Important_Notices_ja.txt
vpnserver/ReadMeFirst_Important_Notices_en.txt
vpnserver/ReadMeFirst_Important_Notices_cn.txt
vpnserver/code/
vpnserver/code/vpnserver.a
vpnserver/code/vpncmd.a
vpnserver/lib/
vpnserver/lib/libcharset.a
vpnserver/lib/libcrypto.a
vpnserver/lib/libedit.a
vpnserver/lib/libiconv.a
vpnserver/lib/libintelaes.a
vpnserver/lib/libncurses.a
vpnserver/lib/libssl.a
vpnserver/lib/libz.a
vpnserver/lib/License.txt
vpnserver/hamcore.se2
```

## 実行可能ファイルの生成
makeを実行して、使用権許諾契約書を読むために1を選択します。

```bash
$ cd vpnserver/
$ make
--------------------------------------------------------------------

SoftEther VPN Server (Ver 4.22, Build 9634, Intel x64 / AMD64) for Linux Install Utility
Copyright (c) SoftEther Project at University of Tsukuba, Japan. All Rights Reserved.

--------------------------------------------------------------------


Do you want to read the License Agreement for this software ?

 1. Yes
 2. No

Please choose one of above number:
1
```

使用権許諾契約書を読んで承諾したら、それぞれ1をクリックします。

```bash
Did you read and understand the License Agreement ?
(If you couldn't read above text, Please read 'ReadMeFirst_License.txt'
 file with any text editor.)

 1. Yes
 2. No

Please choose one of above number:
1


Did you agree the License Agreement ?

1. Agree
2. Do Not Agree

Please choose one of above number:
1

make[1]: Entering directory `/home/ec2-user/Installer/vpnserver'
Preparing SoftEther VPN Server...
ranlib lib/libcharset.a
ranlib lib/libcrypto.a
ranlib lib/libedit.a
ranlib lib/libiconv.a
ranlib lib/libintelaes.a
ranlib lib/libncurses.a
ranlib lib/libssl.a
ranlib lib/libz.a
ranlib code/vpnserver.a
gcc code/vpnserver.a -O2 -fsigned-char -pthread -m64 -lm -ldl -lrt -lpthread -L./ lib/libssl.a lib/libcrypto.a lib/libiconv.a lib/libcharset.a lib/libedit.a lib/libncurses.a lib/libz.a lib/libintelaes.a -o vpnserver
ranlib code/vpncmd.a
gcc code/vpncmd.a -O2 -fsigned-char -pthread -m64 -lm -ldl -lrt -lpthread -L./ lib/libssl.a lib/libcrypto.a lib/libiconv.a lib/libcharset.a lib/libedit.a lib/libncurses.a lib/libz.a lib/libintelaes.a -o vpncmd
./vpncmd /tool /cmd:Check
vpncmd command - SoftEther VPN Command Line Management Utility
SoftEther VPN Command Line Management Utility (vpncmd command)
Version 4.22 Build 9634   (English)
Compiled 2016/11/27 15:23:56 by yagi at pc30
Copyright (c) SoftEther VPN Project. All Rights Reserved.

VPN Tools has been launched. By inputting HELP, you can view a list of the commands that can be used.

VPN Tools>Check
Check command - Check whether SoftEther VPN Operation is Possible
---------------------------------------------------
SoftEther VPN Operation Environment Check Tool

Copyright (c) SoftEther VPN Project.
All Rights Reserved.

If this operation environment check tool is run on a system and that system passes, it is most likely that SoftEther VPN software can operate on that system. This check may take a while. Please wait...

Checking 'Kernel System'...
              Pass
Checking 'Memory Operation System'...
              Pass
Checking 'ANSI / Unicode string processing system'...
              Pass
Checking 'File system'...
              Pass
Checking 'Thread processing system'...
              Pass
Checking 'Network system'...
              Pass

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

The command completed successfully.


--------------------------------------------------------------------
The preparation of SoftEther VPN Server is completed !


*** How to switch the display language of the SoftEther VPN Server Service ***
SoftEther VPN Server supports the following languages:
  - Japanese
  - English
  - Simplified Chinese

You can choose your prefered language of SoftEther VPN Server at any time.
To switch the current language, open and edit the 'lang.config' file.


*** How to start the SoftEther VPN Server Service ***

Please execute './vpnserver start' to run the SoftEther VPN Server Background Service.
And please execute './vpncmd' to run the SoftEther VPN Command-Line Utility to configure SoftEther VPN Server.

Of course, you can use the VPN Server Manager GUI Application for Windows / Mac OS X on the other Windows / Mac OS X computers in order to configure the SoftEther VPN Server remotely.


*** For Windows users ***
You can download the SoftEther VPN Server Manager for Windows
from the http://www.softether-download.com/ web site.
This manager application helps you to completely and easily manage the VPN server services running in remote hosts.


*** For Mac OS X users ***
In April 2016 we released the SoftEther VPN Server Manager for Mac OS X.
You can download it from the http://www.softether-download.com/ web site.
VPN Server Manager for Mac OS X works perfectly as same as the traditional Windows versions. It helps you to completely and easily manage the VPN server services running in remote hosts.

--------------------------------------------------------------------

make[1]: Leaving directory `/home/ec2-user/Installer/vpnserver'
```

## VPN Server の配置
makeしたファイルをそのまま移動させます。

```bash
$ cd ..
$ sudo mv vpnserver /usr/local
$ ls -l /usr/local/vpnserver/
total 10488
-rwxrwxr-x 1 ec2-user ec2-user    2784 Nov 27 07:03 Authors.txt
drwx------ 2 ec2-user ec2-user    4096 Mar 16 02:00 chain_certs
drwxrwxr-x 2 ec2-user ec2-user    4096 Mar 16 02:00 code
-rwxrwxr-x 1 ec2-user ec2-user 1296225 Nov 27 07:03 hamcore.se2
-rw------- 1 ec2-user ec2-user     867 Mar 16 02:00 lang.config
drwxrwxr-x 2 ec2-user ec2-user    4096 Mar 16 02:00 lib
-rwxrwxr-x 1 ec2-user ec2-user    2900 Nov 27 07:03 Makefile
-rwxrwxr-x 1 ec2-user ec2-user   30801 Nov 27 07:03 ReadMeFirst_Important_Notices_cn.txt
-rwxrwxr-x 1 ec2-user ec2-user   36296 Nov 27 07:03 ReadMeFirst_Important_Notices_en.txt
-rwxrwxr-x 1 ec2-user ec2-user   50695 Nov 27 07:03 ReadMeFirst_Important_Notices_ja.txt
-rwxrwxr-x 1 ec2-user ec2-user   58932 Nov 27 07:03 ReadMeFirst_License.txt
-rwxrwxr-x 1 ec2-user ec2-user 4612305 Mar 16 02:00 vpncmd
-rwxrwxr-x 1 ec2-user ec2-user 4612477 Mar 16 02:00 vpnserver
```

権限を変更しておきます。

```bash
$ sudo chown -R root:root /usr/local/vpnserver/
$ cd /usr/local/vpnserver/
$ sudo chmod 600 *
$ sudo chmod 700 vpncmd
$ sudo chmod 700 vpnserver
$ ls -l
total 10488
-rw------- 1 root root    2784 Nov 27 07:03 Authors.txt
drw------- 2 root root    4096 Mar 16 02:00 chain_certs
drw------- 2 root root    4096 Mar 16 02:00 code
-rw------- 1 root root 1296225 Nov 27 07:03 hamcore.se2
-rw------- 1 root root     867 Mar 16 02:00 lang.config
drw------- 2 root root    4096 Mar 16 02:00 lib
-rw------- 1 root root    2900 Nov 27 07:03 Makefile
-rw------- 1 root root   30801 Nov 27 07:03 ReadMeFirst_Important_Notices_cn.txt
-rw------- 1 root root   36296 Nov 27 07:03 ReadMeFirst_Important_Notices_en.txt
-rw------- 1 root root   50695 Nov 27 07:03 ReadMeFirst_Important_Notices_ja.txt
-rw------- 1 root root   58932 Nov 27 07:03 ReadMeFirst_License.txt
-rwx------ 1 root root 4612305 Mar 16 02:00 vpncmd
-rwx------ 1 root root 4612477 Mar 16 02:00 vpnserver
```

## vpncmd の check コマンドによる動作チェック
vpmcmdを実行して、VPN Toolsで動作チェックを行います。

```bash
$ sudo ./vpncmd
vpncmd command - SoftEther VPN Command Line Management Utility
SoftEther VPN Command Line Management Utility (vpncmd command)
Version 4.22 Build 9634   (English)
Compiled 2016/11/27 15:23:56 by yagi at pc30
Copyright (c) SoftEther VPN Project. All Rights Reserved.

By using vpncmd program, the following can be achieved.

1. Management of VPN Server or VPN Bridge
2. Management of VPN Client
3. Use of VPN Tools (certificate creation and Network Traffic Speed Test Tool)

Select 1, 2 or 3: 3

VPN Tools has been launched. By inputting HELP, you can view a list of the commands that can be used.

VPN Tools>check
Check command - Check whether SoftEther VPN Operation is Possible
---------------------------------------------------
SoftEther VPN Operation Environment Check Tool

Copyright (c) SoftEther VPN Project.
All Rights Reserved.

If this operation environment check tool is run on a system and that system passes, it is most likely that SoftEther VPN software can operate on that system. This check may take a while. Please wait...

Checking 'Kernel System'...
              Pass
Checking 'Memory Operation System'...
              Pass
Checking 'ANSI / Unicode string processing system'...
              Pass
Checking 'File system'...
              Pass
Checking 'Thread processing system'...
              Pass
Checking 'Network system'...
              Pass

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
```

## スタートアップスクリプトへの登録
サービスとして起動させる為に、以下のようにスタートアップスクリプトを登録します。

```bash
$ sudo vim /etc/init.d/vpnserver
```

```bash:/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
```

権限設定をしておきます。

```bash
$ sudo chmod 755 /etc/init.d/vpnserver
```

自動起動設定をしておきます。

```bash
$ sudo chkconfig --add vpnserver
$ sudo chkconfig --list vpnserver
vpnserver       0:off   1:off   2:on    3:on    4:on    5:on    6:off
```

## サービスの開始と停止
以下のコマンドでサービスを開始できます。
ただ、自動起動の確認として、サーバを再起動したほうが良いかと思います。

```bash
$ sudo /etc/init.d/vpnserver start 
```

# サーバーの設定・管理
サーバーの管理はvpncmdでも可能ですが、ここではGUIで行います。
マニュアルは[こちら](https://ja.softether.org/4-docs/1-manual/3/3.3)です。

なお、管理される側のサーバはTCPポートを解放しておく必要があります。
※ここの例では443を利用しています。

サーバーの設定としては、[PC 間接続 VPN](https://ja.softether.org/4-docs/2-howto/1.VPN_for_On-premise/1.Ad-hoc_VPN)の設定を行います。

## SoftEther VPN Server Managerのインストール
サーバーと同様に[SoftEther ダウンロード センター](http://www.softether-download.com/ja.aspx?product=softether)からダウンロードしてインストールします。
GUIツールの動作環境はWindowsかMacのみです。

インストールについては、特筆すべき点はないと思います。

**ダウンロードするソフトウェア：**SoftEther VPN (Freeware)
**コンポーネント：**SoftEther VPN Server Manager for Windows
**プラットフォーム：**Windows
**CPU：**Intel (x86 and x64)

## サーバへの接続
インストールしたら「SoftEther VPN サーバー管理マネージャ」を起動して、「新しい接続設定」をクリックします。
![SoftEther_VPN_Server_001.png](https://qiita-image-store.s3.amazonaws.com/0/138821/6dfb33a0-9067-037f-fd6b-44f3d0c14b83.png)

ホスト名またはIPアドレスを指定して[OK]をクリックします。
![SoftEther_VPN_Server_002.png](https://qiita-image-store.s3.amazonaws.com/0/138821/e6ae9787-7c69-2c22-6f21-f5494a4d7084.png)

追加した接続設定を選択して[接続]をクリックします。
![SoftEther_VPN_Server_003.png](https://qiita-image-store.s3.amazonaws.com/0/138821/10712cc0-2461-8ae2-3e9a-9a78951dd5cb.png)

初回接続時には管理者パスワードの設定ダイアログが出てくるので設定を行います。
![SoftEther_VPN_Server_004.png](https://qiita-image-store.s3.amazonaws.com/0/138821/a69164f8-c0f4-7d21-d256-7d79bab4477e.png)

## 簡易セットアップ
セットアップ設定としては、以下の通り「リモートアクセスVPNサーバー」と「拠点間接続VPNサーバーまたはブリッジ」にチェックを入れ、
VPN Serverの役割としては「拠点間接続VPNの中心となり、他拠点からの接続を受け入れるVPN Server」とします。
![SoftEther_VPN_Server_005.png](https://qiita-image-store.s3.amazonaws.com/0/138821/a71f09f1-4abd-7d45-e151-6214b82a8f32.png)

仮想HUB名を指定します。
![SoftEther_VPN_Server_006.png](https://qiita-image-store.s3.amazonaws.com/0/138821/3906827d-88ab-8428-9e98-4c5a399e4ec2.png)

ダイナミックDNSホスト名を指定して、[上記のDNSホスト名に変更する]をクリックした後に[閉じる]をクリックします。
![SoftEther_VPN_Server_007.png](https://qiita-image-store.s3.amazonaws.com/0/138821/14d6ade5-c76e-9e71-a9bd-42a8002019a6.png)

IPSec / L2TP / EtherIP / L2TPv3 サーバー機能の設定は、無効のままで[OK]をクリックします。
![SoftEther_VPN_Server_008.png](https://qiita-image-store.s3.amazonaws.com/0/138821/efd44493-a0e9-b138-5aed-b55570ee5ed3.png)

VPN Azureは今回は不要なので無効にします。
![SoftEther_VPN_Server_009.png](https://qiita-image-store.s3.amazonaws.com/0/138821/d5eaf78d-86a6-d7e5-f864-cc810b568427.png)

[ユーザーを作成する]をクリックしてユーザーを作成します。
![SoftEther_VPN_Server_010.png](https://qiita-image-store.s3.amazonaws.com/0/138821/ce618e0d-0077-aa7f-2144-5d05fc85a5f7.png)

ユーザー名とパスワードを設定して[OK]をクリックします。
![SoftEther_VPN_Server_011.png](https://qiita-image-store.s3.amazonaws.com/0/138821/c666bb0c-32f6-0e71-f677-d0c2d1179e3a.png)

ユーザーが追加されたことを確認して[閉じる]をクリックします。
![SoftEther_VPN_Server_012.png](https://qiita-image-store.s3.amazonaws.com/0/138821/57504d33-6a75-c475-328c-64f95c021702.png)

今回はローカルブリッジは行わないので、そのまま[閉じる]をクリックします。
![SoftEther_VPN_Server_010.png](https://qiita-image-store.s3.amazonaws.com/0/138821/ce618e0d-0077-aa7f-2144-5d05fc85a5f7.png)

すると通常の管理画面に移ります。
必要に応じて、それぞれ設定を調整すると良いと思います。
![SoftEther_VPN_Server_013.png](https://qiita-image-store.s3.amazonaws.com/0/138821/a361c9b1-177b-af91-d77b-bab23501c03c.png)

## DHCPの設定
PC間接続VPNを構成する為に、DHCPの設定を行います。
詳細については公式ドキュメント「[10.3 コンピュータ間 VPN の構築](https://ja.softether.org/4-docs/1-manual/A/10.3)」を参照してください。

管理画面から仮想HUBを選択し、[仮想HUBの管理]をクリックして仮想HUB管理画面を開きます。
![SoftEther_VPN_Server_014.png](https://qiita-image-store.s3.amazonaws.com/0/138821/e983716c-5faf-d9d4-1339-4f7b03422ede.png)

続いて[仮想NATおよび仮想DHCPサーバー機能]をクリックします。
![SoftEther_VPN_Server_015.png](https://qiita-image-store.s3.amazonaws.com/0/138821/d332f2df-f116-3a69-f741-4064cfe1abdc.png)

[SecureNATの設定]をクリックします。
![SoftEther_VPN_Server_016.png](https://qiita-image-store.s3.amazonaws.com/0/138821/d47b4f82-a719-28fd-80a4-22f6a0a41787.png)

「仮想ホストのネットワークインターフェイスの設定」と「仮想DHCPサーバーの設定」を以下のように行います。
また「仮想NAT」は必要ないのでチェックボックスは外しておきます。
設定をしたら[OK]をクリックします。
![SoftEther_VPN_Server_017.png](https://qiita-image-store.s3.amazonaws.com/0/138821/38c1b768-3c5d-316f-0ae2-8f086addabaa.png)

最後に[SecureNAT機能を有効する]をクリックして[閉じる]をクリックします。
![SoftEther_VPN_Server_018.png](https://qiita-image-store.s3.amazonaws.com/0/138821/fee51a73-2776-081a-f107-aa01b72cd8f5.png)

以上でPC間接続VPN用の設定は完了です。

# 続き
[SoftEther VPN でPC間接続VPNをする (Client編)](http://qiita.com/Daisuke-Otaka/items/b9d99c9dcbb84cf813d7)に続きます。

# 参考
SoftEther VPN 公式サイト
・[PC 間接続 VPN](https://ja.softether.org/4-docs/2-howto/1.VPN_for_On-premise/1.Ad-hoc_VPN)
・[7.3 Linux へのインストールと初期設定](https://ja.softether.org/4-docs/1-manual/7/7.3)
・[3.3 VPN Server 管理](https://ja.softether.org/4-docs/1-manual/3/3.3)
・[10.3 コンピュータ間 VPN の構築](https://ja.softether.org/4-docs/1-manual/A/10.3)