AWSクライアントVPN経由でインターネットアクセスする方法

# この記事でやること
AWSクライアントVPNを構築し、VPN経由でインターネットアクセスする。

# 要件
- VPC(ap-northeast-1)
    - 192.168.0.0./16
- サブネット
    - パブリックサブネット
        - (192.168.2.0/24)
- 認証方式
    - 相互認証
- VPNクライアントサービス
    - AWS VPN Client



## VPC、サブネットの作成

作成リージョン：東京リージョン

- VPC(192.168.0.0/16)
![Screenshot 2023-09-21 at 19.33.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626370/c1d6a1cb-34b3-ecb7-6915-6b43bdc9d7a2.png)

- インターネットゲートウェイ

![Screenshot 2023-09-21 at 21.17.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626370/14e2f502-51b7-5fc3-4824-920b070ec659.png)


- サブネット(192.168.2.0/24) 

![Screenshot 2023-09-21 at 21.28.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626370/0abda8b2-6a23-03ec-0242-68086a2104d9.png)

- ルートテーブル
    - public-subnet-1aに関連付け

![Screenshot 2023-09-21 at 21.27.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626370/4a2976d3-7f6d-57eb-eeea-54382dd7c541.png)


## 証明書の発行・ACMへ登録
相互認証で使用する証明書の発行とACMへの登録をやっていきます。

今回は、OpenVPN easy-rsa を使用してサーバーとクライアントの証明書とキーを生成してから、そのサーバーの証明書とキーを ACM にアップロードします。

証明書の作成
```
$ git clone https://github.com/OpenVPN/easy-rsa.git
$ cd easy-rsa/easyrsa3
$ ./easyrsa init-pki
$ ./easyrsa build-ca nopass
$ cp -p vars.example vars

$ ./easyrsa init-pki
$ ./easyrsa build-ca nopass
$ ./easyrsa build-server-full server nopass
$ ./easyrsa build-client-full client1.domain.tld nopass
```

ACMのコンソールに移動し、作成した証明書のインポートを行います
```
証明書本文
$ cat /easy-rsa-master/easyrsa3/pki/issued/server.crt

プライベートキー
$ cat /easy-rsa-master/easyrsa3/pki/private/server.key

証明書チェーン
$ cat /easy-rsa-master/easyrsa3/pki/ca.crt
```

![Screenshot 2023-09-21 at 20.43.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626370/1a3a2b77-7361-c5aa-06a8-9b0bd67d4264.png)


詳しくは以下参照

https://zenn.dev/horitomo/articles/9d5c42a2386397



## クライアントVPNエンドポイントを作成する
以下で作成します。
- IPアドレス範囲:172.0.0.0/20
- 認証方式：相互認証(先ほど作成した証明書を選択します)
- DNSサーバーの値を192.168.0.2に設定
    - Amazon Provided DNS

他項目はデフォルト値。

## VPNエンドポイントとVPCの関連付け

認証ルール
![Screenshot 2023-09-21 at 20.58.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626370/62f306e1-0e2f-d82b-9f85-8023c2310232.png)


ターゲットサブネットの関連付け
![Screenshot 2023-09-21 at 21.00.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626370/26108423-d0ac-5f51-3744-b2b8cd1ae4db.png)

しばらくするとステータスが[Available]になります。

## インターネットへのアクセスを許可する

ルートの追加
- [0.0.0.0/0]のルートを追加

![Screenshot 2023-09-21 at 21.21.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626370/5f9fe436-4e37-4071-24af-45ca208d4795.png)

承認ルールの追加
- [0.0.0.0/0]へのアクセスを許可

![Screenshot 2023-09-21 at 21.20.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626370/8819f927-deac-9951-9dd2-73064514fdec.png)


## クライアント VPN エンドポイント設定ファイルをダウンロードする
AWSコンソール上の「クライアント設定をダウンロード」を押下して、VPN設定ファイルをローカルにダウンロードします。


ダウンロードしたVPN設定ファイルの末尾に以下内容を追加します。

```
<cert>
Contents of client certificate (.crt) file
</cert>
※easy-rsa/easyrsa3/pki/issued/client1.domain.tld.crtをコピペ

<key>
Contents of private key (.key) file
</key>
※easy-rsa/easyrsa3/pki/private/client1.domain.tld.keyをコピペ
```

## AWS VPN Clientの設定

AWS VPN Clientをダウンロードします。
ダウンロードは以下かから。

https://aws.amazon.com/jp/vpn/client-vpn-download/



インストール成功したら起動して、[File]、[Manage Profile]、[Add Profile]から先ほど作成したVPN設定ファイルを選択します。

![Screenshot 2023-09-21 at 21.47.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626370/27c57ee6-b655-d20a-9750-99847fc2ead7.png)


Connectします。

![Screenshot 2023-09-21 at 21.54.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626370/3ae0083e-5af3-6bcc-55e0-8020fcac09f6.png)

成功しているようです。

VPN経由でインターネットアクセスができるか接続確認したいと思います。

VPN接続時
![Screenshot 2023-09-21 at 22.14.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626370/d27c30cd-1e2b-4568-aa84-ba629c756b9c.png)

確かにVPN経由でインターネットアクセスできていることが確認できました。

## 参考文献
https://docs.aws.amazon.com/ja_jp/vpn/latest/clientvpn-admin/cvpn-getting-started.html#cvpn-getting-started-config

https://docs.aws.amazon.com/ja_jp/vpn/latest/clientvpn-admin/mutual.html


今回はここまで。ありがとうございました！！