P2S VPN - Azure 証明書認証 で接続する

# はじめに
本記事では、クライアント PC が Azure 仮想ネットワーク へ P2S（ポイント対サイト）で接続する方法を紹介していきます。

**イメージ図**
下図では P2S 接続 と S2S 接続 の比較を示していますが、本記事では 右側の P2S 接続 を扱っています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/08a7ccb6-a441-881a-2e48-4f5e7474fa53.png)

**接続時の認証方式**
VPN Gateway に接続する際の認証方式は、３通り存在しています。
- Azure 証明書認証
- Microsoft Entra ID 認証
- RADIUS 認証

本記事では 以下の公開情報に記載されている **Azure 証明書認証** について、画面キャプチャ付きの手順を解説していく内容となっています。

**公開情報：P2S VPN Gateway 証明書認証のサーバー設定を構成する**

https://learn.microsoft.com/ja-jp/azure/vpn-gateway/point-to-site-certificate-gateway?wt.mc_id=mvp_407731

# 前提事項
本記事では、VPN ゲートウェイ がデプロイ済みであることを前提としています。

基本的な VPN ゲートウェイ の仕組みや デプロイ方法は、以下の記事にまとめてありますので、先に そちらの記事を参照して、デプロイを実施してください。

**Azure VPN Gateway のデプロイと ARMテンプレートでの再作成**
最初の VPN ゲートウェイ をデプロイする手順や、それを ARM テンプレート化して再利用する方法などを紹介しています。

https://qiita.com/carol0226/items/2504c08a88a53bb35f2b

**Azure VPN Gateway について**
SKU（機能、性能、コスト）の違いや、インスタンス、動作モード、可用性ゾーン (AZ)、接続方式 (S2S/V2V/P2S) などについて、詳細に解説しています。

https://qiita.com/carol0226/items/f28f381e3dcf43590d7b

# ネットワーク設計
P2S 接続を行う 仮想ネットワークは、以下の設定値 であることを前提としています。
前提事項で説明した手順で構成した 仮想ネットワーク は この構成と 同一になっています。

|変更点|役割|名称|アドレス|
|:-:|:-:|:-:|:-:|
|－|リソースグループ|AVD-Environment|－|
|－|仮想ネットワーク<br>(アドレス空間)|AZ-DefaultVNet|10.10.0.0/16|
|－|サブネット１|Subnet1|10.10.10.0/24|
|－|サブネット２|Subnet2|10.10.20.0/24|
|－|ゲートウェイサブネット<br>管理用サブネット|GatewaySubnet|10.10.50.0/24|

# 環境構築
P2S Azure 証明書認証 を利用するためには、以下の段取りで進めていきます。

**1. 証明書の作成**
検証向け、本番運用向けなど、いくつかの作成方法がありますが、いずれかの方法で ルート証明書 と クライアント証明書 を発行します。
　
**2. Azure 側で行う作業**
VPN ゲートウェイ で P2S の構成をおこない、ルート証明書 をインポートします。
※P2S の設定としては、実は ココだけです。あとは 証明書のお作法。

**3. クライアント PC 側で行う作業**
クライアント証明書 をインポートし、VPN に接続するための設定を行います。
証明書のインポート方法や、VPN に接続する方法は、何通りか存在します。

## 1. 証明書の作成
本構成の構築には、**ルート証明書** と **クライアント証明書** が必要です。

**証明書ごとの利用目的**
|証明書の種類|利用される場所|目的|
|:-:|:-:|:-:|
|ルート証明書|Azure VPN ゲートウェイ|接続してきたクライアントが このルート証明書から発行された クライアント証明書を持っているのかどうかをチェックする
|クライアント証明書|VPN 接続に利用する クライアント PC|自身が VPN 接続 が許可された PC であることを示すため

証明書は、以下のいずれかの方法で作成する事ができます。
初めて P2S を構築する際には、まずは 自己署名証明書 を使って構成することをお勧めします。
P2S の扱いに慣れて、本運用を検討する際に AD CS か Intune の利用を検討してください。
- **自己署名証明書**（テスト向け）
コマンドで簡単に 数分で作成する事ができます。
すぐにでも、P2S の接続テストを行いたい場合に利用できます。
作成した証明書は、VPN 接続したい PC へ 手動でインポートします。

**公開情報：PowerShell を使用したポイント対サイトの証明書の生成とエクスポート**

https://learn.microsoft.com/ja-jp/azure/vpn-gateway/vpn-gateway-certificates-point-to-site?wt.mc_id=mvp_407731

- **Active Directory 証明書サービス (AD CS)**（オンプレミス環境での運用向け）
別途、AD CS の環境を準備するための構成が必要です。
この環境があれば、クライアント証明書の作成や、ドメイン参加の PC への自動配布が行えます。
構成が完了していれば、管理者の手を煩わせることなく、VPN 接続の証明書管理が可能になります。

:::note warn
**AD CS の構築方法（参考）**
以下の記事は、私が AD CS を使って **WiFi 接続用** の証明書を自動配布する方法を解説した記事になっています。いずれ **VPN 用** の記事を書きたいと思いますが、この程度のボリュームの作業が必要と思ってください。
https://qiita.com/carol0226/items/564a21455cd3e5f58906
:::

- **Intune**（クラウドでの運用向け）
別途、Intune の環境を準備するための構成が必要です。
**Intune Cloud PKI** または、**Intune と AD CS との連携** によって、クライアント証明書の発行と配布までを自動化できます。
構成が完了していれば、管理者の手を煩わせることなく、VPN 接続の証明書管理が可能になります。
　
この環境の構築方法は、以下の記事で解説しています。

https://qiita.com/carol0226/items/29bdc47e98e43aa32141

## 2. Azure 側で行う作業
この章では **P2S 構成の作成** と **ルート証明書 のインポート** を実施します。
前章で作成した ルート証明書 を Azure VPN ゲートウェイ にアップロードする作業です。
VPN ゲートウェイの構成時に、１回のみ実施します。

0. 前章で作成した ルート証明書 を用意します。
AD CS や、Intune Cloud PKI で作成した場合は、各環境から ルート証明書を **Base64 形式** でダウンロードしてください。
作成された ルート証明書 が 任意（下図では C:\Cert）のフォルダに保存されている想定から手順を開始します。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/ca946d97-8ea7-2571-e1fe-3d27790ac12b.png)
　<br>
0. メモ帳を開き、ルート証明書 をドラッグ＆ドロップして開きます。
![image.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/de146863-1eb9-a4b6-eb6a-452d080bb482.jpeg)
　<br>
0. 下図を参考に 水色で括られた箇所を範囲選択したあと、右クリックして **コピー** を選択します。
※このとき、--BEGIN CERTIFICATE-- や --END CERTIFICATE-- は含めないでください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/6e531545-df47-93f1-c6aa-f6c4daf06907.png)
　<br>
0. Azure Portal で VPN ゲートウェイ のリソースを開きます。
左ペインで **設定** を開き **ポイント対サイトの構成** を選択します。
続いて **今すぐ作成** をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/ef8a8696-80f3-3a15-f168-0003161495f3.png)
　<br>
0. 下図を参考に 番号順 に設定値を 入力 していきます。
① **アドレスプール**：仮想ネットワーク や クライアントが接続する可能性のあるネットワークと被らないアドレス範囲を考慮して、指定してください。
② **トンネルの種類**：IKEv2 と SSTP (SSL) を選択します。
③ **認証の種類**：Azure 証明書認証 を選択します。
④ **名称**：アップロードするルート証明書の出どころが判るような名前を記入します（動作には影響しません）
⑤ **公開証明書データ**：前項で **コピー** した内容を そのまま この場所に貼り付けます。
⑥ すべての項目を入力したら、**保存** ボタンを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/a4e19b2c-7e16-0080-9545-628eae2a0bee.png)
　<br>
0. 以下の通知が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/34fe476e-938b-69a9-b11c-31cba2367a9b.png)
　<br>
0. 数分で以下の通知が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/0ef6b4c0-1ef1-a7fd-70c3-fac5d05b7df4.png)

以上の作業で VPN ゲートウェイ が P2S で VPN 接続を受け付けられるようになりました。

**公開情報：VPN クライアント アドレス プールを追加する**
https://learn.microsoft.com/ja-jp/azure/vpn-gateway/point-to-site-certificate-gateway?wt.mc_id=mvp_407731#addresspool

## 3. クライアント PC 側で行う作業
VPN 接続を行いたい PC ごとに 以下の２ステップの作業 が必要です。
- **3-1. クライアント証明書 の配布**
VPN ゲートウェイに接続する際の認証として必要です。
　
- **3-2. VPN 接続プロファイル の構成**
VPN ゲートウェイに VPN 接続するために必要な情報です。

:::note info
**ポイント**
VPN 接続を行う際に、クライアント証明書 を使って認証が行われます。
:::

**公開情報：P2S 証明書認証接続用にネイティブ VPN クライアントを構成する - Windows**

https://learn.microsoft.com/ja-jp/azure/vpn-gateway/point-to-site-vpn-client-certificate-windows-native?wt.mc_id=mvp_407731

### 3-1. クライアント証明書 の配布
VPN 接続を行う際に、許可された クライアント PC なのかどうかを認証するために、クライアント証明書が必要です。

クライアント証明書 を PC に配布するためには、以下のような手段があります。

- **手動でインポートする**（テスト向け）
自己署名証明書 や AD CS スタンドアロン CA で作成した クライアント証明書 を 手動でインポートします。

**公開情報：P2S 証明書認証接続用のクライアント証明書のインストール**

https://learn.microsoft.com/ja-jp/azure/vpn-gateway/point-to-site-how-to-vpn-client-install-azure-cert?wt.mc_id=mvp_407731

- **AD CS エンタープライズ CA で自動配布する**（オンプレミス環境での運用向け）
オンプレミス環境で、クライアント証明書の自動作成から配布まで 対応できます。
証明書作成の章で AD CS が構築されていれば、既に ドメイン参加した クライアント PC には、証明書の配布が完了しているハズですので、**本章で行う作業はありません。**
　
- **Intune で自動配布する**（クラウド環境での運用向け）
Intune を使って、クライアント証明書の自動作成から配布まで 対応できます。
証明書作成の章で Intune で証明書の自動作成が構築されていれば、既に Intune に登録した クライアント PC には、証明書の配布が完了しているハズですので、**本章で行う作業はありません。**

:::note warn
**参考**（簡易的な運用）
なお、自己署名証明書 で手動作成した クライアント証明書 を Intune を使って一律に配布することもできます。
ただし、全クライアント が 同じクライアント証明書 を持つ事になるので、失効 の運用ができません。
:::

### 3-2. VPN 接続プロファイル の構成
**VPN クライアント のダウンロード**

0. ２章（Azure 側で行う作業）が正常に完了していると、**VPN クライアントのダウンロード** のボタンが押せるようになるため、このボタンを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/645cff45-7f0b-c89f-975d-4413fcd342d9.png)
　<br>
0. 以下のように VPN ゲートウェイ と同一名の ZIP ファイルがダウンロードされるため、解凍 を行います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/b9eb2adf-f57a-f7d2-ea14-f20716c74294.png)
　<br>
0. 解凍後は、以下のフォルダを確認することができます。
 このフォルダ配下のファイルは、このあとの手順（3-2-①～④）で使います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/7ae3d16c-24d9-a91f-118b-3ca9a33879af.png)

**VPN 接続プロファイルの構成**
続いて、VPN 接続プロファイルを構成するには、４通りあるため、いずれかの手順を実施します。

- **3-2-① VpnClientSetupAmd64.exe を使用して導入する**（テスト向け）
一般的に知られている 一番オーソドックスな手順です。
　
- **3-2-② VpnProfileSetup.ps1 を使用して導入する**（テスト向け）
この方法でも、簡単に導入できます。
こちらの方が 余計なウィンドウが表示されずに良いかもしれません。
　 
- **3-2-③ GPO で VPN プロファイルを配布する**（研究中：運用向け）
VPN プロファイルの構成を GPO を使って配布できるかもしれません。
　
- **3-2-④ Intune で VPN プロファイルを配布する**（研究中：運用向け）
VPN プロファイルの構成を Intune を使って配布できるかもしれません。

:::note alert
**注意**
OS の VPN 設定のウィンドウから P2S の設定をできるのか、疑問に思っていたため、今回 検証してみました。
その結果、設定する事が出来ないことが判明しています。

**OS の VPN 設定ウィンドウ**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/600e8d6e-7b42-d47e-e8cf-5c65188f245c.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/329752d4-c5d4-783f-5730-00bc1bbc703e.png)

**検証結果：P2S VPN - Azure 証明書認証 のクライアント設定を GUI で構成できるのか？（否）**
https://qiita.com/carol0226/items/4fa02d2b5f89e97573d9
:::

#### 3-2-① VpnClientSetupAmd64.exe を使用して導入する

:::note warn
**注意点**
この手順では、OS の Userprofile のフォルダ名が 半角英数字 の場合にのみ正常動作します。
日本語などの全角文字 の場合は、エラーとなるため、対処が必要です。

**エラー：’azurebox32.ico’ が必要です**
https://jpaztech.github.io/blog/archive/need-azurebox32-ico/
:::

0. 解凍したファイル内の WindowsAmd64 フォルダ を開き、以下のファイル (VpnClientSetupAmd64.exe) をダブルクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/02277fab-5429-fb7c-7308-3e075d8dd0f9.png)
　<br>
0. 以下の画面が出る事がありますが、問題ありません。**実行** を押して進めます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/056f574f-ccbe-c914-11b9-ba2716cf1e79.png)
　<br>
0. 以下のウィンドウでは **はい** を押して先へ進めます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/b9ebbfe7-f521-236f-6cc8-78343c8615b6.png)
　<br>
0. 設定パネル で **ネットワークとインターネット** から **VPN** を選択し VPN の接続情報として、Azure 仮想ネットワーク名 と同じ名称のものがあれば OK です。
**接続** ボタンを押してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/7de76d62-e0b1-7977-d8a0-2bad05f6e4dc.png)
　<br>
0. **接続** ボタンを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/6fc6eaa8-df63-b407-b68f-5edb95ce233b.png)
　<br>
0. チェックを入れて **続行** を押します（初回のみ）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/7c389a1b-71fb-eac2-e362-149859783446.png)
　<br>
0. 以下のように **接続済み** と表示されれば OK です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/926c411b-0324-9543-85df-f8e6c1957a1c.png)

#### 3-2-② VpnProfileSetup.ps1 を使用して導入する

0. 解凍したファイル内の WindowsPowerShell フォルダ を開き、以下のファイル (VpnProfileSetup.ps1) を右クリックして **PowerShell で実行** を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/e7bafbac-40ee-8b42-abfb-455b51b107ab.png)
　<br>
0. 以下のウィンドウは **開く** を押して先へ進みます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/826d1231-09c5-af57-bfb2-761186a78e47.png)
　<br>
0. 以下の内容のウィンドウが 一瞬表示されて 消えます。
エラーっぽいメッセージも表示されていますが、同名のプロファイルが存在しない場合は このようになるみたいです。同名のプロファイルがあると、削除するかどうか Y/N で回答します。エラーは無視して OK です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/1dbcd3ec-5e47-931e-4846-2863aa9ee981.png)
　<br>
0. 設定パネル で **ネットワークとインターネット** から **VPN** を選択し VPN の接続情報として、Azure 仮想ネットワーク名 と同じ名称のものが作成されていれば OK です。
**接続** ボタンを押してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/7de76d62-e0b1-7977-d8a0-2bad05f6e4dc.png)
　<br>
0. 以下のように **接続済み** と表示されれば OK です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/926c411b-0324-9543-85df-f8e6c1957a1c.png)

#### 3-2-③ GPO で VPN プロファイルを配布する
この方法は、別途 記事を書く予定です。

#### 3-2-④ Intune で VPN プロファイルを配布する
この方法は、別途 記事を書く予定です。

## 4. 切断
タスクトレイ内のネットワークアイコンを押して、VPN の接続情報をクリックします。

0. 以下のウィンドウが開いたら、**切断** を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/f254ee2a-817a-9fc6-a86d-2cb3973e4cd3.png)

## 5. 接続 の Before / After
P2S で接続をおこなう前後の ネットワーク構成 の変化点です。

### セッション状態の確認
**接続中** （接続後、一覧に表示されるまで 数分 掛かります）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/988b48ed-b764-992c-d649-3b306b4e132d.png)
※切断すると、一覧に表示されなくなります。

### ipconfig
**接続前の ipconfig**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/78cb22a9-1311-78d3-3071-6512a4d38685.png)

**接続後の ipconfig**
PPP アダプター が追加されていることが判ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/dcb1dfac-36c1-84b6-96de-dda56d72b1c0.png)

### route print
**接続前の route print**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/2d3b685d-21d5-b261-248f-ca05ae08cf73.png)

**接続後の route print**
インターフェイスに **Azure 仮想ネットワーク（AZ-DefaultVNet）** が追加され、仮想ネットワーク と アドレスプール への ルーティング も追加されています。
**74.176.54.56** は、接続する VPN ゲートウェイ自身のアドレスですが、直接インターネットに出るためのルートが追加されていることも判ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/e087e985-7e4e-2e28-9304-0e68dd9f2eec.png)

VPN を切断すると、接続前と同じ状態に戻ります。

# Next Step
以下を参考に、VPN Gateway のログ取得も やってみましょう。
既定では、ゲートウェイ側 で何が起こっているのかが判らないので、ログを取得する必要があります。

https://qiita.com/carol0226/items/de5591af1464230d102b

以下の記事を参考にしていただくと、Intune から VPN 接続用のプロファイルを一斉配布することが出来るようになります。

https://qiita.com/carol0226/items/29bdc47e98e43aa32141

# 関連情報

https://learn.microsoft.com/ja-jp/azure/vpn-gateway/vpn-gateway-troubleshoot-vpn-point-to-site-connection-problems?wt.mc_id=mvp_407731