LightsailでSecureNATを有効化したSoftEther VPN Serverを構築する

AWSの料金面での落とし穴といえば、通信料ですよね。東京リージョンであれば0.114USD/GBなので、1TBのデータをAWSから引き出すと1万円以上かかってしまいます。

しかし、例外なのがLightsailです。一番安いプラン(3.5USD)でも1TBの通信料が含まれているため、多量の通信でも気にせずに利用することができます。そこで、VPNサーバをLightsail上に立ててみることにしました。

# 環境
- Lightsail Linux 3.50USDプラン（512 MB メモリ）
- Amazon Linux 2 (2.0.20201218.1) 
- SoftEther VPN Ver4.34 Build 9745

# Linuxサーバーの構築
SoftEtherはWindowsで構築するのが手っ取り早いのですが、費用の関係上Linuxを使います。サーバを起動させる手順は省略します。
サーバー起動後、インスタンスのネットワーキング設定の中にあるIPv4Firewallを以下のように設定しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/776880/8839f9cd-878b-4bb9-c4bb-af173eae53ec.png)

# SoftEtherのインストール
Linux上にSoftEtherをインストールする手順については、[Qiitaですでにインストール手順がありましたので、そちらを参考にします。][1]
wgetで拾ってくるURLは、以下のダウンロードセンターで手に入ります。
https://www.softether-download.com/ja.aspx?product=softether

```
sudo yum install gcc -y
wget <SoftEtherダウンロードのURL>
tar xzvf <ダウンロードしたファイル>
cd vpnserver
make
```

makeコマンドを実行すると、利用規約に同意するか確認する画面が現れます。すべて、1を押してEnterすることで同意できます。
makeコマンドが完了すると、SoftEtherが利用できる状態になります。/usr/local配下に移動させ、パーミッションを設定します。

```
cd ../
sudo mv vpnserver/ /usr/local/
cd /usr/local
sudo chown -R root:root vpnserver
cd vpnserver
sudo chmod 600 *
sudo chmod 700 vpncmd
sudo chmod 700 vpnserver
```

SoftEtherVPNをサービスに登録し、起動します。

```
sudo vi /etc/systemd/system/vpnserver.service
```

```plaintext:vpnserver.service
[Unit]
Description=SoftEther VPN Server
After=network.target network-online.target

[Service]
ExecStart=/usr/local/vpnserver/vpnserver start
ExecStop=/usr/local/vpnserver/vpnserver stop
Type=forking
RestartSec=3s

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

```
sudo systemctl start vpnserver
sudo systemctl enable vpnserver
```

# SoftEtherの初期設定
ここからはクライアントPC側で操作します。GUI操作を使うため、Windowsが必要です。
以下のURLより、SoftEther VPN Server Managerをインストールします。
https://www.softether-download.com/ja.aspx?product=softether

Managerよりサーバーに接続後、設定する点は以下です。

### ユーザーの追加
Defaultの仮想ハブの管理画面を開き、「ユーザーの管理」よりユーザーを追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/776880/0a70bebc-21f8-aa09-6b76-ef23efeb14a2.png)

### 仮想NATの設定
Defaultの仮想ハブの管理画面から、「仮想NATおよび仮想DHCPサーバー機能」を開きます。開いた画面より、「SecureNATの設定」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/776880/d6c2a5c3-c0ef-9a96-431f-37745ef9f347.png)

開いた画面で以下の設定を実施します。

- デフォルトゲートウェイを**削除**
- プッシュする静的ルーティングテーブルを画像のように編集
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/776880/cf288e4f-975b-2312-c7ad-7f09a00ed049.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/776880/e09f7cb8-3814-4c6e-08ba-fa3bde02661f.png)

LightsailのプライベートIPが、私の環境では172.26.xx.xxであったため172.26.0.0/16の範囲をルーティングするようにします。また、VPCピアリングで接続したデフォルトVPCのセグメント(172.31.0.0/16)に対しても、ルーティングするように設定します。
(LightsailのプライベートIPは、インスタンスの設定画面で確認できます)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/776880/897a2549-d641-e297-99b7-95b33dafe3e9.png)

設定が終わったら、SecureNAT機能を有効にします。

# 接続テスト
接続テストのため、WindowsにSoftEtherのクライアントをインストールします。
インストール後、「新しい接続設定の作成」より、VPNサーバーの情報とユーザー認証情報を入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/776880/79a03de5-cc3e-7e57-a91c-5a61f91dd5c3.png)
接続して、プライベートIPで目的のインスタンスに繋ぐことができるか確認します。

# 感想
実は、今回VPNサーバは拠点間接続の目的で立てたかったのですが、NATを有効化しなければいけない時点で(AWSからクライアントへの接続が無理なので)拠点間接続は諦めました。。。
LightsailのVPCは内部上は存在していると考えられますが、ユーザー側で触ることができず、ルートテーブルの変更が不可能なためです。
でも、せっかくtryしたので、供養のために記事にしました。

***VPNサーバーでNATをかけても問題のないシチュエーション***であれば、今回の構築は有用ではないかと思います。実際に利用する場合は、セキュリティ面も考慮してください。（証明書認証を利用する、など）

# 参考にした記事

[LinuxでSoftEther VPNを使ってみる（サーバー、クライアント）][1]

[1]:https://qiita.com/katonux/items/beeef8b88e4be6698a34