【AWS】EC2上にOpenVPN を作成してみました

# はじめに
AWS上のEC2にOpenVPNサーバーを構築してみました。

# 事前準備すること
1. OpenVPNクライアントをインストールしておくこと。
Link: https://openvpn.net/　
※本手順はMAC端末にOpenVPNクライアントをインストールしておきました。
1. EC2 OS: ```Amazon Linux 2```
1. セキュリティグループに使うポートはデフォルトの```UDP1194```を使わず、代わりに```UDP23333```と```TCP443```を使う
    1. ```TCP443```: VPN接続用ポート
    1. ```UDP23333```: VPN接続用ポート
    1. ```UDP1194```: 使わない
    1. ```TCP443```: 管理者ログイン用ポート（IP制限する）


# ステップ1: EC2用のIAM Roleを作成する
- ```IAM ```→```ロール```→```ロールを作成```をクリックする

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2983478/62da7d29-6b9b-6915-3f91-68f88089e16d.png)

- ```AWSのサービス```をクリックして、```ユースケース```に```EC2```を選択する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2983478/81fc6d8e-ecf4-6f67-ab24-aabc70b9066a.png)

- ```AmazonSSMFullAccess```を選択した上、```次へ```をクリックする

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2983478/56529569-dbce-369c-25c3-02b268bf5049.png)

- ```ロール名```に名前を入力の上、作成する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2983478/a8833919-d546-191e-5fd5-1f2d36ae4336.png)

- ロールが作成されたことを確認することができた

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2983478/bd094880-fb5a-1053-ea77-446b34cbd59a.png)


# ステップ2: VPCを作成する
- 作成するリソース: ```VPCなど```
- 名前タグの自動生成: ```vpn-vpc-01```
- IPv4 CIDRブロック: ```10.0.0.0/16```
- IPv6 CIDRブロック: ```IPv6 CIDRブロックなし```
- テナンシー: ```デフォルト```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2983478/beb40741-c5fc-e5a0-530a-a4a4e9821f48.png)

- AZの数: ```2```
- Public Subnetの数: ```2```
- Private Subnetの数: ```2```
- NAT Gateway: ```なし```
- VPC Endpoint: ```なし```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2983478/7c7e2b4d-ec4e-9603-94a5-f2d72cfba47c.png)

# ステップ3: セキュリティグループを作成する

基本的な詳細
- セキュリティグループ名: ```ec2-sg```
- 説明: ```ec2-sg```
- VPC: 上記ステップ2で作られたVPCを選択する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2983478/c6c10ceb-0dcd-2d37-64ce-66983abd39ac.png)

- インバウンドルール

|タイプ  |プロトコル |ポート範囲 |ソース |説明‐オプション |
|:------------------|:------------------|:------------------|:------------------|:------------------|
|HTTPS|TCP|443 |Anywhere: 0.0.0.0/0 |なし|
|カスタムUDP|UDP|23333 |Anywhere: 0.0.0.0/0 |なし|
|カスタムTCP|TCP|943 |カスタム: 管理者のIP |なし|

- アウトバウンドルール

|タイプ  |プロトコル |ポート範囲 |ソース |説明‐オプション |
|:------------------|:------------------|:------------------|:------------------|:------------------|
|すべてのトラフィック|すべて|すべて |カスタム: 0.0.0.0/0 |なし|

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2983478/e442f20e-23d2-ea67-dde2-e64d1d5e0901.png)

# ステップ4: EC2を作成する
- ```EC2```→```インスタンスを起動```をクリックする

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2983478/b29d4028-7399-225d-0365-78aea81be14e.png)

- 名前とタグ: ```vpn-server```
- アプリケーションおよびOSイメージ: ```Amazon Linux 2```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2983478/56707de0-3ce6-deb2-474d-8d14d1ec296c.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2983478/65c3e620-f8da-591d-378a-d1586bbd0d3f.png)

- ネットワーク設定
    - VPC: 上記ステップ2で作られたVPCを選択する
    - Subnet: 任意のPublic Subnetを選択する
    - パブリックIPの自動割り当て: ```有効化```にする
    - セキュリティグループ: ```既存のセキュリティグループを選択する```をチェック→上記ステップ3で作られたVPCを選択する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2983478/e592b3c3-4270-5a26-d386-d05c308b3d2e.png)

- キーペア（ログイン）: デフォルト値の```キーペアなしで続行```を選択する
※ EC2のSSMFullAccessのセッションマネージャー機能を用いてログインするため、キー認証では```キーペアなしで続行```を選択する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2983478/deb2da4e-d796-6e85-08c5-cda3204fc12e.png)

- 高度なネットワーク設定
※ 下記の図のようにデフォルト値のままにする

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2983478/a278b839-3b49-b91f-035d-98338af8364b.png)

- ストレージを設定
※ 下記の図のようにデフォルト値のままにする
- 高度な詳細
    - IAMインスタンスプロフィール: 上記ステップ1で作られたIAMロールを選択する
※ 他の設定は下記の図のようにデフォルト値のままにする

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2983478/52ec5ad1-49fc-c1a7-b000-fd23e2a57425.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2983478/70228401-04b5-4732-48c6-17b4239c65db.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2983478/43470e6b-81f8-f2f9-a82f-542368b7b6ec.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2983478/8a9634cf-96f5-7652-d69a-a72188930580.png)

- EC2インスタンスが作成されたことを確認することができた

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2983478/9e91ebf2-81e5-15d0-96dc-9494e0747241.png)

- ```セッションマネージャー```を使ってインスタンスに接続する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2983478/3c1ca143-72a0-c6a8-95bd-203097f270c0.png)

# ステップ5: EC2上にOpenVPNをインストールする
- ```Rootユーザ```に切り替える

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2983478/81bad49d-d187-6e76-a3d6-d83f9b978f07.png)

- ```openvpn-as```をダウンロードする。下記のコマンドを実行する
```
yum -y install https://as-repository.openvpn.net/as-repo-amzn2.rpm
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2983478/eb3f915c-aa78-3009-822b-1dc088eec3ec.png)

- ```openvpn-as```をインストールする。下記のコマンドを実行する
```
yum -y install openvpn-as
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2983478/40d745b3-ed2f-3092-112b-98d83e66e736.png)

- 下記のような実行結果が出力されたことを確認する
``` log
++++++++++++++++++++++++++++++++++++++++++++++
Access Server 2.12.1 has been successfully installed in /usr/local/openvpn_as
Configuration log file has been written to /usr/local/openvpn_as/init.log


Access Server Web UIs are available here:
Admin  UI: https://10.0.14.122:943/admin


Client UI: https://10.0.14.122:943/
To login please use the "openvpn" account with "xxxxxx" password.
(password can be changed on Admin UI)
+++++++++++++++++++++++++++++++++++++++++++++++
```
- 接続確認をするため、EC2のPubic IPを用いて、上記ログ内のPrivate IPに置換する。例:
    - As-Is: https://10.0.14.122:943/admin
    - To-Be: https://3.233.237.237/admin
※Public IPに置換する
※Public IPの確認方法は下記の図のようにインスタンスのコンソール画面を確認してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2983478/0a08ef21-0ed5-1b39-bb25-0e4e037400fe.png)

- 上記のリンクをアクセスし、ユーザー名とPWを入力の上、サインインしてください

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2983478/8796a1e4-dd27-1752-6357-6dc3574ccc4b.png)

- ```Configuration```→```Network Setting```を開き、下記のように設定を変更する
    - Hostname or IP Address: EC2のパブリックIPを入力する
    - Number of UDP daemons: 1
    - UDP Port number: 23333
    ※その他の設定は変更なし

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2983478/51580771-07a5-f7ab-7aae-d49985dc3c12.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2983478/ce8c8342-bc50-2d67-459f-d0dd2e313b4f.png)

- ```User Management```→```User Permissions```を開き、下記のようにユーザーを追加する
    ※Allow Auto-loginにチェックを入れる

![OpenVPN-user creation.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2983478/a3cdc0e6-d8bf-6f4a-982f-b37afcca0f90.png)

# ステップ6: OpenVPNのクライアント側の接続を確認する
- URLにEC2のPublic IPを入力の上、```NEXT```を押下する
![OpenVpn-connect.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2983478/0935301c-8e24-89f5-dcf1-3faf67d1cef6.png)

- 以下のような画面が表示されれば、```Accept```を押下する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2983478/c2c28f5d-f0cb-50b4-91b3-c3137cc43827.png)

- ```Username```と```Password```に自分が設定したものを入力する
- ```Import autologin profile```にチェックを入れる
- ```Import```を押下する

![OpenVpn-connect2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2983478/341a6401-4f98-037f-aa40-50df2d27bf68.png)

- 下記の図のように```CONNECTED```が表示されれば、接続成功

![OpenVPN-Connect3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2983478/67dc12e1-f7d9-e2b4-ecac-d24b97f6cb10.png)