Criar e gerir uma máquina virtual do Windows com vários NICs

Aplica-se a: ✔️ Conjuntos de dimensionamento flexíveis de VMs ✔️ do Windows

As máquinas virtuais (VMs) no Azure podem ter várias placas de interface de rede virtual (NICs) ligadas às mesmas. Um cenário comum é ter sub-redes diferentes para conectividade de front-end e back-end. Pode associar vários NICs numa VM a várias sub-redes, mas essas sub-redes têm de residir todas na mesma rede virtual (vNet). Este artigo detalha como criar uma VM com vários NICs anexados à mesma. Também pode aprender a adicionar ou remover NICs de uma VM existente. Diferentes tamanhos de VM suportam um número variado de NICs, por isso, dimensione a VM em conformidade.

Nota

Se não forem necessárias várias sub-redes para um cenário, poderá ser mais simples utilizar várias configurações de IP numa única NIC. As instruções para esta configuração podem ser encontradas aqui.

Pré-requisitos

Nos exemplos seguintes, substitua nomes de parâmetros de exemplo pelos seus próprios valores. Os nomes de parâmetros de exemplo incluem myResourceGroup, myVnet e myVM.

Criar uma VM com vários NICs

Primeiro, crie um grupo de recursos. O exemplo seguinte cria um grupo de recursos com o nome myResourceGroup na localização eastUs :

New-AzResourceGroup -Name "myResourceGroup" -Location "EastUS"

Criar redes virtuais e sub-redes

Um cenário comum é uma rede virtual ter duas ou mais sub-redes. Uma sub-rede pode ser para o tráfego de front-end, a outra para o tráfego de back-end. Para ligar a ambas as sub-redes, utilize várias NICs na VM.

  1. Defina duas sub-redes de rede virtual com New-AzVirtualNetworkSubnetConfig. O exemplo seguinte define as sub-redes para mySubnetFrontEnd e mySubnetBackEnd:

    $mySubnetFrontEnd = New-AzVirtualNetworkSubnetConfig -Name "mySubnetFrontEnd" `
        -AddressPrefix "192.168.1.0/24"
    $mySubnetBackEnd = New-AzVirtualNetworkSubnetConfig -Name "mySubnetBackEnd" `
        -AddressPrefix "192.168.2.0/24"
    
  2. Crie a sua rede virtual e sub-redes com New-AzVirtualNetwork. O exemplo seguinte cria uma rede virtual com o nome myVnet:

    $myVnet = New-AzVirtualNetwork -ResourceGroupName "myResourceGroup" `
        -Location "EastUs" `
        -Name "myVnet" `
        -AddressPrefix "192.168.0.0/16" `
        -Subnet $mySubnetFrontEnd,$mySubnetBackEnd
    

Criar várias NICs

Crie dois NICs com New-AzNetworkInterface. Anexe uma NIC à sub-rede de front-end e uma NIC à sub-rede de back-end. O exemplo seguinte cria NICs com o nome myNic1 e myNic2:

$frontEnd = $myVnet.Subnets|?{$_.Name -eq 'mySubnetFrontEnd'}
$myNic1 = New-AzNetworkInterface -ResourceGroupName "myResourceGroup" `
    -Name "myNic1" `
    -Location "EastUs" `
    -SubnetId $frontEnd.Id

$backEnd = $myVnet.Subnets|?{$_.Name -eq 'mySubnetBackEnd'}
$myNic2 = New-AzNetworkInterface -ResourceGroupName "myResourceGroup" `
    -Name "myNic2" `
    -Location "EastUs" `
    -SubnetId $backEnd.Id

Normalmente, também cria um grupo de segurança de rede para filtrar o tráfego de rede para a VM e um balanceador de carga para distribuir o tráfego por várias VMs.

Criar a máquina virtual

Comece agora a criar a configuração da VM. Cada tamanho de VM tem um limite para o número total de NICs que pode adicionar a uma VM. Para obter mais informações, veja Tamanhos de VMs do Windows.

  1. Defina as credenciais da VM para a variável da $cred seguinte forma:

    $cred = Get-Credential
    
  2. Defina a VM com New-AzVMConfig. O exemplo seguinte define uma VM com o nome myVM e utiliza um tamanho de VM que suporta mais de dois NICs (Standard_DS3_v2):

    $vmConfig = New-AzVMConfig -VMName "myVM" -VMSize "Standard_DS3_v2"
    
  3. Crie o resto da configuração da VM com Set-AzVMOperatingSystem e Set-AzVMSourceImage. O exemplo seguinte cria uma VM Windows Server 2016:

    $vmConfig = Set-AzVMOperatingSystem -VM $vmConfig `
        -Windows `
        -ComputerName "myVM" `
        -Credential $cred `
        -ProvisionVMAgent `
        -EnableAutoUpdate
    $vmConfig = Set-AzVMSourceImage -VM $vmConfig `
        -PublisherName "MicrosoftWindowsServer" `
        -Offer "WindowsServer" `
        -Skus "2016-Datacenter" `
        -Version "latest"
    
  4. Anexe os dois NICs que criou anteriormente com Add-AzVMNetworkInterface:

    $vmConfig = Add-AzVMNetworkInterface -VM $vmConfig -Id $myNic1.Id -Primary
    $vmConfig = Add-AzVMNetworkInterface -VM $vmConfig -Id $myNic2.Id
    
  5. Crie a sua VM com New-AzVM:

    New-AzVM -VM $vmConfig -ResourceGroupName "myResourceGroup" -Location "EastUs"
    
  6. Adicione rotas para NICs secundários ao SO ao concluir os passos em Configurar o sistema operativo para várias NICs.

Adicionar um NIC a uma VM existente

Para adicionar uma NIC virtual a uma VM existente, desaloque a VM, adicione o NIC virtual e, em seguida, inicie a VM. Diferentes tamanhos de VM suportam um número variado de NICs, por isso, dimensione a VM em conformidade. Se necessário, pode redimensionar uma VM.

  1. Desaloque a VM com Stop-AzVM. O exemplo seguinte desaloca a VM com o nome myVM em myResourceGroup:

    Stop-AzVM -Name "myVM" -ResourceGroupName "myResourceGroup"
    
  2. Obtenha a configuração existente da VM com Get-AzVm. O exemplo seguinte obtém informações para a VM com o nome myVM em myResourceGroup:

    $vm = Get-AzVm -Name "myVM" -ResourceGroupName "myResourceGroup"
    
  3. O exemplo seguinte cria um NIC virtual com New-AzNetworkInterface com o nome myNic3 que está anexado a mySubnetBackEnd. Em seguida, a NIC virtual é anexada à VM com o nome myVM em myResourceGroup com Add-AzVMNetworkInterface:

    # Get info for the back end subnet
    $myVnet = Get-AzVirtualNetwork -Name "myVnet" -ResourceGroupName "myResourceGroup"
    $backEnd = $myVnet.Subnets|?{$_.Name -eq 'mySubnetBackEnd'}
    
    # Create a virtual NIC
    $myNic3 = New-AzNetworkInterface -ResourceGroupName "myResourceGroup" `
        -Name "myNic3" `
        -Location "EastUs" `
        -SubnetId $backEnd.Id
    
    # Get the ID of the new virtual NIC and add to VM
    $nicId = (Get-AzNetworkInterface -ResourceGroupName "myResourceGroup" -Name "MyNic3").Id
    Add-AzVMNetworkInterface -VM $vm -Id $nicId | Update-AzVm -ResourceGroupName "myResourceGroup"
    

    NICs virtuais principais

    Uma das NICs numa VM multi-NIC tem de ser primária. Se um dos NICs virtuais existentes na VM já estiver definido como primário, pode ignorar este passo. O exemplo seguinte pressupõe que estão agora presentes duas NICs virtuais numa VM e pretende adicionar o primeiro NIC ([0]) como principal:

    # List existing NICs on the VM and find which one is primary
    $vm.NetworkProfile.NetworkInterfaces
    
    # Set NIC 0 to be primary
    $vm.NetworkProfile.NetworkInterfaces[0].Primary = $true
    $vm.NetworkProfile.NetworkInterfaces[1].Primary = $false
    
    # Update the VM state in Azure
    Update-AzVM -VM $vm -ResourceGroupName "myResourceGroup"
    
  4. Inicie a VM com Start-AzVm:

    Start-AzVM -ResourceGroupName "myResourceGroup" -Name "myVM"
    
  5. Adicione rotas para NICs secundários ao SO ao concluir os passos em Configurar o sistema operativo para várias NICs.

Remover um NIC de uma VM existente

Para remover uma NIC virtual de uma VM existente, desaloque a VM, remova o NIC virtual e, em seguida, inicie a VM.

  1. Desaloque a VM com Stop-AzVM. O exemplo seguinte desaloca a VM com o nome myVM em myResourceGroup:

    Stop-AzVM -Name "myVM" -ResourceGroupName "myResourceGroup"
    
  2. Obtenha a configuração existente da VM com Get-AzVm. O exemplo seguinte obtém informações para a VM com o nome myVM em myResourceGroup:

    $vm = Get-AzVm -Name "myVM" -ResourceGroupName "myResourceGroup"
    
  3. Obtenha informações sobre a remoção do NIC com Get-AzNetworkInterface. O exemplo seguinte obtém informações sobre myNic3:

    # List existing NICs on the VM if you need to determine NIC name
    $vm.NetworkProfile.NetworkInterfaces
    
    $nicId = (Get-AzNetworkInterface -ResourceGroupName "myResourceGroup" -Name "myNic3").Id   
    
  4. Remova o NIC com Remove-AzVMNetworkInterface e, em seguida, atualize a VM com Update-AzVm. O exemplo seguinte remove myNic3 conforme obtido pelo $nicId no passo anterior:

    Remove-AzVMNetworkInterface -VM $vm -NetworkInterfaceIDs $nicId | `
        Update-AzVm -ResourceGroupName "myResourceGroup"
    
  5. Inicie a VM com Start-AzVm:

    Start-AzVM -Name "myVM" -ResourceGroupName "myResourceGroup"
    

Criar vários NICs com modelos

Os modelos de Resource Manager do Azure fornecem uma forma de criar várias instâncias de um recurso durante a implementação, como criar vários NICs. Resource Manager modelos utilizam ficheiros JSON declarativos para definir o seu ambiente. Para obter mais informações, veja Descrição geral do Azure Resource Manager. Pode utilizar a cópia para especificar o número de instâncias a criar:

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

Para obter mais informações, veja Criar várias instâncias com a cópia.

Também pode utilizar copyIndex() para acrescentar um número a um nome de recurso. Em seguida, pode criar myNic1, MyNic2 e assim sucessivamente. O código seguinte mostra um exemplo de anexação do valor do índice:

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

Pode ler um exemplo completo de criação de vários NICs com Resource Manager modelos.

Adicione rotas para NICs secundários ao SO ao concluir os passos em Configurar o sistema operativo para várias NICs.

Configurar o SO convidado para vários NICs

O Azure atribui um gateway predefinido à primeira interface de rede (primária) anexada à máquina virtual. O Azure não atribui um gateway predefinido a interfaces de rede (secundárias) adicionais ligadas a uma máquina virtual. Por conseguinte, não pode comunicar com recursos que estejam fora da sub-rede em que se encontre uma interface de rede secundária, por predefinição. No entanto, as interfaces de rede secundárias podem comunicar com recursos fora da respetiva sub-rede, embora os passos para ativar a comunicação sejam diferentes para diferentes sistemas operativos.

  1. A partir de uma linha de comandos do Windows, execute o route print comando, que devolve um resultado semelhante ao seguinte resultado de uma máquina virtual com duas interfaces de rede ligadas:

    ===========================================================================
    Interface List
    3...00 0d 3a 10 92 ce ......Microsoft Hyper-V Network Adapter #3
    7...00 0d 3a 10 9b 2a ......Microsoft Hyper-V Network Adapter #4
    ===========================================================================
    

    Neste exemplo, Microsoft Hyper-V Adaptador de Rede n.º 4 (interface 7) é a interface de rede secundária que não tem um gateway predefinido atribuído à mesma.

  2. Numa linha de comandos, execute o ipconfig comando para ver que endereço IP está atribuído à interface de rede secundária. Neste exemplo, 192.168.2.4 é atribuído à interface 7. Não é devolvido nenhum endereço de gateway predefinido para a interface de rede secundária.

  3. Para encaminhar todo o tráfego destinado a endereços fora da sub-rede da interface de rede secundária para o gateway da sub-rede, execute o seguinte comando:

    route add -p 0.0.0.0 MASK 0.0.0.0 192.168.2.1 METRIC 5015 IF 7
    

    O endereço de gateway da sub-rede é o primeiro endereço IP (que termina em .1) no intervalo de endereços definido para a sub-rede. Se não quiser encaminhar todo o tráfego para fora da sub-rede, pode adicionar rotas individuais a destinos específicos. Por exemplo, se apenas quiser encaminhar o tráfego da interface de rede secundária para a rede 192.168.3.0, introduza o comando:

    route add -p 192.168.3.0 MASK 255.255.255.0 192.168.2.1 METRIC 5015 IF 7
    
  4. Para confirmar a comunicação com êxito com um recurso na rede 192.168.3.0, por exemplo, introduza o seguinte comando para ping 192.168.3.4 com a interface 7 (192.168.2.4):

    ping 192.168.3.4 -S 192.168.2.4
    

    Poderá ter de abrir o ICMP através da firewall do Windows do dispositivo que está a enviar ping com o seguinte comando:

    netsh advfirewall firewall add rule name=Allow-ping protocol=icmpv4 dir=in action=allow
    
  5. Para confirmar que a rota adicionada está na tabela de rotas, introduza o route print comando, que devolve um resultado semelhante ao seguinte texto:

    ===========================================================================
    Active Routes:
    Network Destination        Netmask          Gateway       Interface  Metric
              0.0.0.0          0.0.0.0      192.168.1.1      192.168.1.4     15
              0.0.0.0          0.0.0.0      192.168.2.1      192.168.2.4   5015
    

    A rota listada com 192.168.1.1 em Gateway é a rota que existe por predefinição para a interface de rede primária. A rota com 192.168.2.1 em Gateway é a rota que adicionou.

Passos seguintes

Reveja os tamanhos das VMs do Windows quando estiver a tentar criar uma VM com vários NICs. Preste atenção ao número máximo de NICs suportados por cada tamanho de VM.