適用対象: ✔️ Linux VM ✔️ フレキシブルなスケール セット
この記事では、Azure CLI を使用して複数の NIC を持つ VM を作成する方法について説明します。
関連リソースを作成する
最新の Azure CLI をインストールし、az login を使用して Azure アカウントにログインします。
次の例では、パラメーター名を独自の値を置き換えます。 たとえば、myResourceGroup、mystorageaccount、myVM といったパラメーター名にします。
最初に、az group create を使用して、リソース グループを作成します。 次の例では、 myResourceGroup という名前のリソース グループを eastus の場所に作成します。 これらの例では、環境変数を使用する際に宣言し、一意のリソース名にはランダムなサフィックスを追加します。
export RANDOM_SUFFIX=$(openssl rand -hex 3)
export MY_RESOURCE_GROUP_NAME="myResourceGroup$RANDOM_SUFFIX"
export REGION="WestUS2"
az group create --name $MY_RESOURCE_GROUP_NAME --location $REGION
{
"id": "/subscriptions/xxxxx/resourceGroups/myResourceGroupxxx",
"location": "WestUS2",
"managedBy": null,
"name": "myResourceGroupxxx",
"properties": {
"provisioningState": "Succeeded"
},
"tags": null,
"type": "Microsoft.Resources/resourceGroups"
}
az network vnet create で仮想ネットワークを作成します。 次の例では、myVnet という名前の仮想ネットワークと mySubnetFrontEnd という名前のサブネットを作成します。
export VNET_NAME="myVnet"
export FRONTEND_SUBNET="mySubnetFrontEnd"
az network vnet create \
--resource-group $MY_RESOURCE_GROUP_NAME \
--name $VNET_NAME \
--address-prefix 10.0.0.0/16 \
--subnet-name $FRONTEND_SUBNET \
--subnet-prefix 10.0.1.0/24
az network vnet subnet create を使用してバックエンド トラフィックのサブネットを作成します。 次の例では、mySubnetBackEnd という名前のサブネットを作成します。
export BACKEND_SUBNET="mySubnetBackEnd"
az network vnet subnet create \
--resource-group $MY_RESOURCE_GROUP_NAME \
--vnet-name $VNET_NAME \
--name $BACKEND_SUBNET \
--address-prefix 10.0.2.0/24
az network nsg create で、ネットワーク セキュリティ グループを作成します。 次の例では、myNetworkSecurityGroup という名前のネットワーク セキュリティ グループを作成します。
export NSG_NAME="myNetworkSecurityGroup"
az network nsg create \
--resource-group $MY_RESOURCE_GROUP_NAME \
--name $NSG_NAME
複数の NIC を作成して構成する
az network nic create を使用して、2 つの NIC を作成します。 次の例では、ネットワーク セキュリティ グループに接続された myNic1 と myNic2 という名前の 2 つの NIC を作成し、1 つの NIC を各サブネットに接続します。
export NIC1="myNic1"
export NIC2="myNic2"
az network nic create \
--resource-group $MY_RESOURCE_GROUP_NAME \
--name $NIC1 \
--vnet-name $VNET_NAME \
--subnet $FRONTEND_SUBNET \
--network-security-group $NSG_NAME
az network nic create \
--resource-group $MY_RESOURCE_GROUP_NAME \
--name $NIC2 \
--vnet-name $VNET_NAME \
--subnet $BACKEND_SUBNET \
--network-security-group $NSG_NAME
VM を作成して NIC を接続する
VM を作成するときは、--nics を使用して作成した NIC を指定します。 VM のサイズを選択する際には注意が必要です。 1 つの VM に追加できる NIC の合計数には制限があります。 詳しくは、 Linux VM のサイズに関する記事をご覧ください。
az vm create を使用して VM を作成します。 次の例では、myVM という名前の VM を作成します。
export VM_NAME="myVM"
az vm create \
--resource-group $MY_RESOURCE_GROUP_NAME \
--name $VM_NAME \
--image Ubuntu2204 \
--size Standard_DS3_v2 \
--admin-username azureuser \
--generate-ssh-keys \
--nics $NIC1 $NIC2
「複数の NIC 用にゲスト OS を構成する」の手順で、ゲスト OS にルーティング テーブルを追加します。
VM に NIC を追加する
前の手順では、複数の NIC を含む VM を作成しました。 Azure CLI を使用して NIC を既存の VM に追加することもできます。 VM のサイズによってサポートされる NIC の数が異なります。VM のサイズを決める際はご注意ください。 必要な場合は、VM のサイズを変更できます。
az network nic create を使用して別の仮想 NIC を作成します。 次の例では、バックエンドのサブネットおよび前の手順で作成されたネットワーク セキュリティ グループに接続された myNic3 という名前の NIC を作成します。
export NIC3="myNic3"
az network nic create \
--resource-group $MY_RESOURCE_GROUP_NAME \
--name $NIC3 \
--vnet-name $VNET_NAME \
--subnet $BACKEND_SUBNET \
--network-security-group $NSG_NAME
NIC を既存の VM に追加するには、最初に az vm deallocate を使用して VM の割り当てを解除します。 次の例では、myVM という名前の VM の割り当てを解除します。
az vm deallocate --resource-group $MY_RESOURCE_GROUP_NAME --name $VM_NAME
az vm nic add を使用して NIC を追加します。 次の例では、myNic3 を myVM に追加します。
az vm nic add \
--resource-group $MY_RESOURCE_GROUP_NAME \
--vm-name $VM_NAME \
--nics $NIC3
az vm start を使用して VM を起動します。
az vm start --resource-group $MY_RESOURCE_GROUP_NAME --name $VM_NAME
「複数の NIC 用にゲスト OS を構成する」の手順で、ゲスト OS にルーティング テーブルを追加します。
NIC を VM から削除する
NIC を既存の VM から削除するには、最初に az vm deallocate を使用して VM の割り当てを解除します。 次の例では、myVM という名前の VM の割り当てを解除します。
az vm deallocate --resource-group $MY_RESOURCE_GROUP_NAME --name $VM_NAME
az vm nic remove を使用して NIC を削除します。 次の例では、myNic3 を myVM から削除します。
az vm nic remove \
--resource-group $MY_RESOURCE_GROUP_NAME \
--vm-name $VM_NAME \
--nics $NIC3
az vm start を使用して VM を起動します。
az vm start --resource-group $MY_RESOURCE_GROUP_NAME --name $VM_NAME
Resource Manager テンプレートを使用して複数の NIC を作成する
Azure Resource Manager テンプレートで宣言型の JSON ファイルを使用して環境を定義します。 詳しくは、「Azure Resource Manager の概要」をご覧ください。 Resource Manager テンプレートでは、複数の NIC の作成など、デプロイ時にリソースの複数のインスタンスを作成することができます。 copy を使用して、作成するインスタンスの数を指定します。
"copy": {
"name": "multiplenics"
"count": "[parameters('count')]"
}
詳細については、copy を使用した複数のインスタンスの作成に関する記事を参照してください。
copyIndex() を使用してリソース名に数値を追加することもできます。これにより、myNic1 や myNic2 などを作成できます。インデックス値を追加する例を次に示します。
"name": "[concat('myNic', copyIndex())]",
完全な例については、「 Resource Manager テンプレートを使用して複数の NIC を作成する」を参照してください。
「複数の NIC 用にゲスト OS を構成する」の手順で、ゲスト OS にルーティング テーブルを追加します。
複数の NIC 用にゲスト OS を構成する
前の手順では、仮想ネットワークとサブネットを作成し、NIC を接続した後、VM を作成しました。 パブリック IP アドレスと SSH トラフィックを許可するネットワーク セキュリティ グループの規則は作成していません。 複数の NIC 用にゲスト OS を構成するには、リモート接続を許可し、VM 上でローカルにコマンドを実行する必要があります。
SSH トラフィックを許可するには、次のように az network nsg rule create を使用してネットワーク セキュリティ グループの規則を作成します。
az network nsg rule create \
--resource-group $MY_RESOURCE_GROUP_NAME \
--nsg-name $NSG_NAME \
--name allow_ssh \
--priority 101 \
--destination-port-ranges 22
az network public-ip create を使用してパブリック IP アドレスを作成し、az network nic ip-config update を使用してこれを最初の NIC に割り当てます。
export PUBLIC_IP_NAME="myPublicIP"
az network public-ip create --resource-group $MY_RESOURCE_GROUP_NAME --name $PUBLIC_IP_NAME
az network nic ip-config update \
--resource-group $MY_RESOURCE_GROUP_NAME \
--nic-name $NIC1 \
--name ipconfig1 \
--public-ip $PUBLIC_IP_NAME
VM のパブリック IP アドレスを表示するには、 az vm show を次のように使用します。
az vm show --resource-group $MY_RESOURCE_GROUP_NAME --name $VM_NAME -d --query publicIps -o tsv
x.x.x.x
次に、VM のパブリック IP アドレスに SSH 接続します。 前の手順で指定した既定のユーザー名は azureuser でした。 自分のユーザー名とパブリック IP アドレスを指定してください。
export IP_ADDRESS=$(az vm show --resource-group $MY_RESOURCE_GROUP_NAME --name $VM_NAME -d --query publicIps -o tsv)
ssh -o StrictHostKeyChecking=no azureuser@$IP_ADDRESS
セカンダリ ネットワーク インターフェイスとの間で送受信を行うには、セカンダリ ネットワーク インターフェイスごとに、オペレーティング システムに永続的なルートを手動で追加する必要があります。 この記事では、eth1 がセカンダリ インターフェイスです。 オペレーティング システムに永続的なルートを追加する方法は、ディストリビューションによって異なります。 手順については、ディストリビューションのドキュメントを参照してください。
オペレーティング システムにルートを追加する場合、ゲートウェイ アドレスは、ネットワーク インターフェイスがあるサブネットの最初のアドレスです。 たとえば、サブネットに 10.0.2.0/24 の範囲が割り当てられている場合、ルートに指定するゲートウェイは 10.0.2.1、サブネットに範囲 10.0.2.128/25 が割り当てられている場合、ルートに指定するゲートウェイは 10.0.2.129 です。 インターフェイスのすべてのトラフィックが指定されたゲートウェイを通過する場合は、ルートの宛先に対して特定のネットワークを定義するか、宛先として 0.0.0.0 を指定できます。 各サブネットのゲートウェイは仮想ネットワークによって管理されます。
セカンダリ インターフェイスのルートを追加したら、route -n
を使用してそのルートがルート テーブルに含まれていることを確認します。 この記事の VM に 2 つのネットワーク インターフェイスが追加されたルート テーブルの出力例を次に示します。
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.0.1.1 0.0.0.0 UG 0 0 0 eth0
0.0.0.0 10.0.2.1 0.0.0.0 UG 0 0 0 eth1
10.0.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
10.0.2.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
168.63.129.16 10.0.1.1 255.255.255.255 UGH 0 0 0 eth0
169.254.169.254 10.0.1.1 255.255.255.255 UGH 0 0 0 eth0
再起動後にルート テーブルを再度確認して、追加したルートが再起動後も保持されていることを確認します。 接続をテストするには、次のコマンドを入力します。たとえば、 eth1 はセカンダリ ネットワーク インターフェイスの名前です。 ping bing.com -c 4 -I eth1
次のステップ
複数の NIC を持つ VM を作成する際は、 Linux VM のサイズ を確認してください。 VM の各サイズでサポートされている NIC の最大数に注意してください。
VM をさらにセキュリティで保護するには、Just In Time VM アクセスを使用します。 この機能は、必要に応じて一定期間にわたり、SSH トラフィックに対してネットワーク セキュリティ グループ規則を開きます。 詳細については、「Manage virtual machine access using just in time (ジャスト イン タイムを使用して仮想マシンへのアクセスを管理する)」を参照してください。