Young Leaves

ピアリング接続で複数のAzure 仮想ネットワーク間の接続をする

今回はAzure 仮想ネットワークでピアリング接続を行い、複数の仮想ネットワーク内で通信を行う方法について説明します。

実施環境

Azure CloudShell

2.45.0

前提条件

今回はAzure Portal からAzure CloudShell を使用しコマンドを実行するため、事前にAzure CloudShell の作成をお願いします。

仮想ネットワークのピアリングについて

Azure 仮想ネットワークのピアリングは、2つ以上の仮想ネットワーク間を通信する際に使用する機能です。仮想ネットワークのピアリングはMicrosoft のバックボーンを使用しプライベートの通信を行うため、インターネットを介さず仮想ネットワーク間を安全に通信できます。また、ピアリングは仮想ネットワークのダウンタイムを発生させずに作成できます。

ピアリングには同じリージョン内の仮想ネットワークと通信を行うVirtual Network ピアリングと異なるリージョンの仮想ネットワークと通信を行うグローバル仮想ネットワークピアリングがあります。リージョンが異なることによる機能の違いは特にありませんが、ピアリング時の料金が若干異なります。

Virtual Network の価格

ピアリングを行うには、仮想ネットワーク間でIP アドレス空間が重複していない必要があります。IP アドレス空間の重複が無ければ、ピアリング確立後に仮想ネットワークのIP アドレス空間を変更することも可能です。ピアリング作成後に重複したIP アドレス空間の新規追加や変更を行うとエラーとなります。

仮想ネットワークピアリングでは、一方の仮想ネットワークの通信を仮想アプライアンスやゲートウェイに向けるサービスチェイニング機能もあります。また、ピアリングした仮想ネットワークでゲートウェイを使用することで、オンプレミスからピアリングされた仮想ネットワークに接続できます。

仮想ネットワークピアリングの制限

仮想ネットワークピアリング接続は各リージョンの仮想ネットワークごとに最大500 まで作成可能です。上限以上のピアリングを追加したい場合は上限緩和のリクエスト申請が必要です。

ピアリング接続の作成

今回は以下構成でピアリング接続を行います。今回はtest-vm1 から確認を行うため、test-vm1 には特定のIP アドレスからSSH 接続を実施できる設定とします。

初めにリソースグループと仮想ネットワークを作成します。

# リソース作成用の変数を定義する
RESOURCE_GROUP="test-rg"
VNET1="test-vnet1"
VNET2="test-vnet2"
SUBNET1="subnet1"
SUBNET2="subnet2"
PEERING1="test-peering1"
PEERING2="test-peering2"
VM1="test-vm1"
VM2="test-vm2"
PUBIP="test-pubip"
VM_USER="azureuser"
LOCATION="japaneast"

# リソースグループを作成する
az group create -n $RESOURCE_GROUP -l $LOCATION

# 仮想ネットワークを作成する
az network vnet create -n $VNET1 \
    -g $RESOURCE_GROUP \
    -l $LOCATION \
    --address-prefixes 172.16.0.0/16 \
    --subnet-name $SUBNET1 \
    --subnet-prefixes 172.16.0.0/24

az network vnet create -n $VNET2 \
    -g $RESOURCE_GROUP \
    -l $LOCATION \
    --address-prefixes 192.168.0.0/16 \
    --subnet-name $SUBNET2 \
    --subnet-prefixes 192.168.0.0/24

仮想ネットワーク作成後、仮想マシンを作成します。仮想マシン作成後、test-vm1 からtest-vm2 にping コマンドを実行し、test-vm2 と疎通できないことを確認します。

# test-vm1用のパブリックIPアドレスを作成する
az network public-ip create -n $PUBIP \
    -g $RESOURCE_GROUP \
    --sku Standard

# test-vnet1にtest-vm1を作成する
# test-vm1はパブリックからSSH接続するため、パブリックIPの付与とSSHキーを作成する
# test-vm1作成後、publicIpAddressの値を控える
az vm create --name $VM1 \
    --resource-group $RESOURCE_GROUP \
    --image UbuntuLTS \
    --vnet-name $VNET1 \
    --subnet $SUBNET1 \
    --public-ip-address $PUBIP \
    --admin-username $VM_USER \
    --generate-ssh-keys

# test-vnet2にtest-vm2を作成する
# test-vm2作成後、privateIpAddressの値を控える
# 今回はtest-vm2にssh接続を行わないためSSHキーは作成しない
az vm create --name $VM2 \
    --resource-group $RESOURCE_GROUP \
    --image UbuntuLTS \
    --vnet-name $VNET2 \
    --subnet $SUBNET2 \
    --public-ip-address "" \
    --admin-username $VM_USER

# test-vm1に接続する
# 初回接続時にフィンガープリントに関する確認が出るため「yes」を入力する
ssh $VM_USER@<test-vm1のpublicIpAddressの値>

# test-vm1からtest-vm2への疎通を確認する
# ここではピアリングを作成していないため疎通できない
ping <test-vm2のprivateIpAddressの値>

疎通できないことを確認したら、test-vnet1 とtest-vnet2 で通信できるようにピアリングを作成します。

# test-vnet1とtest-vnet2のピアリングを作成する
az network vnet peering create -n $PEERING1 \
    -g $RESOURCE_GROUP \
    --vnet-name $VNET1 \
    --remote-vnet $VNET2 \
    --allow-forwarded-traffic \
    --allow-vnet-access

az network vnet peering create -n $PEERING2 \
    -g $RESOURCE_GROUP \
    --vnet-name $VNET2 \
    --remote-vnet $VNET1 \
    --allow-forwarded-traffic \
    --allow-vnet-access

test-vnet1 とtest-vnet2 のピアリング作成後、再度test-vm1 からtest-vm2 にping コマンドを実行し、test-vm2 に疎通できることを確認します。

# test-vm1からtest-vm2へ疎通確認をする
ping <test-vm2のprivateIpAddressの値>

疎通の確認ができたら、リソースをクリーンアップします。

# リソースをクリーンアップする
az group delete -n $RESOURCE_GROUP

ピアリング作成時の設定

ピアリング作成時には、以下の設定項目があります。

ピアリング元の仮想ネットワーク

ピアリング リンク名

仮想ネットワーク上のピアリング名を設定します。ピアリング名は仮想ネットワーク内で一意である必要があります。

リモート仮想ネットワークへのトラフィック

ピアリングした仮想ネットワーク間のトラフィックの設定を行います。既定では許可が設定されますが、一時的にトラフィックを制限したい場合はブロックするよう設定します。

リモート仮想ネットワークから転送されたトラフィック

仮想アプライアンスによって転送された通信をピアリングで許可するかどうか設定します。既定では許可が設定されます。

仮想ネットワーク ゲートウェイまたはルート サーバー

ピアリングされた仮想ネットワークの通信を仮想ネットワークゲートウェイに転送できるか設定します。既定では転送しない設定となります。

ピアリング先の仮想ネットワーク

ピアリング リンク名

仮想ネットワーク上のピアリング名を設定します。ピアリング名は仮想ネットワーク内で一意である必要があります。

仮想ネットワークのデプロイモデル

仮想ネットワークで使用したデプロイモデルを選択します

リソース ID を知っている

仮想ネットワークに読み取り権限が無いまたはサブスクリプションで仮想ネットワークの読み取り権限が無い場合、チェックを入れてリソースIDを設定します。仮想ネットワークへの読み取り権限がある場合はチェックを入れない設定にします。

サブスクリプション

ピアリング先の仮想ネットワークがあるサブスクリプションを設定します。「リソースID を知っている」を設定した場合、この設定は使用できません。

仮想ネットワーク

ピアリング先の仮想ネットワークを設定します。「リソースID を知っている」を設定した場合、この設定は使用できません。

リモート仮想ネットワークへのトラフィック

ピアリングした仮想ネットワーク間のトラフィックの設定を行います。既定では許可が設定されますが、一時的にトラフィックを制限したい場合はブロックするよう設定します。

リモート仮想ネットワークから転送されたトラフィック

仮想アプライアンスによって転送された通信をピアリングで許可するかどうか設定します。既定では許可が設定されます。

仮想ネットワーク ゲートウェイまたはルート サーバー

ピアリングされた仮想ネットワークの通信を仮想ネットワークゲートウェイに転送できるか設定します。既定では転送しない設定となります。

ピアリングの動作確認

ピアリング通信の可否は以下の通りとなります。ピアリング通信はリソースグループ、リージョンが異なっていても作成可能となりますが、異なるサブスクリプションの仮想ネットワーク同士でピアリングを行う場合は、アクセス許可やAzure AD へのゲストユーザー登録が必要となります。

同じリソースグループ、同じリージョン

同じリソースグループ、異なるリージョン

異なるリソースグループ、同じリージョン

異なるリソースグループ、異なるリージョン

異なるサブスクリプションでのピアリング

○ (アクセス許可、Azure AD へのゲストユーザー登録が必要)

まとめ

  • 仮想ネットワーク間で通信を行うには、仮想ネットワーク間でピアリングを作成する必要がある。
  • ピアリング作成には、各仮想ネットワークのIP アドレス空間が重複してはいけない。
  • ピアリング作成後、IP アドレスが重複しなければ仮想ネットワークやサブネットのアドレス空間を変更できる。
  • ピアリングはリソースグループ、リージョンが異なっても作成、接続可能となる。サブスクリプションが異なる場合はアクセス許可などの追加設定が必要。
  • グローバル仮想ネットワークピアリングを行う場合、同じリージョンのピアリングより料金が高くなる。

参考資料