3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Azure VPN Gateway のデプロイと ARMテンプレートでの再作成

Last updated at Posted at 2024-09-16

はじめに

今回の記事では、シンプルに VPN ゲートウェイ の作成を紹介したかったのですが、それだけだとつまらないので、不要な時には 削除して課金を抑え、 必要になった時に 同一構成の VPN ゲートウェイ を簡単に再作成できる方法までを紹介したいと思います。

VPN ゲートウェイ のコスト
VPN ゲートウェイ の費用は、以下の公開情報に記載されています。

下図は、上記の記事から抜粋していますが、BGP が利用できるうち 最安値 の SKU (VpnGw1) をデプロイすると、月額 2 万円 も掛かってしまいます。VPN ゲートウェイは、停止することができないため、リソースが存在しているだけで、これだけのコストが請求されてしまいます。
image.png

そのため、不要な時には 削除 しておき、必要な時に 同一構成の VPN ゲートウェイ を作成することで、コストを抑えることができるようになります。

関連記事:合わせて参照ください

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

Azure 仮想ネットワークについてのまとめ
VPN ゲートウェイのみならず、その他の Azure ネットワーク全般について解説しています。
全体の中で、VPN ゲートウェイは どのような位置づけなのかが判ります。

前提事項

Azure サブスクリプション 上に、リソースグループ と 仮想ネットワーク が作成されている事を前提としています。
その前提となる環境は、以下の記事の設定値をもとに構成しています。

当然、上記とは違う名称や IP アドレスでも構成可能ですが、私の記事の内容と読み替えて参照してください。

ネットワーク設計

前提で用意した既存の 仮想ネットワークに、以下の GatewaySubnet を追加して利用する設計としました。

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

VPN ゲートウェイ 1発 デプロイ ボタン [Deploy to Azure]
このボタンについては、最終章で解説していますが、上記のネットワーク設計どおりであれば、以下のボタンを押して、リソースグループを選んでデプロイ開始するだけで、あなたの サブスクリプションへ VPN ゲートウェイ を展開できます。
Deploy to Azure
※このとき、選択する リソースグループは、GatewaySubnet が存在する仮想ネットワークと同じである必要があります。上記の設計では、AVD-Environment を選択します。

注意
ゲートウェイサブネット を作成せずに VPN ゲートウェイ をデプロイすると、以下のようなエラーが発生します。
image.png
そのため、VPN ゲートウェイ を作成するためには、必ず GatewaySubnet を用意しておく必要があります。

ゲートウェイ サブネット の作成手順

  1. 用意した仮想ネットワークを開き、左ペインの 設定 から サブネット を開きます。
    続いて、+ゲートウェイサブネット のボタンを押します。
    image.png
     
  2. 以下の画面では、開始アドレス を 意図した値に編集して 追加 を押します。
    なお、サブネットの目的 は、初めから Vitrual Network Gateway になっており、これが ゲートウェイサブネット のことを意味しています。
    image.png
     
  3. 以下の通知が表示されれば OK です。
    image.png
     
  4. 下図の通り、GatewaySubnet が追加されれば OK です。
    image.png

VPN ゲートウェイ の デプロイ 手順

VPN ゲートウェイ を GUI を使ってデプロイを行う手順です。

  1. Azure Portal の検索窓で 仮想ネットワーク ゲートウェイ(①~②)を検索して選択します。
    続いて +作成(③)をクリックします。
    image.png

注意 2025/2/16 追記
"仮想ネットワーク ゲートウェイ" で検索しても見つからなくなっていました。
リソース名が、和名ではなく 英語名 になっていました。
"Virtual network gateways" を探してみてください。
image.png
※Azure あるあるネタなので、気を付けましょう。

2.基本 タブでは、以下の表を参考に 値を 選択・入力 して 確認および作成 を押します。

# 説明
名前 任意の名称 VPNGW-JPEAST
地域 用意した 仮想ネットワーク
が存在する場所を選択
Japan East
ゲートウェイの種類 固定 VPN
SKU 任意のサイズ
あとで変更に制約アリ ※1
VpnGw1
世代 あとで変更
できないので注意
Generation1
仮想ネットワーク 事前に用意したものを選択 AZ-DefaultVNet
サブネット この欄に GatewaySubnet
が表示されている事を確認
GatewaySubnet
(x.x.x.x/x)
パブリック IP アドレス名 任意の名称
例:ゲートウェイ名に -pip を付与
VPNGW-JPEAST-pip
アクティブ / アクティブ モードの有効化 動作モードのこと
あとで変更可
ひとまず 無効 を推奨
無効
BGP の構成 推奨 有効
自律システム番号 (ASN) 既定値 65521

SKU や、世代、動作モード については、以下の記事で詳しく解説しているので、参照ください。
SKU の変更可能なサイズ ※1 についても、説明しています。

VPN Gateway について
https://qiita.com/carol0226/items/f28f381e3dcf43590d7b

image.png
image.png

BGP の ASN を利用できる範囲について
ASN の範囲は、以下の公開情報のとおり、64512 ~ 65514 および 65521 ~ 65534 が利用可能と明記されています。
https://learn.microsoft.com/ja-jp/azure/vpn-gateway/vpn-gateway-vpn-faq?wt.mc_id=mvp_407731#what-private-asns-can-i-use

なお、既定値では 65515 が使われるようになっており、これも利用できますが、特殊用途となるため、この ASN は避けておきます。

3.確認および作成 タブでは、設定した内容を確認できます。
ここで、緑枠 の Automation のテンプレートをダウンロードする を押すことで ARM テンプレートを保存できます。
ARM テンプレートを保存したら、作成 を押して デプロイを開始します。

ARM テンプレート の ダウンロード手順は、ココをクリック して参照できます

テンプレート を ダウンロード
image.png

ダウンロードボタンをおすと、template.zip というファイルが保存されます。
ZIP ファイルを展開すると、以下の2つのファイルが存在しています。
・ template.json
・ parameters.json

それぞれのファイルは、以下の内容になっています。

template.json

{
    "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "name": {
            "type": "string"
        },
        "location": {
            "type": "string"
        },
        "gatewayType": {
            "type": "string",
            "defaultValue": "Vpn",
            "allowedValues": [
                "Vpn",
                "ExpressRoute"
            ]
        },
        "sku": {
            "type": "string"
        },
        "vpnGatewayGeneration": {
            "type": "string"
        },
        "vpnType": {
            "type": "string",
            "defaultValue": "RouteBased",
            "allowedValues": [
                "RouteBased",
                "PolicyBased"
            ]
        },
        "subnetId": {
            "type": "string"
        },
        "newPublicIpAddressName": {
            "type": "string"
        },
        "enableBgp": {
            "type": "bool"
        },
        "asn": {
            "type": "int"
        },
        "customBgpIpAddress": {
            "type": "Array"
        }
    },
    "resources": [
        {
            "apiVersion": "2023-02-01",
            "name": "[parameters('name')]",
            "type": "Microsoft.Network/virtualNetworkGateways",
            "location": "[parameters('location')]",
            "dependsOn": [
                "[concat('Microsoft.Network/publicIPAddresses/', parameters('newPublicIpAddressName'))]"
            ],
            "tags": {},
            "properties": {
                "gatewayType": "[parameters('gatewayType')]",
                "ipConfigurations": [
                    {
                        "name": "default",
                        "properties": {
                            "privateIPAllocationMethod": "Dynamic",
                            "subnet": {
                                "id": "[parameters('subnetId')]"
                            },
                            "publicIpAddress": {
                                "id": "[resourceId('AVD-Environment', 'Microsoft.Network/publicIPAddresses', parameters('newPublicIpAddressName'))]"
                            }
                        }
                    }
                ],
                "enableBgp": "[parameters('enableBgp')]",
                "bgpSettings": {
                    "asn": "[parameters('asn')]",
                    "bgpPeeringAddresses": [
                        {
                            "ipconfigurationId": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/AVD-Environment/providers/Microsoft.Network/virtualNetworkGateways/VPNGW-JPEAST/ipConfigurations/default",
                            "customBgpIpAddresses": "[parameters('customBgpIpAddress')]"
                        }
                    ]
                },
                "vpnType": "[parameters('vpnType')]",
                "vpnGatewayGeneration": "[parameters('vpnGatewayGeneration')]",
                "sku": {
                    "name": "[parameters('sku')]",
                    "tier": "[parameters('sku')]"
                }
            }
        },
        {
            "apiVersion": "2020-08-01",
            "type": "Microsoft.Network/publicIPAddresses",
            "name": "[parameters('newPublicIpAddressName')]",
            "location": "[parameters('location')]",
            "properties": {
                "publicIPAllocationMethod": "Static"
            },
            "sku": {
                "name": "Standard",
                "tier": "Regional"
            },
            "zones": []
        }
    ]
}

parameters.json

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "location": {
            "value": "japaneast"
        },
        "name": {
            "value": "VPNGW-JPEAST"
        },
        "gatewayType": {
            "value": "Vpn"
        },
        "sku": {
            "value": "VpnGw1"
        },
        "vpnType": {
            "value": "RouteBased"
        },
        "vpnGatewayGeneration": {
            "value": "Generation1"
        },
        "subnetId": {
            "value": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/AVD-Environment/providers/Microsoft.Network/virtualNetworks/AZ-DefaultVNet/subnets/GatewaySubnet"
        },
        "newPublicIpAddressName": {
            "value": "VPNGW-JPEAST-pip"
        },
        "enableBgp": {
            "value": true
        },
        "asn": {
            "value": 65521
        },
        "customBgpIpAddress": {
            "value": []
        }
    }

image.png

4.デプロイは、約 30 分 掛かります。デプロイが完了すると、以下の画面になるため、赤枠の 操作の詳細 を押します。
image.png

5.以下の通り、実際に デプロイに掛かった時間を確認できます。
image.png

6.デプロイが完了し、作成された VPN ゲートウェイ の画面に遷移すると、以下のようになっています。
(概要タブ)
image.png
(構成タブ)
image.png

正常性プローブ

デプロイされた VPN ゲートウェイ に対して、以下の URL にアクセスすることで、インスタンスの状態を確認することができます。

https:// [YourVirtualNetworkGatewayIP] :8081/healthprobe
(具体例)
https://48.210.40.187:8081/healthprobe

手順 7: Azure ゲートウェイの正常性プローブを確認する
https://learn.microsoft.com/ja-jp/azure/vpn-gateway/vpn-gateway-troubleshoot-site-to-site-cannot-connect?wt.mc_id=mvp_407731#step-7-verify-the-azure-gateway-health-probe

image.png

VPN ゲートウェイ の削除

VPN ゲートウェイ をコストを抑えるため または、不要になった場合に 削除 を行う場合は、以下の手順を実行します。

  1. VPN ゲートウェイ の概要ページで 削除 を押します。
    image.png
     
  2. 以下の確認で はい を押します。
    image.png
     
  3. 以下の通知が表示されます。削除が完了するまで 約 10 分くらい掛かりました。
    image.png
     
  4. VPN ゲートウェイが削除されると、以下のように 仮想ネットワーク と パブリック IP アドレス が残ります。
    image.png

ポイント
コスト抑制のための一時的な削除の場合は、上記のリソースは このまま 残しておきます。

再作成の際に、この 仮想ネットワーク と パブリック IP アドレス を利用することで、同一構成の VPN ゲートウェイを 簡単に 作成可能になります。

完全に削除を行う場合は、パブリック IP アドレス も削除を行ってください。

ARM テンプレートを使った再作成

この手順を実行することで、前回と 同一構成の VPN ゲートウェイ を再作成できます。

前提
・ 前回作成時の 仮想ネットワーク と パブリック IP アドレス が残っている
・ ARM テンプレート を保存済みで、ZIP を解凍済みである(template.json と parameters.json がある)

手順

  1. Azure Portal の検索窓で カスタム テンプレートのデプロイ(①~②)を選択し、エディターで独自のテンプレートを作成する(③)をクリックします。
    image.png
     
  2. 以下の画面で ファイルの読み込み を押し、template.json ファイルを選択します。
    緑枠の箇所に読み込まれた事を確認して、保存 を押します。
    image.png
     
  3. 以下の画面で 赤枠の パラメーターの・・・ を押します。
    image.png
     
  4. 以下の画面で ファイルの読み込み を押し、parameters.json ファイルを選択します。
    緑枠の箇所に読み込まれた事を確認して、保存 を押します。
    image.png
     
  5. 以下の画面のように、テンプレートに パラメーターが読み込まれた状態になります。
    このまま 確認と作成 を押すと、前回と同一仕様の VPN ゲートウェイ が展開できますが、この画面で 設定値を変更することもできます。
    image.png
     
  6. 確認と作成 タブで 最終確認を行い、作成 を押します。
    image.png
     
  7. 以下は、デプロイが完了した画面です。作成時と 同様の時間が掛かります。
    image.png
     
  8. 以下の通り、前回と 同一仕様の VPN ゲートウェイ が展開されました。
    image.png

Next Step

VPN ゲートウェイ をデプロイ出来たら、続けて 接続 を構成してみましょう。
以下は、各接続の種類ごとのリンクです。
※現在は、公開情報へのリンクになっていますが、順次 私自身で記載した記事へ差し替えていく予定です。

V2V の 構築手順

以下の記事で、V2V の構成手順のキャプチャ付き に加えて、ARM テンプレートによる 再作成 について紹介しています。

公開情報:VNet 間 VPN ゲートウェイ接続の構成
https://learn.microsoft.com/ja-jp/azure/vpn-gateway/vpn-gateway-howto-vnet-vnet-resource-manager-portal?wt.mc_id=mvp_407731

S2S の 構築手順

P2S の 構築手順

P2S は、以下の公開情報に記載されている通り、3つの方法があります。

  • Azure 証明書認証
  • Microsoft Entra ID 認証
  • RADIUS 認証

Azure 証明書認証

Microsoft Entra ID 認証

RADIUS 認証

VPN Gateway のログを Log Analytics に保存する手順

FAQ

Support Blog の FAQ

公開情報 の FAQ

IPsec/IKE ポリシーに関する FAQ
https://learn.microsoft.com/ja-jp/azure/vpn-gateway/vpn-gateway-about-compliance-crypto?wt.mc_id=mvp_407731#ipsecike-policy-faq

おまけ:1発デプロイ用のテンプレート

以下のテンプレートは、Parameters.json を必要とせず、Template.json のみで 1発でデプロイできるように 私がカスタマイズしたものになっています。

通常のテンプレートは、"サブスクリプション ID" が含まれた リソース ID が直書きで指定されている箇所があるため汎用性がありません。それを どのサブスクリプションでも動作するように工夫をしています。Azure Portal からダウンロードしたテンプレートと比較していただくと、違いが判ると思います。

以下の記事で紹介している [Azure にデプロイボタン] の方法を使って、このテンプレートを展開することで、ボタン1発で VPN ゲートウェイ を展開できるようになります。
https://qiita.com/carol0226/items/c7af5206ce78492ba879

VPN ゲートウェイ 1発 デプロイ ボタン(押せます)
Deploy to Azure

1発デプロイ用のテンプレート

{
    "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "name": {
            "type": "string",
            "defaultValue": "VPNGW-JPEAST"
        },
        "location": {
            "type": "string",
            "defaultValue": "japaneast"
        },
        "gatewayType": {
            "type": "string",
            "defaultValue": "Vpn"
        },
        "sku": {
            "type": "string",
            "defaultValue": "VpnGw1"
        },
        "vpnGatewayGeneration": {
            "type": "string",
            "defaultValue": "Generation1"
        },
        "vpnType": {
            "type": "string",
            "defaultValue": "RouteBased",
            "allowedValues": [
                "RouteBased",
                "PolicyBased"
            ]
        },
        "VnetResourceGroup": {
            "type": "string",
            "defaultValue": "AVD-Environment"
        },
        "VirtualNetwork": {
            "type": "string",
            "defaultValue": "AZ-DefaultVNet"
        },
        "newPublicIpAddressName": {
            "type": "string",
            "defaultValue": "VPNGW-JPEAST-pip"
        },
        "enableBgp": {
            "type": "bool",
            "defaultValue": true
        },
        "asn": {
            "type": "int",
            "defaultValue": 65521
        },
        "customBgpIpAddress": {
            "type": "Array",
            "defaultValue": []
        }
    },
    "resources": [
        {
            "apiVersion": "2023-02-01",
            "name": "[parameters('name')]",
            "type": "Microsoft.Network/virtualNetworkGateways",
            "location": "[parameters('location')]",
            "dependsOn": [
                "[concat('Microsoft.Network/publicIPAddresses/', parameters('newPublicIpAddressName'))]"
            ],
            "tags": {},
            "properties": {
                "gatewayType": "[parameters('gatewayType')]",
                "ipConfigurations": [
                    {
                        "name": "default",
                        "properties": {
                            "privateIPAllocationMethod": "Dynamic",
                            "subnet": {
                                "id": "[resourceId(parameters('VnetResourceGroup'),'Microsoft.Network/virtualNetworks/subnets',parameters('VirtualNetwork'),'GatewaySubnet')]"
                            },
                            "publicIpAddress": {
                                "id": "[resourceId(parameters('VnetResourceGroup'), 'Microsoft.Network/publicIPAddresses', parameters('newPublicIpAddressName'))]"
                            }
                        }
                    }
                ],
                "enableBgp": "[parameters('enableBgp')]",
                "bgpSettings": {
                    "asn": "[parameters('asn')]",
                    "bgpPeeringAddresses": [
                        {
                            "ipconfigurationId": "[resourceId(parameters('VnetResourceGroup'),'Microsoft.Network/virtualNetworkGateways/ipConfigurations',parameters('name'),'default')]",
                            "customBgpIpAddresses": "[parameters('customBgpIpAddress')]"
                        }
                    ]
                },
                "vpnType": "[parameters('vpnType')]",
                "vpnGatewayGeneration": "[parameters('vpnGatewayGeneration')]",
                "sku": {
                    "name": "[parameters('sku')]",
                    "tier": "[parameters('sku')]"
                }
            }
        },
        {
            "apiVersion": "2020-08-01",
            "type": "Microsoft.Network/publicIPAddresses",
            "name": "[parameters('newPublicIpAddressName')]",
            "location": "[parameters('location')]",
            "properties": {
                "publicIPAllocationMethod": "Static"
            },
            "sku": {
                "name": "Standard",
                "tier": "Regional"
            },
            "zones": []
        }
    ]
}
3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?