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:~$