0
1

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 で V2V 接続を構成する

Last updated at Posted at 2024-09-30

はじめに

本記事では、下図のように VNET1 と VNET2 という 2つの仮想ネットワーク を V2V(VNET 間接続)で接続する方法を紹介していきます。
image.png

以下の公開情報に記載されている範囲について、画面キャプチャ付きの手順 に加えて、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

VNET2 の仮想ネットワーク の作成例
image.png

作成された VNET2 の状態
image.png

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ステップです。

  1. VPN ゲートウェイ(2台目)をデプロイする
  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 で 接続 する

  1. VPN ゲートウェイ の左ペインから 設定 を開き 接続 を選択します。
    続いて +追加 ボタンを押します。
    image.png
     
  2. 基本 タブでは、接続の種類VNet 対 VNet を選択し、双方向接続の確立 にチェックを入れて、1つ目の 接続名 と、2つ目の 接続名 を指定します(VNET1 -> VNET2 と VNET2 -> VNET1 を意味する名前が推奨ですが、任意の名前で問題ありません)

    リージョンは いずれかの VNET を同じ場所にしておきましょう。設定が終わったら 次:設定 を押します。(このリージョンは、接続リソースが保存される場所になりますが、どこに作っても動作はします)
    image.png
     
  3. V2V で接続を行う、1台目のゲートウェイと2台目のゲートウェイ を選択します。共有キー (PSK) を選択して キーの値(任意の文字列)を指定します。BGP を有効にする にチェックを入れて 確認および作成 を押します。
    image.png
     
  4. 確認および作成 タブでは 内容を確認して 作成 を押します。
    image.png
     
  5. 3~4分くらいで デプロイは完了します。
    image.png

② 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 ピア は確立しておらず、何も値は存在していません。

1台目のゲートウェイ (Japan East)
image.png

2台目のゲートウェイ (Southeast Asia)
image.png

①-2 VM からの Ping と Trace Route

接続前なので、Ping は通りません。

Japan East VM:VNET1 から VNET2     Southeast Asia VM:VNET2 から VNET1
image.png

①-3 Network Watcher(IP フロー検証)

Japan East VM から、Southeast Asia VM へ、アクセスが拒否 されています。
image.png

Southeast Asia VM から Japan East VM へ、アクセスが拒否 されています。
image.png

①-4 Network Watcher(ネクストホップ)

Japan East VM から、Southeast Asia VM へ、ネクストホップの種類は None です。
image.png

Southeast Asia VM から Japan East VM へ、ネクストホップの種類は None です。
image.png

② 接続中

  1. 接続を行った直後の状態は 不明 になっています。
    image.png
     
  2. しばらく待っていると 未接続 から 接続済み に変化していきます。
    image.png
     
  3. 以下のように、両方が 接続済み になるまで、5分くらい掛かります。
    image.png

③ 接続後

③-1 VPN ゲートウェイ の BGP ピア

接続すると、BGP ピアが確立され、以下のように表示されます。

1台目のゲートウェイ (Japan East)
image.png

2台目のゲートウェイ (Southeast Asia)
image.png

BGP が無効の場合
BGP が無効の場合は、BGP ピア には何も表示されません。
この場合は、トランジット通信 ができなくなります。
なお、BGP が無効な場合でも、V2V で 直接接続した 仮想ネットワーク同士は、ルーティングされます。

③-2 VM からの Ping と Trace Route

接続後は、以下のように Ping と Trace Route が通ります。

Japan East VM:VNET1 から VNET2     Southeast Asia VM:VNET2 から VNET1
image.png

注意
展開したての VM では Ping が通りません。
Windows Firewall の設定を変更して Ping が通るようにしておいてください。
image.png

以下は、有効になった状態
image.png

③-3 Network Watcher(IP フロー検証)

Japan East VM から、Southeast Asia VM へ、アクセス許可 と表示されます。
image.png

Southeast Asia VM から Japan East VM へ、アクセス許可 と表示されます。
image.png

③-4 Network Watcher(ネクストホップ)

Japan East VM から、Southeast Asia VM へ、ネクストホップの種類は VirtualNetworkGateway となり、ゲートウェイ の パブリック IP が表示されます。
image.png

Southeast Asia VM から、Japan East VM へ、ネクストホップの種類は VirtualNetworkGateway となり、ゲートウェイ の パブリック IP が表示されます。
image.png

以上で、2台の VPN ゲートウェイ を V2V で接続することができました。

0
1
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
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?