Azure 環境に P2S VPN (basic SKU) でつなげる (GUI / Azure Portal 編)

こんにちは駆け出しアーキテクトのやまぱんです。
以前にこんな記事を書きました。

https://qiita.com/aktsmm/items/8ea190fdca69ebb58a17

じゃあ次は P2S もやってみようということで今回は P2S 環境を作ります。
ただし、**今回は VPNゲートウェイ の SKU を basic で作ります。**


誰かの役に立てば幸いです。
コメントなどあれば是非いただければと思います👸

## Azure VPN Gateway の接続方法
そもそも Azure VPN Gateway の接続方法は以下の３種類あります。
+ S2S / Site to Site 接続 
他クラウド環境と接続したり、オンプレミス環境と接続する
+ V2V / VNet to VNet 接続 
Vnet　同士 の VPN 接続
+ P2S / Point to Site 接続 (**今回はこちら**)
クライアントPCとAzure の仮想ネットワークとの接続

# 前置き
## vpngwのSKU
・VPN Gateway の価格
https://azure.microsoft.com/ja-jp/pricing/details/vpn-gateway/

 ![2023-11-13_20h58_26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/56df33f9-13fa-7279-4f06-1e47dc194b48.png)

ただ、SKU：VpnGw1 でも一時間当たり 28.4250円、一か月あたり**20,466円**
一方、SKU: basic だと一時間当たり、5.39円、一か月あたり**3,880円**
と結構な違いがあります。

basic SKU だと、S2SVPN は構成できないのですが、今回の P2SVPN は構成することができます。
なので今回は SDGs の為にも、basic SKU を利用してP2S を構成します。
ただし、basic の VPNゲートウェイは Azure Portal からはデプロイできません。
そのためAzure PowerShell や  Azure 公式認定の IaC ツールである bicep などを用いてデプロイする必要があります。

:::note warn
basic SKU の VPN ゲートウェイは Azure Portal からはデプロイできない。
(VPNゲートウェイでbasic SKU を使う場合は完全 GUIでのデプロイは出来ない。)
:::

完全 GUIでのデプロイは出来ないので、**(GUI / Azure Portal 編)** と書いてありながらも、一部PowerShell で実施している箇所があります。


・Gateway の SKU

https://learn.microsoft.com/ja-jp/azure/vpn-gateway/vpn-gateway-about-vpngateways#gwsku


:::note 
【参考】こちらの記事では basic SKU 以外の VPN ゲートウェイを GUI ・Azure Portal でデプロイされてて完全GUIで実施されています～

https://qiita.com/dessin/items/32492d563279d4cc2bf4#vpn-gateway%E3%81%AE%E4%BD%9C%E6%88%90

:::


# やりたいこと
おうちの Windows PC と Azure のネットワーク(Vnet-Hub) をつなげたい。
ついでに  Azure 上の Windows VM は DNSサーバーにし、Ubuntu VM は Web サーバーにして、おうちから名前解決してPrivate IP で Webサイトにアクセスしたい。

# As is と To be
### As is
Bastion および Bastion Subnet は VM 接続に便利なのでデプロイしてますが必須ではありません。
作業開始前 は こんな感じの環境
![2023-11-13_21h40_56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/7e873c1b-3c11-2dec-27b9-e014219e8c2c.png)


:::note info
以下をクリックすることで上記の bastion がないバージョンのシンプルな環境をデプロイできます。
[![Deploy to Azure](https://aka.ms/deploytoazurebutton)](https://portal.azure.com/#create/Microsoft.Template/uri/https%3A%2F%2Fraw.githubusercontent.com%2Faktsmm%2FIac%2Fmain%2F07_1Vnet-2VM%2Fmain.json) 

デプロイするときは[パラメーターファイル](https://github.com/aktsmm/Iac/blob/main/07_1Vnet-2VM/parameters.json)をコピーして、適宜編集して貼り付けると同じような構成になります。([参考](https://github.com/aktsmm/Iac/blob/main/07_1Vnet-2VM/readme.md#%E3%83%91%E3%83%A9%E3%83%A1%E3%83%BC%E3%82%BF%E3%83%BC))
:::


### To be
作業完了後 は こんな感じの環境になってることが理想
![2023-11-13_21h31_40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/8c1d1e81-206b-47a1-32b9-89990ff4a6ec.png)


# 手順
## VPNゲートウェイ(basic sku) の作成
早速です。

先に述べたように Azure Portal からは Basic SKU を選択することができません。
![2023-11-13_22h18_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/a694cea9-819b-5b1e-b411-e20a1bfbd5a0.png)
Azure Portal からでは Basic SKU がない！

なので今回は Azure PowerShell を用いて作成します。
下記に既存の Vnetに対して Basic sku のVPNゲートウェイ をデプロイする Azure PowerShellスクリプトを置いてます。
https://github.com/aktsmm/Scripts/blob/main/ps/VPNGateway/VPNGW_add.ps1
これを使って、まず basic SKU のVPNゲートウェイ をデプロイします。
少し待ちますが、10 分もあればできました。



## アドレスプールの入力
[作成したVPNゲートウェイ] → [ポイント対サイトの構成] と遷移して、"アドレス プール" を入力して、[保存] をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/dc7b3d99-b8b0-f8b2-ea6b-be1f08e5b1e5.png)

結構時間がかかります。
私の場合 1 時間ちょっとまちました。

:::note warn
ここで入力するアドレスプールが Vnet のアドレス空間と重複していると下記のようなエラーがでます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/9890099e-f1a7-c39a-fb9f-7414b43b1fd5.png)
今回は10.200.0.0/24 を入力しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/250a7b3a-3aa8-becf-dde5-688320783341.png)
:::

## ルート証明書の作成と Azure へのアップロード
クライアント側でPowerShellを立ち上げて下記のコマンドを実行します。

```PowerShell:PowerShell
# 自己署名ルート証明書の作成
$cert = New-SelfSignedCertificate -Type Custom `
            -KeySpec Signature `
            -Subject "CN=P2SRootC" `
            -KeyExportPolicy Exportable `
            -HashAlgorithm sha256 `
            -KeyLength 2048 `
            -CertStoreLocation "Cert:\CurrentUser\My" `
            -KeyUsageProperty Sign `
            -KeyUsage CertSign

# クライアント証明書の作成
New-SelfSignedCertificate -Type Custom `
    -DnsName P2SRootC `
    -KeySpec Signature `
    -Subject "CN=P2SChildC" `
    -KeyExportPolicy Exportable `
    -HashAlgorithm sha256 `
    -KeyLength 2048 `
    -CertStoreLocation "Cert:\CurrentUser\My" `
    -Signer $cert `
    -TextExtension @("2.5.29.37={text}1.3.6.1.5.5.7.3.2")
```

[Windows + R キー]　 →  [certmgr.msc] を入力して OK

こんな感じで作成した自己署名ルート証明書とクライアント証明書が確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/fd58c112-ae72-c478-3984-9bc8499369ac.png)

+ 作成した自己署名ルート証明書を探し、右クリックして ”すべてのタスク” → ”エクスポート” を選択します
+ 次へをクリックします
+ いいえ、秘密キーをエクスポートしませんをクリックします
+ Base 64 encoded X.509をクリックします
+ エクスポート先を選択してクリックします
+ エクスポートした証明書を vscode やメモ帳で開きVPNゲートウェイに登録します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/97de1253-4651-b530-7f07-a737653e28d4.png)


その後、[保存]を押す、数分まって画面を再読み込みすると VPN クライアントのダウンロードが可能になるので、ダウンロードする。

## P2S VPN 接続(クライアント側)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/2cd265a9-958e-ae2c-f6f5-3e23cdcd3fd0.png)
上記のようなフォルダがダウンロードされますので展開します。

下記の **"CRT_0 ファイル" の名前を変更して拡張子を .cer に変更し**、ダブルクリックしてサーバー証明書をインストールします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/f81da79a-8af1-651a-9851-afef0dbd161e.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/dd70619a-402b-63b6-8867-64de4c8bcc18.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/3f2bbaf4-7d53-5a2d-5eeb-5d71caf8dc36.png)


つぎに展開したフォルダ内の [WindowsPowershell] を選択して、スクリプトを実行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/ab8636c7-86ed-1028-1a4d-f39d90146ee4.png)

その後、クライアント側の VPN メニューに下記がでるので「接続」する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/b137b5ae-54f5-7823-b393-e75ce67c71cb.png)

## 接続確認
### ipconfig
クライアント側で ipconfig を打つとVPNに使われるNICが追加されているのがわかる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/d9c0d022-35e3-a0d4-23f8-1bf0ecc50f9e.png)

### ping による疎通確認
クライアント側から Azure 上の Ubuntu/Webサーバ (10.100.1.4)に対してpingの疎通確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/9257c991-1eeb-3349-9f6c-9e00cef7e057.png)


### FQDNによるWebサーバーへのアクセス確認
ここでは設定や説明を省いていますが、ローカルのクライアント PC から Azure 上の IaaSで立てた DNSサーバー(10.100.1.5)に設定した **web.ksk.yamapan.tokyo** の名前解決をして、Ubuntu/Webサーバ (10.100.1.4) にアクセスし、http ページが表示されることも確認済です。(DNS周りが気になる方は、[参考](https://qiita.com/aktsmm/items/859e4b86bd033d48a112#web%E3%82%B5%E3%83%BC%E3%83%90%E3%82%84dns%E5%91%A8%E3%82%8A%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6)をご覧ください。)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/60395e03-3acf-3f87-4ba7-7781b0dfd16e.png)


# 参考

## P2S接続してる方の記事です

https://qiita.com/dessin/items/32492d563279d4cc2bf4#vpn-gateway%E3%81%AE%E4%BD%9C%E6%88%90

https://qiita.com/itita/items/b59d165afa3a1caba9a3

https://qiita.com/kk31108424/items/badebf69de81c7a10c2b

## WebサーバやDNS周りについて

https://yamapan.tokyo/?p=2705

https://yamapan.tokyo/?p=2542