Come creare una macchina virtuale Linux in Azure con più schede di interfaccia di reteHow to create a Linux virtual machine in Azure with multiple network interface cards

È possibile creare una macchina virtuale (VM) in Azure con più interfacce di rete virtuale (NIC) collegate.You can create a virtual machine (VM) in Azure that has multiple virtual network interfaces (NICs) attached to it. Uno scenario comune è quello di avere subnet diverse per la connettività front-end e back-end oppure una rete dedicata a una soluzione di monitoraggio o backup.A common scenario is to have different subnets for front-end and back-end connectivity, or a network dedicated to a monitoring or backup solution. Questo articolo illustra come creare una VM con più schede di interfaccia di rete collegate e come aggiungere o rimuovere le schede di interfaccia di rete da una VM esistente.This article details how to create a VM with multiple NICs attached to it and how to add or remove NICs from an existing VM. Le differenti dimensioni della macchina virtuale supportano un numero variabile di schede di rete, pertanto scegliere le dimensioni della macchina virtuale di conseguenza.Different VM sizes support a varying number of NICs, so size your VM accordingly.

Questo articolo illustra come creare una macchina virtuale con più schede di interfaccia di rete usando l'interfaccia della riga di comando di Azure 2.0.This article details how to create a VM with multiple NICs with the Azure CLI 2.0. È possibile anche eseguire questi passaggi tramite l'interfaccia della riga di comando di Azure 1.0.You can also perform these steps with the Azure CLI 1.0.

Creare risorse di supportoCreate supporting resources

Installare la versione più recente dell'interfaccia della riga di comando di Azure 2.0 e accedere a un account Azure tramite il comando az login.Install the latest Azure CLI 2.0 and log in to an Azure account using az login.

Nell'esempio seguente sostituire i nomi dei parametri di esempio con i valori desiderati.In the following examples, replace example parameter names with your own values. I nomi dei parametri di esempio includono myResourceGroup, mystorageaccount e myVM.Example parameter names included myResourceGroup, mystorageaccount, and myVM.

Creare prima un gruppo di risorse con az group create.First, create a resource group with az group create. L'esempio seguente crea un gruppo di risorse denominato myResourceGroup nella posizione eastus:The following example creates a resource group named myResourceGroup in the eastus location:

az group create --name myResourceGroup --location eastus

Creare la rete virtuale con az network vnet create.Create the virtual network with az network vnet create. L'esempio seguente crea una rete virtuale denominata myVnet e una subnet denominata mySubnetFrontEnd:The following example creates a virtual network named myVnet and subnet named mySubnetFrontEnd:

az network vnet create \
    --resource-group myResourceGroup \
    --name myVnet \
    --address-prefix 192.168.0.0/16 \
    --subnet-name mySubnetFrontEnd \
    --subnet-prefix 192.168.1.0/24

Creare una subnet per il traffico di back-end con il comando az network vnet subnet create.Create a subnet for the back-end traffic with az network vnet subnet create. L'esempio seguente crea una subnet denominata mySubnetBackEnd:The following example creates a subnet named mySubnetBackEnd:

az network vnet subnet create \
    --resource-group myResourceGroup \
    --vnet-name myVnet \
    --name mySubnetBackEnd \
    --address-prefix 192.168.2.0/24

Creare un gruppo di sicurezza di rete con il comando az network nsg create.Create a network security group with az network nsg create. L'esempio seguente crea un gruppo di sicurezza di rete denominato myNetworkSecurityGroup:The following example creates a network security group named myNetworkSecurityGroup:

az network nsg create \
    --resource-group myResourceGroup \
    --name myNetworkSecurityGroup

Creare e configurare più schede di interfaccia di reteCreate and configure multiple NICs

Creare due schede di interfaccia di rete con il comando az network nic create.Create two NICs with az network nic create. L'esempio seguente crea due schede di interfaccia di rete, denominate myNic1 e myNic2, connesse al gruppo di sicurezza di rete, con una scheda che si connette a ogni subnet:The following example creates two NICs, named myNic1 and myNic2, connected the network security group, with one NIC connecting to each subnet:

az network nic create \
    --resource-group myResourceGroup \
    --name myNic1 \
    --vnet-name myVnet \
    --subnet mySubnetFrontEnd \
    --network-security-group myNetworkSecurityGroup
az network nic create \
    --resource-group myResourceGroup \
    --name myNic2 \
    --vnet-name myVnet \
    --subnet mySubnetBackEnd \
    --network-security-group myNetworkSecurityGroup

Creare una macchina virtuale e collegare le schede di interfaccia di reteCreate a VM and attach the NICs

Quando si crea la macchina virtuale, specificare le schede di interfaccia di rete create con --nics.When you create the VM, specify the NICs you created with --nics. L'utente deve anche fare attenzione quando seleziona la dimensione della macchina virtuale.You also need to take care when you select the VM size. Esistono dei limiti per quanto riguarda il numero totale di schede di rete che è possibile aggiungere.There are limits for the total number of NICs that you can add to a VM. Ulteriori informazioni sulle dimensioni delle macchine virtuali di Linux.Read more about Linux VM sizes.

Creare una macchina virtuale con il comando az vm create.Create a VM with az vm create. L'esempio seguente crea una VM denominata myVM:The following example creates a VM named myVM:

az vm create \
    --resource-group myResourceGroup \
    --name myVM \
    --image UbuntuLTS \
    --size Standard_DS3_v2 \
    --admin-username azureuser \
    --generate-ssh-keys \
    --nics myNic1 myNic2

Aggiungere una scheda di interfaccia di rete a una VMAdd a NIC to a VM

I passaggi precedenti hanno consentito di creare una VM con più schede di interfaccia di rete.The previous steps created a VM with multiple NICs. È anche possibile aggiungere schede di interfaccia di rete a una VM esistente con l'interfaccia della riga di comando di Azure 2.0.You can also add NICs to an existing VM with the Azure CLI 2.0. Le differenti dimensioni della macchina virtuale supportano un numero variabile di schede di rete, pertanto scegliere le dimensioni della macchina virtuale di conseguenza.Different VM sizes support a varying number of NICs, so size your VM accordingly. Se necessario, è possibile ridimensionare una VM.If needed, you can resize a VM.

Creare un'altra scheda di interfaccia di rete con az network nic create.Create another NIC with az network nic create. L'esempio seguente crea una scheda di interfaccia rete denominata myNic3 connessa alla subnet back-end e al gruppo di sicurezza di rete creato nei passaggi precedenti:The following example creates a NIC named myNic3 connected to the back-end subnet and network security group created in the previous steps:

az network nic create \
    --resource-group myResourceGroup \
    --name myNic3 \
    --vnet-name myVnet \
    --subnet mySubnetBackEnd \
    --network-security-group myNetworkSecurityGroup

Per aggiungere una scheda di interfaccia di rete a una VM esistente, deallocare prima di tutto la VM con az vm deallocate.To add a NIC to an existing VM, first deallocate the VM with az vm deallocate. L'esempio seguente dealloca la VM denominata myVM:The following example deallocates the VM named myVM:

az vm deallocate --resource-group myResourceGroup --name myVM

Aggiungere la scheda di interfaccia di rete con az vm nic add.Add the NIC with az vm nic add. L'esempio seguente aggiunge myNic3 a myVM:The following example adds myNic3 to myVM:

az vm nic add \
    --resource-group myResourceGroup \
    --vm-name myVM \
    --nics myNic3

Avviare la VM con az vm start:Start the VM with az vm start:

az vm start --resource-group myResourceGroup --name myVM

Rimuovere una scheda di interfaccia di rete da una VMRemove a NIC from a VM

Per rimuovere una scheda di interfaccia di rete da una VM esistente, deallocare prima di tutto la VM con az vm deallocate.To remove a NIC from an existing VM, first deallocate the VM with az vm deallocate. L'esempio seguente dealloca la VM denominata myVM:The following example deallocates the VM named myVM:

az vm deallocate --resource-group myResourceGroup --name myVM

Rimuovere la scheda di interfaccia di rete con az vm nic remove.Remove the NIC with az vm nic remove. L'esempio seguente rimuove myNic3 da myVM:The following example removes myNic3 from myVM:

az vm nic remove \
    --resource-group myResourceGroup \
    --vm-name myVM \
    --nics myNic3

Avviare la VM con az vm start:Start the VM with az vm start:

az vm start --resource-group myResourceGroup --name myVM

Creare più schede di interfaccia di rete usando i modelli di Resource ManagerCreate multiple NICs using Resource Manager templates

I modelli di Azure Resource Manager utilizzano i file JSON dichiarativi per definire l'ambiente.Azure Resource Manager templates use declarative JSON files to define your environment. È possibile consultare una panoramica di Azure Resource Manager.You can read an overview of Azure Resource Manager. I modelli di Resource Manager offrono un modo di creare più istanze di una risorsa durante la distribuzione, come ad esempio la creazione di più schede di rete.Resource Manager templates provide a way to create multiple instances of a resource during deployment, such as creating multiple NICs. Utilizzare Copia per specificare il numero di istanze da creare:You use copy to specify the number of instances to create:

"copy": {
    "name": "multiplenics"
    "count": "[parameters('count')]"
}

Ulteriori informazioni sulla creazione di più istanze utilizzando Copia.Read more about creating multiple instances using copy.

È inoltre possibile utilizzare un copyIndex() per poi aggiungere un numero al nome di una risorsa, che consente di creare myNic1, myNic2, e così via. Di seguito viene riportato un esempio di aggiunta del valore di indice:You can also use a copyIndex() to then append a number to a resource name, which allows you to create myNic1, myNic2, etc. The following shows an example of appending the index value:

"name": "[concat('myNic', copyIndex())]", 

È possibile consultare un esempio completo di creazione di più schede di rete utilizzando i modelli di Resource Manager.You can read a complete example of creating multiple NICs using Resource Manager templates.

Configurare il sistema operativo guest per più schede di reteConfigure guest OS for multiple NICs

Quando si aggiungono più schede di rete a una macchina virtuale Linux, è necessario creare regole di routing.When you add multiple NICs to a Linux VM, you need to create routing rules. Queste regole consentono alla VM di inviare e ricevere traffico appartenente a una scheda di rete specifica.These rules allow the VM to send and receive traffic that belongs to a specific NIC. In caso contrario, il traffico appartenente a eth1, ad esempio, non può essere elaborato correttamente dalla route predefinita specificata.Otherwise, traffic that belongs to eth1, for example, cannot be processed correctly by the defined default route.

Per correggere il problema di routing, aggiungere prima di tutto due tabelle di routing a /etc/iproute2/rt_tables, come illustrato di seguito:To correct this routing issue, first add two routing tables to /etc/iproute2/rt_tables as follows:

echo "200 eth0-rt" >> /etc/iproute2/rt_tables
echo "201 eth1-rt" >> /etc/iproute2/rt_tables

Per applicare e rendere permanente la modifica durante l'attivazione dello stack di rete, modificare /etc/sysconfig/network-scipts/ifcfg-eth0 e /etc/sysconfig/network-scipts/ifcfg-eth1.To make the change persistent and applied during network stack activation, edit /etc/sysconfig/network-scipts/ifcfg-eth0 and /etc/sysconfig/network-scipts/ifcfg-eth1. Modificare la riga "NM_CONTROLLED = yes" in "NM_CONTROLLED = no".Alter the line "NM_CONTROLLED=yes" to "NM_CONTROLLED=no". Senza questo passaggio, le regole aggiuntive o il routing aggiuntivo non vengono applicati automaticamente.Without this step, the additional rules/routing are not automatically applied.

Estendere quindi le tabelle di routing.Next, extend the routing tables. Si supponga che sia disponibile la configurazione seguente:Let's assume we have the following setup in place:

RoutingRouting

default via 10.0.1.1 dev eth0 proto static metric 100
10.0.1.0/24 dev eth0 proto kernel scope link src 10.0.1.4 metric 100
10.0.1.0/24 dev eth1 proto kernel scope link src 10.0.1.5 metric 101
168.63.129.16 via 10.0.1.1 dev eth0 proto dhcp metric 100
169.254.169.254 via 10.0.1.1 dev eth0 proto dhcp metric 100

InterfacceInterfaces

lo: inet 127.0.0.1/8 scope host lo
eth0: inet 10.0.1.4/24 brd 10.0.1.255 scope global eth0    
eth1: inet 10.0.1.5/24 brd 10.0.1.255 scope global eth1

Creare quindi i file seguenti e aggiungere le regole e le route appropriate a ogni file:You would then create the following files and add the appropriate rules and routes to each:

  • /etc/sysconfig/network-scripts/rule-eth0/etc/sysconfig/network-scripts/rule-eth0

    from 10.0.1.4/32 table eth0-rt
    to 10.0.1.4/32 table eth0-rt
    
  • /etc/sysconfig/network-scripts/route-eth0/etc/sysconfig/network-scripts/route-eth0

    10.0.1.0/24 dev eth0 table eth0-rt
    default via 10.0.1.1 dev eth0 table eth0-rt
    
  • /etc/sysconfig/network-scripts/rule-eth1/etc/sysconfig/network-scripts/rule-eth1

    from 10.0.1.5/32 table eth1-rt
    to 10.0.1.5/32 table eth1-rt
    
  • /etc/sysconfig/network-scripts/route-eth1/etc/sysconfig/network-scripts/route-eth1

    10.0.1.0/24 dev eth1 table eth1-rt
    default via 10.0.1.1 dev eth1 table eth1-rt
    

Per applicare le modifiche, riavviare il servizio di rete, come indicato di seguito:To apply the changes, restart the network service as follows:

systemctl restart network

Le regole di routing sono state create correttamente ed è possibile connettersi alle interfacce, in base alle esigenze.The routing rules are now correctly in place and you can connect with either interface as needed.

Passaggi successiviNext steps

Quando si cerca di creare una macchina virtuale con più schede di rete, consultare Dimensioni per le macchine virtuali di Linux.Review Linux VM sizes when trying to creating a VM with multiple NICs. Prestare attenzione al numero massimo di schede di rete supportato per ogni dimensione della macchina virtuale.Pay attention to the maximum number of NICs each VM size supports.