vnet peeringを使用すると、Azureの仮想ネットワーク同士を接続できます。このページではvnet peeringの使い方を説明します。
前提
公式ドキュメント
参考になる公式ドキュメントを以下に示します。
構成図
以下の構成で動作確認をします。

事前設定
仮想ネットワークと仮想マシン
以下、リソースグループを作成します。
az group create --name MyResourceGroup --location japaneast
仮想ネットワークを3つ作成し、それぞれに仮想マシンを1つ配置します。
1つ目の仮想ネットワークの設定は以下の通りです。
az network vnet create \ --resource-group MyResourceGroup \ --name Vnet16 \ --address-prefix 172.16.0.0/16 az network vnet subnet create \ --resource-group MyResourceGroup \ --name Subnet1601 \ --vnet-name Vnet16 \ --address-prefixes 172.16.1.0/24 az vm create \ --resource-group MyResourceGroup \ --name linux010 \ --image UbuntuLTS \ --size Standard_B1s \ --admin-username azureuser \ --ssh-key-values ~/.ssh/authorized_keys \ --vnet-name Vnet16 \ --subnet Subnet1601 \ --private-ip-address 172.16.1.10
2つ目の仮想ネットワークの設定は以下の通りです。
az network vnet create \ --resource-group MyResourceGroup \ --name Vnet17 \ --address-prefix 172.17.0.0/16 az network vnet subnet create \ --resource-group MyResourceGroup \ --name Subnet1701 \ --vnet-name Vnet17 \ --address-prefixes 172.17.1.0/24 az vm create \ --resource-group MyResourceGroup \ --name linux020 \ --image UbuntuLTS \ --size Standard_B1s \ --admin-username azureuser \ --ssh-key-values ~/.ssh/authorized_keys \ --vnet-name Vnet17 \ --subnet Subnet1701 \ --private-ip-address 172.17.1.20
3つ目の仮想ネットワークの設定は以下の通りです。
az network vnet create \ --resource-group MyResourceGroup \ --name Vnet18 \ --address-prefix 172.18.0.0/16 az network vnet subnet create \ --resource-group MyResourceGroup \ --name Subnet1801 \ --vnet-name Vnet18 \ --address-prefixes 172.18.1.0/24 az vm create \ --resource-group MyResourceGroup \ --name linux030 \ --image UbuntuLTS \ --size Standard_B1s \ --admin-username azureuser \ --ssh-key-values ~/.ssh/authorized_keys \ --vnet-name Vnet18 \ --subnet Subnet1801 \ --private-ip-address 172.18.1.30
サイト間VPN
オンプレミスとのサイト間VPNを設定します。具体的な設定値の意味は「Azure サイト間接続(Site to Site VPN) static route編」を参照ください。
この検証シナリオは、オンプレミス拠点のprefixがどのようにadvertiseされるかを観察するのみですので、実際のオンプレミス拠点とIPsecを確立する必要はありません。オンプレミス側の機器の準備も必要ありません。もし、pingなどの疎通確認をしたい方は実際にIPsecを確立すると良いでしょう。
# オンプレミス側のパブリックIPアドレスは適宜変更ください
# もし、実際にIPsecの確立を試みないならば、LOCAL_GATEWA_ADDRは任意の値で差し支えございません。
LOCAL_GATEWAY_ADDR="20.210.140.4"
az network vnet subnet create \
--resource-group MyResourceGroup \
--name GatewaySubnet \
--vnet-name Vnet16 \
--address-prefixes 172.16.0.0/27
az network public-ip create \
--resource-group MyResourceGroup \
--name VpnGwPublicIp \
--sku Standard
az network vnet-gateway create \
--name VnetGw \
--public-ip-address VpnGwPublicIp \
--resource-group MyResourceGroup \
--vnet Vnet16 \
--gateway-type Vpn \
--vpn-type RouteBased \
--sku VpnGw1 \
--no-wait
az network local-gateway create \
--gateway-ip-address ${LOCAL_GATEWAY_ADDR} \
--name Site01 \
--resource-group MyResourceGroup \
--local-address-prefixes 172.20.0.0/16
az network vpn-connection create \
--name ConnectToSite01 \
--resource-group MyResourceGroup \
--vnet-gateway1 VnetGw \
--shared-key P@ssw0rd1234 \
--local-gateway2 Site01
Vnet peeringの設定
書式
Vnet peeringは以下のようなコマンドで、どの仮想ネットワークを接続するかを指定します。
異なるサブスクリプション間での接続も可能です。異なるサブスクリプションで接続する場合はremote-vnetに対向仮想ネットワークのIDを指定します。
az network vnet peering create \ --name <ピア名> \ --resource-group <リソースグループ名> \ --vnet-name <自身の仮想ネットワーク名> \ --remote-vnet <対向の仮想ネットワーク名> \ <転送可否を指定する各種オプション>
Vnet peeringは単に接続するだけではなく、転送の可否を指定する事ができます。転送可否を指定するオプションは以下の通りです。
| オプション | 意味 |
|---|---|
| allow-forwarded-traffic | 対向仮想ネットワークへの転送を許可する |
| allow-vnet-access | 対向仮想ネットワークからの転送を許可する |
| allow-gateway-transit | 対向仮想ネットワークが自身の仮想ネットワークゲートウェイを使用するのを許可する。 |
| use-remote-gateways | 対向の仮想ネットワークゲートウェイを使用する。なお、対向でallow-gateway-transitの指定が必要である事に注意する。 |
vnet16とvnet17との間のピア設定
vnet16に対して以下のピアを設定します。
az network vnet peering create \ --name peer-vnet16-vnet17 \ --resource-group MyResourceGroup \ --vnet-name vnet16 \ --remote-vnet vnet17 \ --allow-forwarded-traffic \ --allow-vnet-access \ --allow-gateway-transit
ピアは片方の仮想ネットワークに設定してもパケットは転送されません。双方の仮想ネットワークに設定が必要です。vnet17に対して以下のピアを設定します。
az network vnet peering create \ --name peer-vnet17-vnet16 \ --resource-group MyResourceGroup \ --vnet-name vnet17 \ --remote-vnet vnet16 \ --allow-forwarded-traffic \ --allow-vnet-access \ --use-remote-gateways
vnet16とvnet18との間のピア設定
vnet16に対して以下のピアを設定します。
az network vnet peering create \ --name peer-vnet16-vnet18 \ --resource-group MyResourceGroup \ --vnet-name vnet16 \ --remote-vnet vnet18 \ --allow-forwarded-traffic \ --allow-vnet-access \ --allow-gateway-transit
vnet18に対して以下のピアを設定します。
az network vnet peering create \ --name peer-vnet18-vnet16 \ --resource-group MyResourceGroup \ --vnet-name vnet18 \ --remote-vnet vnet16 \ --allow-forwarded-traffic \ --allow-vnet-access \ --use-remote-gateways
Vnet peeringの動作確認
有効なルート
vnet peeringを設定し適切にprefixがadvertiseされているかどうかを確認します。どのprefixがadvertiseされたかは「ネットワークインターフェース」「有効なルート」画面で確認できます。
vnet16に属するlinux010の有効なルートを確認します。vnet17(172.17.0.0/16)とvnet18(172.16.0.0/16)のprefixを認識している事が分かります。

vnet17に属するlinux020の有効なルートを確認します。vnet16(172.16.0.0/16)とオンプレミス拠点(172.20.0.0/16)のprefixを認識している事が分かります。一方、vnet18(172.18.0.0/16)のprefixは認識していません。

vnet18に属するlinux030の有効なルートを確認します。vnet16(172.16.0.0/16)とオンプレミス拠点(172.20.0.0/16)のprefixを認識している事が分かります。一方、vnet17(172.17.0.0/16)のprefixは認識していません。

疎通確認
vnet16(172.16.1.10)からvnet17(172.17.1.20)へ、vnet16(172.16.1.10)からvnet18(172.18.1.30)への疎通を確認します。
azureuser@linux010:~$ ping 172.17.1.20 -c 3 PING 172.17.1.20 (172.17.1.20) 56(84) bytes of data. 64 bytes from 172.17.1.20: icmp_seq=1 ttl=64 time=2.28 ms 64 bytes from 172.17.1.20: icmp_seq=2 ttl=64 time=1.13 ms 64 bytes from 172.17.1.20: icmp_seq=3 ttl=64 time=1.20 ms --- 172.17.1.20 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2002ms rtt min/avg/max/mdev = 1.138/1.543/2.288/0.528 ms azureuser@linux010:~$ azureuser@linux010:~$ azureuser@linux010:~$ ping 172.18.1.30 -c 3 PING 172.18.1.30 (172.18.1.30) 56(84) bytes of data. 64 bytes from 172.18.1.30: icmp_seq=1 ttl=64 time=2.03 ms 64 bytes from 172.18.1.30: icmp_seq=2 ttl=64 time=2.26 ms 64 bytes from 172.18.1.30: icmp_seq=3 ttl=64 time=1.37 ms --- 172.18.1.30 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2002ms rtt min/avg/max/mdev = 1.377/1.891/2.261/0.374 ms azureuser@linux010:~$
vnet17(172.17.1.20)からvnet16(172.16.1.10)への疎通を確認します。vnet17(172.17.1.20)からvnet18(172.18.1.30)への疎通できない事を確認します。
azureuser@linux020:~$ ping 172.16.1.10 -c 3 PING 172.16.1.10 (172.16.1.10) 56(84) bytes of data. 64 bytes from 172.16.1.10: icmp_seq=1 ttl=64 time=1.83 ms 64 bytes from 172.16.1.10: icmp_seq=2 ttl=64 time=1.61 ms 64 bytes from 172.16.1.10: icmp_seq=3 ttl=64 time=1.22 ms --- 172.16.1.10 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2003ms rtt min/avg/max/mdev = 1.224/1.555/1.831/0.252 ms azureuser@linux020:~$ azureuser@linux020:~$ azureuser@linux020:~$ ping 172.18.1.30 -c 3 PING 172.18.1.30 (172.18.1.30) 56(84) bytes of data. --- 172.18.1.30 ping statistics --- 3 packets transmitted, 0 received, 100% packet loss, time 2031ms azureuser@linux020:~$
