【初心者】AWS Wavelengthを使ってみる #3 (SoftEtherによるVPN通信)

# 1. 目的

- AWS Wavelengthは2021/9現在、日本国内はKDDI網のみからアクセス可能。
- KDDI端末(スマホ)にテザリングしたPCとWavelength上のサーバ間でVPN通信したい、またテザリングしたPC間でもVPN通信したいというニーズがあり、SoftEtherでのVPN環境構築を行い動作確認を行う。

# 2. やったこと
- AWS Wavelength上にSoftEtherのVPNサーバを立てる。
- KDDI端末(スマホ)でテザリングしたPCからVPNサーバに接続し、Wavelength上のサーバにVPN経由でアクセスする。また、2台のテザリングしているPCでそれぞれ同時にVPNサーバへの接続を行い、相互に通信できることを確認する。 

# 3. 構成図

![softether構成図.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189302/2db456be-9f6e-5b14-3e06-0b8e8d8b7038.png)

# 4. 実施手順

## 4.1 全体の流れ
- Wavelength Zone 内にインスタンスを起動し、SoftEther Serverをインストールし、VPNユーザ用のIDの登録やVPN接続時に払い出すプールIPの設定を行う。
- SoftEther Serverをインストールしたインスタンスに、SoftEther Client もインストールし、自分自身もVPN Clientとして接続する。
- SoftEther Clientを手元のPC(Win10)にインストールし、SoftEtherネイティブでのVPN接続を行う。
- MACにはSoftEther Client ソフトがないため、手元のPC(MAC)ではOS標準のVPN機能(L2TP over IPSEC) を用いてVPN接続を行う。
- Wavelength上のServer、PC(Win10)、PC(MAC)が互いに通信できることを確認する。

## 4.2 事前準備
- 構成図のようなインフラ環境を準備する。
    - VPC作成
    - Wavelength Zoneに紐づくSubnet作成
    - Wavelength Zoneで起動する Windows Server 2019 のEC2インスタンス作成
    - EC2インスタンスへのキャリアIP付与
    - SecurityGroupの設定(443/tcp, 500,4500/udpのみ許可)

## 4.3 SoftEther サーバの構築
- 公式サイトの手順「[ローカル PC をクラウドへ参加させる方法](https://ja.softether.org/4-docs/2-howto/2.VPN_for_Cloud/1.Join_a_Local_PC_into_Cloud)」を参照して構築する。(公式サイトの手順は少し作業ステップが省略されているため以下で補足する。)

## 4.3.1 SoftEther VPN Serverの設定
- [「SoftEtherダウンロードセンター」](https://www.softether-download.com/ja.aspx?product=softether)から、SoftEther VPN Server (Windows版) をダウンロードする。

- インストーラを実行する。完了すると以下の初期設定画面になる。

![softether01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189302/01282a3b-661c-be41-724c-55fefde19787.png)

- 「接続」を押すと、システム管理用のパスワード設定画面となるため、パスワードを設定する。

![softether02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189302/762943f4-2504-0048-feb3-b0f0e1496a80.png)

- パスワード設定後、機能選択画面となる。今回は「リモートアクセスVPNサーバー」のみ選択する。

![softether03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189302/ac356873-04e2-a77f-3153-762387296fdf.png)

- 仮想HUBの名前を指定して作成する。

![softether04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189302/63e8b4f5-f175-2f7a-df57-f0e7be66cfa4.png)

- DDNSの設定が自動で行われることを確認する。（今回の検証では使用しない）

![softether05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189302/478b9910-f1dc-9f32-dfb6-f5929b14d6bf.png)

- 「IPsec/L2TP/EtherIP/L2TPv3 サーバー機能の設定」　の画面にて、「L2TPサーバ機能を有効にする」にチェックを付ける。(今回、MACからのL2TP接続を受け付けられるようにしたいため) また、併せてIPsec事前共有鍵の設定を行う。

![softether06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189302/a956ac95-40ed-b956-1c3a-6da9906c0b0d.png)

- VPN Azure は今回は使用しないため無効にする。

![softether07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189302/33416dfd-e66b-f0af-8be2-2af1db23dbd1.png)

- ユーザーの管理画面となるため、「新規作成」からユーザを登録する。
![softether08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189302/5745c52d-c162-0a07-a1d9-dedf12002dd9.png)

- ユーザ名、パスワードを設定し、3名分登録する。(以下のように使用する想定)
    - user01: Wavelength上のVPNサーバ自体を仮想HUBに参加させる用
    - user02: Windows PC (Softether専用クライアント) からのVPNアクセス用
    - user03: MAC (OS付属のL2TP over IPSEC機能) からのVPNアクセス用
    
![softether09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189302/ccef7624-2764-e6fb-5ac4-90c4d145bc83.png)

- 3名分登録されたことを確認する。

![softether10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189302/6ddb849b-e917-55dc-eb01-e318d095129a.png)

- 「3. ローカルブリッジの設定」の項目で、VPNで使用するNICを選択する。今回のインスタンスには一つしかNICがないためそれを選択する。

![softether11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189302/a1466f30-6dfb-fa37-0027-23c963f6f4aa.png)

- いったん初期設定が完了し、以下の管理画面が表示される。
- クライアントが接続した際にDHCPでVPN用のIPアドレスを払い出したいため、追加の設定を行う。仮想HUB「mksamba-hub」を選択し、「仮想HUBの管理」の画面に移動する。

![softether12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189302/35a98185-e39e-232a-566d-b72ce20d6309.png)

- 仮想HUBの管理画面にて、「仮想NAT及び仮想DHCPサーバー機能」の画面に移動する。

![softether13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189302/47535c85-38df-0c86-48dc-5dc25dfc36f5.png)

- 「SecureNAT機能を有効にする」を押して機能を有効化した後、「SecureNATの設定」の画面に移動する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189302/ae8347d1-7d4f-c8b7-1c2b-9b451f87a303.png)

- 「仮想DHCPサーバー機能を使用する」にチェックを入れて、併せてリースするIPレンジを設定する。

![softether14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189302/917074fb-7ea7-618a-5614-6454cd3af9fd.png)

- ここまででいったんVPNサーバ側の設定が完了。

## 4.3.2 SoftEther VPN Clientの設定

- 引き続き同じEC2インスタンスで、VPNクライアントとしての設定を行う。（このインスタンス自体をクライアントとして仮想HUBに接続し、外部からVPN経由でアクセス可能とするため）

- [「SoftEtherダウンロードセンター」](https://www.softether-download.com/ja.aspx?product=softether)から、SoftEther VPN Client (Windows版) をダウンロードする。

- インストール直後の初期画面は以下となる。

![softether16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189302/55c87746-4c0a-87c9-3512-15f0d6cf19ba.png)

- 「新しい接続設定」の作成に当たり、仮想LANカードの作成が必要となるため、作成する。
![softether17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189302/4472ce2b-5b30-8776-6e7a-3b05b714776b.png)

- 「新しい接続設定」から、接続設定を作成する。接続先ホストはlocalhost、ユーザはあらかじめ作成しておいたuser01を使用する。

![softether18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189302/74e152d0-c802-4b48-25bb-11bb1dcacf75.png)

- 登録した接続先(localhost)に接続を行い成功すると、プールIP(192.168.30.10)が払い出される。

![softether19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189302/5226b745-799b-2ac2-90e1-404e535fa31e.png)

## 4.4 SoftEther Clientによる接続(Win10)

- サーバと同じSoftEther Clientを手元のPC(Win10)にインストールする。
- 設定手順は概ね同様。接続設定の画面で、接続先ホストを SoftEther ServerのインスタンスのキャリアIP(グローバルIP)とし、ユーザはuser02を使用する。

![softether20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189302/30972f2f-954d-2f0b-c3bd-d8317c204fb8.png)

- VPN接続完了後、プールIP(192.168.30.11)が払い出され、サーバ(192.168.30.10)へのpingが可能なことを確認する。

```
C:\Users\mksamba>ipconfig
Windows IP 構成
不明なアダプター VPN - VPN Client:

   接続固有の DNS サフィックス . . . . .: ap-northeast-1.compute.internal
   IPv4 アドレス . . . . . . . . . . . .: 192.168.30.11
   サブネット マスク . . . . . . . . . .: 255.255.255.0
   デフォルト ゲートウェイ . . . . . . .: 192.168.30.1

C:\Users\knmat>ping 192.168.30.10

192.168.30.10 に ping を送信しています 32 バイトのデータ:
192.168.30.10 からの応答: バイト数 =32 時間 =59ms TTL=128
192.168.30.10 からの応答: バイト数 =32 時間 =54ms TTL=128
192.168.30.10 からの応答: バイト数 =32 時間 =59ms TTL=128
192.168.30.10 からの応答: バイト数 =32 時間 =53ms TTL=128

192.168.30.10 の ping 統計:
    パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
    最小 = 53ms、最大 = 59ms、平均 = 56ms
```
## 4.5 L2TP over IPSECによる接続(MAC)
- MAC用のSoftEther Clientはないので、MACからの接続にはOSに付属するL2TP over IPSECの機能を用いる。
- VPNの設定を新規作成する。

![softether21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189302/ea1fab0b-0dff-a7df-b33e-7dfcb19eeefd.png)

- 接続用の設定を行う。サーバアドレスにSoftEtherサーバのキャリアIP(グローバルIP)を指定し、サーバ側で登録したユーザ名(user03)、パスワード、共有シークレットを併せて設定する。


![softether22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189302/20b7bd8b-17e7-e622-8dfa-f1b79da0aced.png)

![softether23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189302/405c667b-3a8d-3b35-cfaa-668d8f5a4640.png)


- 接続するとVPN用のIP(192.168.30.12)が取得される。

![softether24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189302/6dda0ffe-d8e8-3b55-ef4f-cd1bf0e7f268.png)


- VPN接続完了後、Wavelength上のサーバ(192.168.30.10)、PC（Win10, 192.168.30.11)にping可能。

```
mksamba@MacBook-Air ~ % ping 192.168.30.10

PING 192.168.30.10 (192.168.30.10): 56 data bytes
64 bytes from 192.168.30.10: icmp_seq=0 ttl=128 time=69.370 ms
64 bytes from 192.168.30.10: icmp_seq=1 ttl=128 time=62.562 ms
64 bytes from 192.168.30.10: icmp_seq=2 ttl=128 time=80.244 ms
64 bytes from 192.168.30.10: icmp_seq=3 ttl=128 time=92.767 ms
64 bytes from 192.168.30.10: icmp_seq=4 ttl=128 time=66.945 ms
64 bytes from 192.168.30.10: icmp_seq=5 ttl=128 time=67.308 ms
64 bytes from 192.168.30.10: icmp_seq=6 ttl=128 time=60.967 ms
^C
--- 192.168.30.10 ping statistics ---
7 packets transmitted, 7 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 60.967/71.452/92.767/10.436 ms

mksamba@MacBook-Air ~ % ping 192.168.30.11

PING 192.168.30.11 (192.168.30.11): 56 data bytes
64 bytes from 192.168.30.11: icmp_seq=0 ttl=128 time=216.721 ms
64 bytes from 192.168.30.11: icmp_seq=1 ttl=128 time=153.666 ms
64 bytes from 192.168.30.11: icmp_seq=2 ttl=128 time=126.426 ms
64 bytes from 192.168.30.11: icmp_seq=3 ttl=128 time=118.235 ms
64 bytes from 192.168.30.11: icmp_seq=4 ttl=128 time=131.119 ms
^C
--- 192.168.30.11 ping statistics ---
5 packets transmitted, 5 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 118.235/149.233/216.721/35.731 ms
```


# 5. 所感
- SoftEtherは管理画面も分かりやすく、マニュアルも充実しており、非常に簡単に設定することができた。