こんにちは駆け出しアーキテクトのやまぱんです。
以前にこんな記事を書きました。
じゃあ次は P2S もやってみようということで今回は P2S 環境を作ります。
ただし、今回は VPNゲートウェイ の SKU を basic で作ります。
誰かの役に立てば幸いです。
コメントなどあれば是非いただければと思います👸
Azure VPN Gateway の接続方法
そもそも Azure VPN Gateway の接続方法は以下の3種類あります。
- 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/
ただ、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 などを用いてデプロイする必要があります。
basic SKU の VPN ゲートウェイは Azure Portal からはデプロイできない。
(VPNゲートウェイでbasic SKU を使う場合は完全 GUIでのデプロイは出来ない。)
完全 GUIでのデプロイは出来ないので、(GUI / Azure Portal 編) と書いてありながらも、一部PowerShell で実施している箇所があります。
・Gateway の SKU
【参考】こちらの記事では 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 接続に便利なのでデプロイしてますが必須ではありません。
作業開始前 は こんな感じの環境
以下をクリックすることで上記の bastion がないバージョンのシンプルな環境をデプロイできます。
デプロイするときはパラメーターファイルをコピーして、適宜編集して貼り付けると同じような構成になります。(参考)
To be
手順
VPNゲートウェイ(basic sku) の作成
早速です。
先に述べたように Azure Portal からは Basic SKU を選択することができません。
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ゲートウェイ] → [ポイント対サイトの構成] と遷移して、"アドレス プール" を入力して、[保存] をクリックします。
結構時間がかかります。
私の場合 1 時間ちょっとまちました。
ルート証明書の作成と Azure へのアップロード
クライアント側で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
こんな感じで作成した自己署名ルート証明書とクライアント証明書が確認できます。
- 作成した自己署名ルート証明書を探し、右クリックして ”すべてのタスク” → ”エクスポート” を選択します
- 次へをクリックします
- いいえ、秘密キーをエクスポートしませんをクリックします
- Base 64 encoded X.509をクリックします
- エクスポート先を選択してクリックします
- エクスポートした証明書を vscode やメモ帳で開きVPNゲートウェイに登録します。
その後、[保存]を押す、数分まって画面を再読み込みすると VPN クライアントのダウンロードが可能になるので、ダウンロードする。
P2S VPN 接続(クライアント側)
下記の "CRT_0 ファイル" の名前を変更して拡張子を .cer に変更し、ダブルクリックしてサーバー証明書をインストールします。
つぎに展開したフォルダ内の [WindowsPowershell] を選択して、スクリプトを実行します。
その後、クライアント側の VPN メニューに下記がでるので「接続」する
接続確認
ipconfig
クライアント側で ipconfig を打つとVPNに使われるNICが追加されているのがわかる
ping による疎通確認
クライアント側から Azure 上の Ubuntu/Webサーバ (10.100.1.4)に対してpingの疎通確認
FQDNによるWebサーバーへのアクセス確認
ここでは設定や説明を省いていますが、ローカルのクライアント PC から Azure 上の IaaSで立てた DNSサーバー(10.100.1.5)に設定した web.ksk.yamapan.tokyo の名前解決をして、Ubuntu/Webサーバ (10.100.1.4) にアクセスし、http ページが表示されることも確認済です。(DNS周りが気になる方は、参考をご覧ください。)
参考
P2S接続してる方の記事です
WebサーバやDNS周りについて