HONDA LABO

本田研究室

強制トンネリングをやってみる(1/2)

今回、強制トンネリングの検証をやってみました。

シナリオとしては、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を選択することも可能です。

Azure VPN Gateway について | Microsoft Learn