はじめに
本記事では、下図のように VNET1 と VNET2 という 2つの仮想ネットワーク を V2V(VNET 間接続)で接続する方法を紹介していきます。
以下の公開情報に記載されている範囲について、画面キャプチャ付きの手順 に加えて、2回目以降のデプロイを容易にするための ARM テンプレートでのデプロイ方法まで解説していきます。
公開情報:VNet 間 VPN ゲートウェイ接続 - Azure portal の構成
前提事項
基本的な VPN ゲートウェイ の仕組みや デプロイ方法は、以下の記事にまとめてありますので、先に そちらの記事を参照ください。
Azure VPN Gateway のデプロイと ARMテンプレートでの再作成
最初の VPN ゲートウェイ をデプロイする手順や、それを ARM テンプレート化して再利用する方法などを紹介しています。
Azure VPN Gateway について
SKU(機能、性能、コスト)の違いや、インスタンス、動作モード、可用性ゾーン (AZ)、接続方式 (S2S/V2V/P2S) などについて、詳細に解説しています。
本記事の対象
上記の記事を参照いただき、VPN ゲートウェイ のデプロイを経験済みの方を対象としています。
VPN ゲートウェイのデプロイが未経験の人は、まず先に 上記の記事を参照して、デプロイまで実施してください。
ネットワーク設計
V2V 接続を行う2つの仮想ネットワークは、以下の設定値 であることを前提としています。
VNET1 は、前提事項 で紹介した VPN ゲートウェイのデプロイについての記事の設計と同一です。
本記事では、上記の VNET1 に対して、新たに VNET2 の環境を追加で構成して、この2つの仮想ネットワークを V2V で接続するシナリオとなっています。
これらの値を 皆さんの環境に照らし合わせて 参照してください。
役割 | VNET1 名称 |
VNET1 アドレス |
VNET2 名称 |
VNET2 アドレス |
---|---|---|---|---|
リソースグループ | AVD-Environment | - | AVD-Environment | - |
リージョン | 東日本 (Japan East) |
- | 東南アジア (Southeast Asia) |
- |
仮想ネットワーク (アドレス空間) |
AZ-DefaultVNet | 10.10.0.0 /16 | AZ-DefaultVNet2 | 10.20.0.0 /16 |
サブネット1 | Subnet1 | 10.10.10.0 /24 | Subnet3 | 10.20.10.0 /24 |
サブネット2 ※今回は使いません |
Subnet2 | 10.10.20.0 /24 | Subnet4 | 10.20.20.0 /24 |
ゲートウェイ サブネット |
GatewaySubnet | 10.10.50.0 /24 | GatewaySubnet | 10.20.50.0 /24 |
VPN ゲートウェイの設定値
VNET1 と VNET2 の双方に作成する VPN ゲートウェイの設定値です。
# | VNET1 | VNET2 |
---|---|---|
名前 | VPNGW-JPEAST | VPNGW-SEASIA |
地域 | Japan East | Southeast Asia |
ゲートウェイの種類 | VPN | VPN |
SKU | VpnGw1 | VpnGw1 |
世代 | Generation1 | Generation1 |
仮想ネットワーク | AZ-DefaultVNet | AZ-DefaultVNet2 |
サブネット | GatewaySubnet (x.x.x.x/x) |
GatewaySubnet (x.x.x.x/x) |
パブリック IP アドレス名 | VPNGW-JPEAST-pip | VPNGW-SEASIA-pip |
アクティブ / アクティブ モードの有効化 | 無効 | 無効 |
BGP の構成 | 有効 | 有効 |
自律システム番号 (ASN) | 65521 | 65522 |
構築手順
手順は、2ステップです。
- VPN ゲートウェイ(2台目)をデプロイする
- V2V の 接続を構成する
1. VPN ゲートウェイ(2台目)をデプロイする
以下の ① GUI を使う方法、または ② ARM テンプレートを使う方法 でデプロイしてください。
① GUI で デプロイする
手順は、以下の記事で紹介した内容と同一です。
その際に パラメータは 本記事で紹介した VNET2 の値に読み替えて作業を行ってください。
② ARM テンプレート で デプロイする
以下の ▶ を押して、表示された ARM テンプレート を使ってデプロイしてください。
パラメータは VNET2 の設定値の状態で読み込まれます。
ココを開いて、ARM テンプレートを参照できます。
{
"$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"name": {
"type": "string",
"defaultValue": "VPNGW-SEASIA"
},
"location": {
"type": "string",
"defaultValue": "southeastasia"
},
"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-DefaultVNet2"
},
"newPublicIpAddressName": {
"type": "string",
"defaultValue": "VPNGW-SEASIA-pip"
},
"enableBgp": {
"type": "bool",
"defaultValue": true
},
"asn": {
"type": "int",
"defaultValue": 65522
},
"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": []
}
]
}
2. V2V の 接続を構成する
V2V を構成する手順です。
① GUI を使う方法 と、② ARM テンプレートを使う方法 を紹介します。
① GUI で 接続 する
- VPN ゲートウェイ の左ペインから 設定 を開き 接続 を選択します。
続いて +追加 ボタンを押します。
-
基本 タブでは、接続の種類 で VNet 対 VNet を選択し、双方向接続の確立 にチェックを入れて、1つ目の 接続名 と、2つ目の 接続名 を指定します(VNET1 -> VNET2 と VNET2 -> VNET1 を意味する名前が推奨ですが、任意の名前で問題ありません)
リージョンは いずれかの VNET を同じ場所にしておきましょう。設定が終わったら 次:設定 を押します。(このリージョンは、接続リソースが保存される場所になりますが、どこに作っても動作はします)
- V2V で接続を行う、1台目のゲートウェイと2台目のゲートウェイ を選択します。共有キー (PSK) を選択して キーの値(任意の文字列)を指定します。BGP を有効にする にチェックを入れて 確認および作成 を押します。
-
確認および作成 タブでは 内容を確認して 作成 を押します。
- 3~4分くらいで デプロイは完了します。
② ARM テンプレート で 接続 する
以下の ▶ を押して、表示された ARM テンプレート を使って 接続 してください。
パラメータは ネットワーク設計 の章で説明した内容の設定値が読み込まれます。
ココを開いて、ARM テンプレートを参照できます。
注意事項
SharedKey は、セキュリティですので、任意の値に置き換えてください。
"SharedKey": {
"type": "string",
"defaultValue": "Sh@redKey"
}
{
"$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"location": {
"type": "string",
"defaultValue": "japaneast"
},
"connectionType": {
"type": "string",
"defaultValue": "Vnet2Vnet"
},
"Gateway1ResourceGroup": {
"type": "string",
"defaultValue": "AVD-Environment"
},
"virtualNetworkGatewayName1": {
"type": "string",
"defaultValue": "VPNGW-JPEAST"
},
"connectionName": {
"type": "string",
"defaultValue": "VNET1toVNET2"
},
"useLocalAzureIpAddress": {
"type": "bool",
"defaultValue": false
},
"enableBgp": {
"type": "bool",
"defaultValue": true
},
"connectionProtocol": {
"type": "string",
"defaultValue": "IKEv2"
},
"ipsecPolicies": {
"type": "array",
"defaultValue": []
},
"dpdTimeoutSeconds": {
"type": "int",
"defaultValue": 45
},
"Gateway2ResourceGroup": {
"type": "string",
"defaultValue": "AVD-Environment"
},
"virtualNetworkGatewayName2": {
"type": "string",
"defaultValue": "VPNGW-SEASIA"
},
"ingressNatRules": {
"type": "array",
"defaultValue": []
},
"egressNatRules": {
"type": "array",
"defaultValue": []
},
"ingressNatRules2": {
"type": "array",
"defaultValue": []
},
"egressNatRules2": {
"type": "array",
"defaultValue": []
},
"connectionReverseName": {
"type": "string",
"defaultValue": "VNET2toVNET1"
},
"connectionReverseLocation": {
"type": "string",
"defaultValue": "southeastasia"
},
"SharedKey": {
"type": "string",
"defaultValue": "Sh@redKey"
}
},
"resources": [
{
"name": "[parameters('connectionName')]",
"type": "Microsoft.Network/connections",
"apiVersion": "2023-09-01",
"location": "[parameters('location')]",
"tags": {},
"dependsOn": [],
"properties": {
"connectionType": "[parameters('connectionType')]",
"virtualNetworkGateway1": {
"id": "[resourceId(parameters('Gateway1ResourceGroup'),'Microsoft.Network/virtualNetworkGateways',parameters('virtualNetworkGatewayName1'))]"
},
"useLocalAzureIpAddress": "[parameters('useLocalAzureIpAddress')]",
"enableBgp": "[parameters('enableBgp')]",
"connectionProtocol": "[parameters('connectionProtocol')]",
"authenticationType": "PSK",
"SharedKey": "[parameters('SharedKey')]",
"ipsecPolicies": "[parameters('ipsecPolicies')]",
"dpdTimeoutSeconds": "[parameters('dpdTimeoutSeconds')]",
"ingressNatRules": "[parameters('ingressNatRules')]",
"egressNatRules": "[parameters('egressNatRules')]",
"virtualNetworkGateway2": {
"id": "[resourceId(parameters('Gateway2ResourceGroup'),'Microsoft.Network/virtualNetworkGateways',parameters('virtualNetworkGatewayName2'))]"
}
}
},
{
"name": "[parameters('connectionReverseName')]",
"type": "Microsoft.Network/connections",
"apiVersion": "2023-09-01",
"location": "[parameters('connectionReverseLocation')]",
"tags": {},
"dependsOn": [],
"properties": {
"connectionType": "[parameters('connectionType')]",
"virtualNetworkGateway1": {
"id": "[resourceId(parameters('Gateway2ResourceGroup'),'Microsoft.Network/virtualNetworkGateways',parameters('virtualNetworkGatewayName2'))]"
},
"useLocalAzureIpAddress": "[parameters('useLocalAzureIpAddress')]",
"enableBgp": "[parameters('enableBgp')]",
"connectionProtocol": "[parameters('connectionProtocol')]",
"authenticationType": "PSK",
"SharedKey": "[parameters('SharedKey')]",
"ipsecPolicies": "[parameters('ipsecPolicies')]",
"dpdTimeoutSeconds": "[parameters('dpdTimeoutSeconds')]",
"ingressNatRules": "[parameters('ingressNatRules2')]",
"egressNatRules": "[parameters('egressNatRules2')]",
"virtualNetworkGateway2": {
"id": "[resourceId(parameters('Gateway1ResourceGroup'),'Microsoft.Network/virtualNetworkGateways',parameters('virtualNetworkGatewayName1'))]"
}
}
}
]
}
接続 を行う前と後の ステータスの変化について
① 接続前、② 接続中、③ 接続後 の状態を紹介します。
① 接続前
①-1 VPN ゲートウェイ の BGP ピア
接続前なので、BGP ピア は確立しておらず、何も値は存在していません。
①-2 VM からの Ping と Trace Route
接続前なので、Ping は通りません。
Japan East VM:VNET1 から VNET2 Southeast Asia VM:VNET2 から VNET1
①-3 Network Watcher(IP フロー検証)
Japan East VM から、Southeast Asia VM へ、アクセスが拒否 されています。
Southeast Asia VM から Japan East VM へ、アクセスが拒否 されています。
①-4 Network Watcher(ネクストホップ)
Japan East VM から、Southeast Asia VM へ、ネクストホップの種類は None です。
Southeast Asia VM から Japan East VM へ、ネクストホップの種類は None です。
② 接続中
③ 接続後
③-1 VPN ゲートウェイ の BGP ピア
接続すると、BGP ピアが確立され、以下のように表示されます。
BGP が無効の場合
BGP が無効の場合は、BGP ピア には何も表示されません。
この場合は、トランジット通信 ができなくなります。
なお、BGP が無効な場合でも、V2V で 直接接続した 仮想ネットワーク同士は、ルーティングされます。
③-2 VM からの Ping と Trace Route
接続後は、以下のように Ping と Trace Route が通ります。
Japan East VM:VNET1 から VNET2 Southeast Asia VM:VNET2 から VNET1
③-3 Network Watcher(IP フロー検証)
Japan East VM から、Southeast Asia VM へ、アクセス許可 と表示されます。
Southeast Asia VM から Japan East VM へ、アクセス許可 と表示されます。
③-4 Network Watcher(ネクストホップ)
Japan East VM から、Southeast Asia VM へ、ネクストホップの種類は VirtualNetworkGateway となり、ゲートウェイ の パブリック IP が表示されます。
Southeast Asia VM から、Japan East VM へ、ネクストホップの種類は VirtualNetworkGateway となり、ゲートウェイ の パブリック IP が表示されます。
以上で、2台の VPN ゲートウェイ を V2V で接続することができました。