あまり費用と労力をかけずにVPSにVPNサーバを立てる (SoftEther VPN)

## はじめに

大学のネットワークがあらゆる通信を規制しまくるので思うように研究ができない…まぢまんじぢゃん…(¿)
ということでVPSにSoftEther VPNでVPNサーバを立てて規制を回避した話。

(大学によっては学内でVPNの利用を禁止しているところもあるので注意)

同じような記事はたくさんありますがSystemdじゃなくてsysvinit使ってたりしてたりGUIを使って設定できるのに説明がなかったり…
なんやかんやでモヤモヤしたので自分なりの方法をまとめなおしました。


## 環境

- VPS: ConoHa
  - 料金自体安く、プリペイドでチャージできる使いすぎる心配がない。使った時間だけor月ごとの課金
- VPNサーバ: SoftEther VPN
  - ファイアウォールを貫通してくれる。つよい。(VPNの通信を448番ポートでやったり…)
- クライアントOS: Windows 10
  - サーバマネージャーとクライアントソフトはMac版あり。
- クライアントソフト: SoftEther VPN Client
  - 今回は規制(学校などのファイアウォール)にひっかかるのを回避するのでこれを使う。
  - 一応SoftEther VPN ServerにはL2TP/IPsecやOpenVPNの互換機能もある。

## 手順
### 1. ConoHaでVPSを立てる

残高をチャージすればすぐにサーバを立てられます。特に説明するようなこともなく簡単にできます。

自分の場合メモリ512MBのプランで全然問題ありませんでした。

OSですが今回はUbuntu18.04を利用していきます。


---
### 2. サーバの下準備

ConoHaはWebブラウザ上からコンソールを利用できます。そのため今回自分はSSHを利用していないのでそこら辺の説明は省きます。
あと今回はVPNといってもサーバのあるLANにアクセスするする目的はないので**ブリッジとかも省略してます**

コンソールにrootでログインしたらまずユーザを追加。
`# adduser [任意のユーザネーム]`

設定したいパスワードを求められるので入力。(確認あり)

↓このように入力を求められるが、Enter連打で大丈夫。

```
Enter the new value, or press ENTER for the default
		Full Name []:
		Room Number []: 
		Work Phone []: 
		Home Phone []: 
		Other []: 
```

最後にこれが出たら問題なければYを入力してEnter。

```
Is the information correct? [Y/n]
```

今作成したユーザにsudoの権限をつける
`# gpasswd -a [任意のユーザネーム] sudo`

rootからログアウウト
`# exit`

そうしたら今追加したユーザでログイン

まずは更新しておく
`$ sudo apt update`
`$ sudo apt -y upgrade`

のちのちのmakeとかに必要なソフトウェアをインストール
`$ sudo apt install -y gcc make`


---
### 3. SoftEther VPN Serverのインストール
作業用のtmpディレクトリを作って移動(ディレクトリ名は任意)
`$ mkdir tmp`
`$ cd tmp`

SoftEther VPN Serverをダウンロード(**これのURLは 2019/04/25時点での最新バージョン**)
`$ wget https://github.com/SoftEtherVPN/SoftEtherVPN_Stable/releases/download/v4.29-9680-rtm/softether-vpnserver-v4.29-9680-rtm-2019.02.28-linux-x64-64bit.tar.gz`

現在の最新バージョンは[**ここから**](https://www.softether-download.com/ja.aspx?product=softether)
選ぶのは「SoftEther VPN → SoftEther VPN Server → Linux → Intel x64 / AMD64 (64bit)」
選ぶとリンクが出る。

ダウンロードしたのを解凍(**ファイル名はダウンロードしたバージョンごとに読み替えてください**)
`$ tar -xzvf softether-vpnserver-v4.29-9680-rtm-2019.02.28-linux-x64-64bit.tar.gz`

[make](https://ja.wikipedia.org/wiki/Make)する
`$ cd vpnserver`
`$ make`
使用権許諾契約書に同意するかどうかなど聞かれるので都度1を入力してEnter

vpnserverを/usr/local/ に配置する
`$ cd ..`
`$ sudo mv vpnserver /usr/local`

パーミッションを設定する
`$ cd /usr/local/vpnserver`
`$ sudo chmod 600 *`
`$ sudo chmod 700 vpncmd vpnserver`


---
### 4. 自動起動の設定
インストールしたvpnserverをサービスとして登録して、自動で起動するようにします。
sysvinitじゃなくてSystemdを使います。

Systemdのユニットファイルを新規作成(今回はエディタにnanoを使います)
`$ sudo nano /etc/systemd/system/vpnserver.service`

```text:書き込む内容
[Unit]
Description=SoftEther VPN Server
After=network.target

[Service]
Type=forking
User=root
ExecStart=/usr/local/vpnserver/vpnserver start
ExecStop=/usr/local/vpnserver/vpnserver stop
Restart=on-failure
RestartSec=3s

[Install]
WantedBy=multi-user.target
```

Ctrl+x → y → Enter で保存。

サービスを有効化して起動
`$ sudo systemctl daemon-reload`
`$ sudo systemctl enable vpnserver`
`$ sudo systemctl start vpnserver`

いちおうリブートして確認
`$ reboot`

以上でサーバ側での作業はOK.

あとセキュリティ的にはファイアウォールを設定しておくといいかも。
ファイアウォールにひっかからないようにSoftEther VPNでは443番ポートを使うのでそこだけallow
`$ sudo ufw allow 443`
`$ sudo ufw enable`
`$ reboot`


---
### 5. クライアントPC(Windows)から管理マネージャーでサーバに接続、設定する
**次はクライアント側から設定ソフトで接続して、VPNサーバの設定をしていきます。**

まずはWindowsにVPNサーバ管理マネージャーをインストール
[**インストーラはここから**](https://www.softether-download.com/ja.aspx?product=softether)
選ぶのは「SoftEther VPN → SoftEther Server Manager for Windows → Windows → Intel (x86 and x64)」

インストールで選択するのは「SoftEther VPN サーバ管理マネージャ (管理ツールのみ)」
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142915/7c7eb11b-8808-7267-5a7e-aa1e7186911c.png" width=40%>
あとは画面に従ってインストール。

VPNサーバ管理マネージャを起動したら「新しい接続設定」をクリック
接続設定名とホスト名にサーバのIPアドレスを入力してOKをクリック
登録出来たら「接続」をクリック

正常に接続できれば、VPNサーバの管理パスワードを設定するダイアログが出てくるので設定する。

「リモートアクセス VPN サーバー」を選択して次へ
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142915/738e4fdc-ae3b-3a0b-e932-dd8b773b281d.png" width=40%>
確認ダイアログが出るので「はい」

次のダイアログ(仮想ハブ名の設定)も「VPN」のまま「OK」
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142915/9056b4c6-48ba-e331-af76-895e4e88d603.png" width=40%>
ダイナミックDNS機能の設定が出てくるが特に使わなければそのまま「閉じる」
(ダイナミックDNS機能はデフォルトでは有効なので特に使わない場合も気にしなくてOK。(止めることもできる))

この画面でもそのまま「OK」
(この画面の互換機能に加えOpenVPN互換機能とかもあるけどだいたい規制に引っかかるので今回はスルー)
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142915/f7bd9cd5-5b10-833f-c86a-3b10a718c06f.png" width=40%>

次の画面 VPN Azureは無効にするチェックを入れてOK
(Windows標準のVPN機能しか使えないとかいうときは役に立ちますが)

次の画面で「ユーザを作成する」→出てきた画面で「新規作成」→この画面が出る
VPN接続ユーザを作成する。(接続時のログイン情報。)
最低限ユーザー名とパスワードを設定してOK
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142915/ee276d2c-1422-83e2-f6a0-56cd2637fb88.png" width=40%>
ユーザが追加できたことを確認出来たら「閉じる」をクリック

「ローカルブリッジの設定」では「eth0」を選択する。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142915/64e070ce-eda7-30c3-e004-8278887c2a8c.png" width=40%>

「VM 内でのローカルブリッジ機能の使用」というダイアログが出るが問題ない。そのままOK


仮想HUB「VPN」を選択して「仮想 HUB の管理」をクリック。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142915/f535003e-15f5-ddb3-155a-35a652422301.png" width=40%>
(ちなみにこの画面にあるリスナーポートは443番以外消してOKです。)

「仮想 NAT および仮想 DHCP サーバー機能」をクリック。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142915/599f3f26-c522-752d-aaf6-fbd350821e08.png" width=40%>

「Secure NAT 機能を有効にする」をクリック。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142915/6400681d-a229-e1df-2d3f-18e72f6306c2.png" width=40%>
確認ダイアログが出るので「OK」

これでVPNサーバの設定は以上です。


---
### 6. クライアントソフトからVPN接続
そしてまた[**ここから**](https://www.softether-download.com/ja.aspx?product=softether)ダウンロード
選ぶのは「SoftEther VPN → SoftEther VPN Client → Windows → Intel (x86 and x64)」

インストールするのは「SoftEther VPN Client」
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142915/a2d61123-ea0a-9322-2d5b-5f68396f8339.png" width=40%>

あとは画面に従ってインストール

クライアントソフトを起動。
新しい接続設定の作成。
仮想LANカードは問題なければそのまま作成。



ホスト名にサーバのIPアドレス
仮想HUB名に「VPN」(変更していなければ)
VPN接続ユーザ名とパスワード
「高度な通信設定」でTCPコネクション数は8くらいに増やしておいたほうがいいです。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142915/ee447ef5-dab4-a3db-4675-d47ef2ba802c.png" width=40%>
これで接続できればOKです。お疲れさまでした。


## さいごに

今回は設定を設定ソフトから接続して行いましたが、ConoHaのスタートアップスクリプトでサーバ立てるのすべて自動化したいとかのときはサーバだけで行う方法もあります。

個人的な話になりますが初めてMarkDownでこういった記事を書きました。わかりやすく書きたかったけどとても読みずらくなってしまいました。(›´ω\`‹ )

初めてやる他の人にもわかりやすいようにするって難しいものですね。(›´ω\`‹ )

なんか自分のやり方で画像を載せるとなぞの消せないMarginができたりレイアウトに問題ありなのでもうちょっとちゃんと書けるように練習してきます。(あとちゃんとした日本語)＼＼\ ٩( 'ω' )و //／／