今回、強制トンネリングの検証をやってみました。
シナリオとしては、Azure上で仮想ネットワークを2つ作成してお互いを仮想ネットワークゲートウェイで接続します。片方の仮想ネットワークはAzureですが、もう片方をオンプレミス環境と仮定します。
そして、Azureからオンプレミス環境の仮想ネットワークに対して、強制トンネリングを張るという流れです。
まず今回は、仮想ネットワークを作成して接続するところまでを実施してみます。
仮想ネットワーク同士の接続
仮想ネットワークの作成と接続は、以下のMS Learnをもとに行います。
はじめに - Training | Microsoft Learn
今回作成するのは以下のような構成です。
Azure 側の VPN ゲートウェイを作成する
最初にAzure側のVPN ゲートウェイを作成します。Azure Cloud Shellを使ってカンタンにできます。まずリソースグループを作成します。
az group create \ --name forced-tunneling-test \ --location japaneast
次にパブリックIPを作ります。
az network public-ip create \ --resource-group forced-tunneling-test \ --name PIP-VNG-Azure-VNet-1 \ --allocation-method Dynamic
さらに仮想ネットワークを作成し、サービスサブネットとゲートウェイサブネットを作成します。
az network vnet create \ --resource-group forced-tunneling-test \ --name Azure-VNet-1 \ --address-prefixes 10.0.0.0/16 \ --subnet-name Services \ --subnet-prefixes 10.0.0.0/24 az network vnet subnet create \ --resource-group forced-tunneling-test \ --vnet-name Azure-VNet-1 \ --address-prefixes 10.0.255.0/27 \ --name GatewaySubnet
作成された仮想ネットワークを表示したいときはこちらのコマンドを実行しておきます。
az network vnet list --output table
その後、仮想ネットワークゲートウェイを作成します。
az network vnet-gateway create \ --resource-group forced-tunneling-test \ --name VNG-Azure-VNet-1 \ --public-ip-addresses PIP-VNG-Azure-VNet-1 \ --vnet Azure-VNet-1 \ --gateway-type Vpn \ --vpn-type RouteBased \ --sku VpnGw1 \ --no-wait
オンプレミスの VPN ゲートウェイを作成する
オンプレミス側も同様の手順でVPN ゲートウェイを作成します。まずパブリックIPを作ります。
az network public-ip create \ --resource-group forced-tunneling-test \ --name PIP-VNG-HQ-Network \ --allocation-method Dynamic
次に仮想ネットワークを作成し、アプリケーションサブネットとゲートウェイサブネットを作成します。
az network vnet create \ --resource-group forced-tunneling-test \ --name HQ-Network \ --address-prefixes 172.16.0.0/16 \ --subnet-name Applications \ --subnet-prefixes 172.16.0.0/24 az network vnet subnet create \ --resource-group forced-tunneling-test \ --address-prefixes 172.16.255.0/27 \ --name GatewaySubnet \ --vnet-name HQ-Network
その後、仮想ネットワークゲートウェイを作成します。
az network vnet-gateway create \ --resource-group forced-tunneling-test \ --name VNG-HQ-Network \ --public-ip-addresses PIP-VNG-HQ-Network \ --vnet HQ-Network \ --gateway-type Vpn \ --vpn-type RouteBased \ --sku VpnGw1 \ --no-wait
ゲートウェイの作成が完了するまで、30 分以上かかるので、以下コマンドを実行してゲートウェイの作成が完了するまで待機します。作成が完了すると「ProvisioningState 」が「Succeeded」という表示になります。
watch -d -n 5 az network vnet-gateway list \ --resource-group forced-tunneling-test \ --output table
ローカルネットワークゲートウェイを作成する
次に、ローカルネットワークゲートウェイを作成します。
ローカルネットワークゲートウェイは、オンプレミス側のVPNデバイスのIPとオンプレミスネットワークのアドレス空間の情報を、値として保持するだけのリソースです。
まずはAzure側のローカルネットワークゲートウェイから。
PIPVNGHQNETWORK=$(az network public-ip show \ --resource-group forced-tunneling-test \ --name PIP-VNG-HQ-Network \ --query "[ipAddress]" \ --output tsv) az network local-gateway create \ --resource-group forced-tunneling-test \ --gateway-ip-address $PIPVNGHQNETWORK \ --name LNG-HQ-Network \ --local-address-prefixes 172.16.0.0/16
続いて、オンプレミス側のローカルネットワークゲートウェイを作成します。
PIPVNGAZUREVNET1=$(az network public-ip show \ --resource-group forced-tunneling-test \ --name PIP-VNG-Azure-VNet-1 \ --query "[ipAddress]" \ --output tsv) az network local-gateway create \ --resource-group forced-tunneling-test \ --gateway-ip-address $PIPVNGAZUREVNET1 \ --name LNG-Azure-VNet-1 \ --local-address-prefixes 10.1.0.0/16
接続を作成する
次に、接続を作成します。
接続は、仮想ネットワークゲートウェイと、ローカルネットワークゲートウェイの間で、VPNトンネルを確立することを宣言するリソースです。
まずは接続に使用する共有キーを作成します。
SHAREDKEY=sharedkey123456789
そして接続を作成します。まずはAzureからオンプレミスへの接続です。
az network vpn-connection create \ --resource-group forced-tunneling-test \ --name Azure-VNet-1-To-HQ-Network \ --vnet-gateway1 VNG-Azure-VNet-1 \ --shared-key $SHAREDKEY \ --local-gateway2 LNG-HQ-Network
次に逆のオンプレミスからAzureへの接続です。
az network vpn-connection create \ --resource-group forced-tunneling-test \ --name HQ-Network-To-Azure-VNet-1 \ --vnet-gateway1 VNG-HQ-Network \ --shared-key $SHAREDKEY \ --local-gateway2 LNG-Azure-VNet-1
その後、次のコマンドを実行して、接続されていることを確認します。接続が完了するまで数分かかることがあります。
az network vpn-connection show \ --resource-group forced-tunneling-test \ --name Azure-VNet-1-To-HQ-Network \ --output table \ --query '{Name:name,ConnectionStatus:connectionStatus}'
補足
VPN gatewayのSKUについてはこちらに記載があります。機能やスループットによって選択するSKUを決めます。今回はVpnGw1としましたが、それより小さいBasicを選択することも可能です。