Criar e gerenciar uma máquina virtual do Windows que tenha várias NICs
Aplica-se a: ✔️ VMs ✔️ do Windows Conjuntos de escala flexíveis
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árias 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 que tenha várias NICs anexadas a ela. Você também aprende como adicionar ou remover NICs de uma VM existente. Diferentes tamanhos de VM suportam um número variável de NICs, portanto, dimensione sua VM de acordo.
Nota
Se várias sub-redes não forem necessárias para um cenário, pode ser mais simples utilizar várias configurações de IP em uma única NIC. Instruções para esta configuração podem ser encontradas aqui.
Pré-requisitos
Nos exemplos a seguir, substitua nomes de parâmetros de exemplo por seus próprios valores. Exemplos de nomes de parâmetros incluem myResourceGroup, myVnet e myVM.
Criar uma VM com vários NICs
Primeiro, crie um grupo de recursos. O exemplo a seguir cria um grupo de recursos chamado myResourceGroup no local EastUs:
New-AzResourceGroup -Name "myResourceGroup" -Location "EastUS"
Criar rede virtual e sub-redes
Um cenário comum é que uma rede virtual tenha duas ou mais sub-redes. Uma sub-rede pode ser para tráfego front-end, a outra para tráfego back-end. Para se conectar a ambas as sub-redes, use várias NICs em sua VM.
Defina duas sub-redes de rede virtual com New-AzVirtualNetworkSubnetConfig. O exemplo a seguir 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"
Crie sua rede virtual e sub-redes com New-AzVirtualNetwork. O exemplo a seguir cria uma rede virtual chamada myVnet:
$myVnet = New-AzVirtualNetwork -ResourceGroupName "myResourceGroup" ` -Location "EastUs" ` -Name "myVnet" ` -AddressPrefix "192.168.0.0/16" ` -Subnet $mySubnetFrontEnd,$mySubnetBackEnd
Criar várias NICs
Crie duas NICs com New-AzNetworkInterface. Anexe uma NIC à sub-rede front-end e uma NIC à sub-rede back-end. O exemplo a seguir cria NICs chamadas 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, você 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 entre várias VMs.
Criar a máquina virtual
Agora comece a criar sua configuração de VM. Cada tamanho de VM tem um limite para o número total de NICs que você pode adicionar a uma VM. Para obter mais informações, consulte Tamanhos de VM do Windows.
Defina suas credenciais de VM para a
$cred
variável da seguinte maneira:$cred = Get-Credential
Defina sua VM com New-AzVMConfig. O exemplo a seguir define uma VM chamada myVM e usa um tamanho de VM que suporta mais de duas NICs (Standard_DS3_v2):
$vmConfig = New-AzVMConfig -VMName "myVM" -VMSize "Standard_DS3_v2"
Crie o restante da configuração da VM com Set-AzVMOperatingSystem e Set-AzVMSourceImage. O exemplo a seguir cria uma VM do 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"
Anexe as duas NICs que você criou anteriormente com Add-AzVMNetworkInterface:
$vmConfig = Add-AzVMNetworkInterface -VM $vmConfig -Id $myNic1.Id -Primary $vmConfig = Add-AzVMNetworkInterface -VM $vmConfig -Id $myNic2.Id
Crie sua VM com New-AzVM:
New-AzVM -VM $vmConfig -ResourceGroupName "myResourceGroup" -Location "EastUs"
Adicione rotas para NICs secundárias ao sistema operacional concluindo as etapas em Configurar o sistema operacional para várias NICs.
Adicionar uma NIC a uma VM existente
Para adicionar uma NIC virtual a uma VM existente, desaloque a VM, adicione a NIC virtual e inicie a VM. Diferentes tamanhos de VM suportam um número variável de NICs, portanto, dimensione sua VM de acordo. Se necessário, você pode redimensionar uma VM.
Desaloque a VM com Stop-AzVM. O exemplo a seguir deslocaliza a VM chamada myVM em myResourceGroup:
Stop-AzVM -Name "myVM" -ResourceGroupName "myResourceGroup"
Obtenha a configuração existente da VM com Get-AzVm. O exemplo a seguir obtém informações para a VM chamada myVM em myResourceGroup:
$vm = Get-AzVm -Name "myVM" -ResourceGroupName "myResourceGroup"
O exemplo a seguir cria uma NIC virtual com New-AzNetworkInterface chamada myNic3 que está anexada a mySubnetBackEnd. A NIC virtual é então anexada à VM chamada 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 primárias
Uma das NICs em uma VM multi-NIC precisa ser primária. Se uma das NICs virtuais existentes na VM já estiver definida como principal, você poderá ignorar esta etapa. O exemplo a seguir pressupõe que duas NICs virtuais agora estão presentes em uma VM e você deseja adicionar a primeira NIC (
[0]
) como primária:# 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"
Inicie a VM com Start-AzVm:
Start-AzVM -ResourceGroupName "myResourceGroup" -Name "myVM"
Adicione rotas para NICs secundárias ao sistema operacional concluindo as etapas em Configurar o sistema operacional para várias NICs.
Remover uma NIC de uma VM existente
Para remover uma NIC virtual de uma VM existente, desaloque a VM, remova a NIC virtual e inicie a VM.
Desaloque a VM com Stop-AzVM. O exemplo a seguir deslocaliza a VM chamada myVM em myResourceGroup:
Stop-AzVM -Name "myVM" -ResourceGroupName "myResourceGroup"
Obtenha a configuração existente da VM com Get-AzVm. O exemplo a seguir obtém informações para a VM chamada myVM em myResourceGroup:
$vm = Get-AzVm -Name "myVM" -ResourceGroupName "myResourceGroup"
Obtenha informações sobre a remoção da NIC com Get-AzNetworkInterface. O exemplo a seguir 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
Remova a NIC com Remove-AzVMNetworkInterface e atualize a VM com Update-AzVm. O exemplo a seguir remove myNic3 como obtido na
$nicId
etapa anterior:Remove-AzVMNetworkInterface -VM $vm -NetworkInterfaceIDs $nicId | ` Update-AzVm -ResourceGroupName "myResourceGroup"
Inicie a VM com Start-AzVm:
Start-AzVM -Name "myVM" -ResourceGroupName "myResourceGroup"
Crie várias NICs com modelos
Os modelos do Azure Resource Manager fornecem uma maneira de criar várias instâncias de um recurso durante a implantação, como a criação de várias NICs. Os modelos do Resource Manager usam arquivos JSON declarativos para definir seu ambiente. Para obter mais informações, consulte Visão geral do Azure Resource Manager. Você pode usar copy para especificar o número de instâncias a serem criadas:
"copy": {
"name": "multiplenics",
"count": "[parameters('count')]"
}
Para obter mais informações, consulte a criação de várias instâncias usando cópia.
Você também pode usar copyIndex()
para acrescentar um número a um nome de recurso. Você pode então criar myNic1, MyNic2 e assim por diante. O código a seguir mostra um exemplo de acréscimo do valor do índice:
"name": "[concat('myNic', copyIndex())]",
Você pode ler um exemplo completo de criação de várias NICs usando modelos do Gerenciador de Recursos.
Adicione rotas para NICs secundárias ao sistema operacional concluindo as etapas em Configurar o sistema operacional para várias NICs.
Configurar SO convidado para várias NICs
O Azure atribui um gateway padrão à primeira interface de rede (primária) conectada à 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 se comunicar com recursos fora de sua sub-rede, embora as etapas para habilitar a comunicação sejam diferentes para sistemas operacionais diferentes.
Em um prompt de comando do Windows, execute o
route print
comando, que retorna uma saída semelhante à seguinte saída para uma máquina virtual com duas interfaces de rede conectadas:=========================================================================== 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, o Microsoft Hyper-V Network Adapter #4 (interface 7) é a interface de rede secundária que não tem um gateway padrão atribuído a ele.
Em um prompt de comando, execute o
ipconfig
comando para ver qual endereço IP é atribuído à interface de rede secundária. Neste exemplo, 192.168.2.4 é atribuído à interface 7. Nenhum endereço de gateway padrão é retornado para a interface de rede secundária.Para rotear 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 do gateway para a sub-rede é o primeiro endereço IP (terminando em .1) no intervalo de endereços definido para a sub-rede. Se não quiser rotear todo o tráfego fora da sub-rede, você pode adicionar rotas individuais para destinos específicos. Por exemplo, se você quiser rotear apenas o tráfego da interface de rede secundária para a rede 192.168.3.0, digite o comando:
route add -p 192.168.3.0 MASK 255.255.255.0 192.168.2.1 METRIC 5015 IF 7
Para confirmar a comunicação bem-sucedida com um recurso na rede 192.168.3.0, por exemplo, digite o seguinte comando para ping 192.168.3.4 usando a interface 7 (192.168.2.4):
ping 192.168.3.4 -S 192.168.2.4
Talvez seja necessário abrir o ICMP através do firewall do Windows do dispositivo que você está executando ping com o seguinte comando:
netsh advfirewall firewall add rule name=Allow-ping protocol=icmpv4 dir=in action=allow
Para confirmar se a rota adicionada está na tabela de rotas, digite o
route print
comando, que retorna uma saída semelhante ao texto a seguir:=========================================================================== 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 está lá por padrão para a interface de rede primária. A rota com 192.168.2.1 em Gateway, é a rota que você adicionou.
Próximos passos
Analise os tamanhos das VMs do Windows quando estiver tentando criar uma VM que tenha várias NICs. Preste atenção ao número máximo de NICs suportadas por cada tamanho de VM.