Client VPNからのPrivate Subnetアクセス


### １．目的

オンプレミスからPrivate Subnetへのアクセスは、以下の接続方式などがあります。

1. 閉域網アクセス（Direct Connect）
2. VPNアクセス（サイト間VPN）
3. VPNアクセス（Client VPN）

本記事では、Client VPNの設定方法について解説します。サイト間VPNと比較して専用のルータ等を必要とせずに、作業用PCさえあれば実現可能という観点では、個人利用では最も設定が容易な接続方式だと思います。



![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482612/adf6097c-8bfe-10cb-0215-d4e18e74f9e1.png)



### ２．手順（AWS側）


VPN接続の認証は 3種類（AD認証, サーバ証明書・クライアント証明書による相互認証、これら組み合わせによる認証）から選択することが可能です。今回は、***サーバ証明書・クライアント証明書による相互認証***を採用します。まず、認証に必要な証明書を作成します。Githubにアクセス可能な任意のサーバから実行します。

```bash:証明書の作成
git clone https://github.com/OpenVPN/easy-rsa.git
cd easy-rsa/easyrsa3
./easyrsa init-pki
./easyrsa build-ca nopass
./easyrsa build-server-full server nopass
./easyrsa build-client-full client1.domain.tld nopass
mkdir ~/cert_folder/
cp pki/ca.crt ~/cert_folder/
cp pki/issued/server.crt ~/cert_folder/
cp pki/private/server.key ~/cert_folder/
cp pki/issued/client1.domain.tld.crt ~/cert_folder
cp pki/private/client1.domain.tld.key ~/cert_folder/
cd ~/cert_folder/
```

作成した証明書をACMへインポートします。AWS Management Consolでも登録可能ですが、 以下ではAWS CLIで実行します。


```bash:ACMへのインポート
aws acm import-certificate --certificate fileb://server.crt --private-key fileb://server.key --certificate-chain fileb://ca.crt --region ap-northeast-1
aws acm import-certificate --certificate fileb://client1.domain.tld.crt --private-key fileb://client1.domain.tld.key --certificate-chain fileb://ca.crt --region ap-northeast-1
```

VPCサービスより、Client VPNエンドポイントを作成します。Client VPN経由でアクセスするPCのネットワークレンジをクライアントIPv4 CIDRに記載します。接続先のVPCとは別のネットワークレンジを指定します。ACMに登録済のサーバ証明書、クライアント証明書も以下キャプチャの通り設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482612/59c16bcd-8200-1e2d-c807-bfdbfbc47b3d.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482612/cef4358d-acb6-8563-714e-745aa66c299c.png)

Client VPNエンドポイントの作成が完了したら、接続先のVPCのサブネットに関連付けを行います。



![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482612/2d51f2d5-9f7c-fcb8-cc61-b9f8439568db.png)


続いて、受信の承認を設定します。接続先のVPCのCIDRブロックを許可するように設定します。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482612/ca8392b8-60c1-2e26-c146-756ba9397675.png)


クライアント設定のダウンロードを行いACMに登録したサーバ証明書と秘密鍵を、設定ファイルの末尾に追加します。

```bash:設定ファイルの編集その１
<cert>
※client1.domain.tld.crt(-----BEGIN CERTIFICATE-----～-----END CERTIFICATE-----)の内容※
</cert>

<key>
※client1.domain.tld.key（-----BEGIN PRIVATE KEY-----～-----END PRIVATE KEY-----）の内容※
</key>
```

そして、その設定ファイルのVPCエンドポイントの値のプレフィックスに任意の文字列を追加します。


```bash:設定ファイルの編集その２（設定例です）
aiueo.cvpn-endpoint-XXXXXXXXXXXXXXXX.prod.clientvpn.us-west-2.amazonaws.com
```

### ３．手順（オンプレミス側）


サポートのことも考えて、AWS公式のOpen-VPNクライアントツールを使用します。[ここ](https://aws.amazon.com/jp/vpn/client-vpn-download/)からダウンロードすることができます。上記手順でダウンロード＆編集した設定ファイルをVPN設定ファイルに取り込みます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482612/9d639056-d1d3-7ca0-332b-0e01d2e5b2d4.png)

設定ファイルを取り込み後、VPN接続することが可能です。紐づけたSubnet内のPrivate IPに対してSSHやPINGなどでアクセスすることができます。

### その他

Client VPNの設定情報はCloudwatchの統計情報で確認することができます。例えば、ActiveConnectionsCountで0になったらアラートが上がるといったような仕掛けを設けるとよいかもしれません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482612/0f056e95-dac1-c923-4ffe-501225653be1.png)


以上

### 参考情報

- [Client VPNの設定を非常にわかりやすく纏まっている技術ブログ](https://fu3ak1.hatenablog.com/entry/2020/08/12/145243)