Configurare indirizzi IP privati per una macchina virtuale mediante PowerShellConfigure private IP addresses for a virtual machine using PowerShell

Le macchine virtuali IaaS e le istanze del ruolo PaaS in una rete virtuale ricevono automaticamente un indirizzo IP privato da un intervallo specificato, in base alla subnet a cui sono connessi.Your IaaS virtual machines (VMs) and PaaS role instances in a virtual network automatically receive a private IP address from a range that you specify, based on the subnet they are connected to. Tale indirizzo viene mantenuto per le macchine virtuali e le istanze del ruolo, fino a quando non vengono rimosse.That address is retained by the VMs and role instances, until they are decommissioned. Disabilitare un'istanza di macchina virtuale o un ruolo interrompendolo da PowerShell, CLI Azure o dal portale di Azure.You decommission a VM or role instance by stopping it from PowerShell, the Azure CLI, or the Azure portal. In questi casi, una volta che l'istanza di macchina virtuale o del ruolo viene riavviata, riceverà un indirizzo IP disponibile dall'infrastruttura di Azure, che potrebbe non essere lo stesso che aveva in precedenza.In those cases, once the VM or role instance starts again, it will receive an available IP address from the Azure infrastructure, which might not be the same it previously had. Se si arresta la macchina virtuale o l’istanza del ruolo dal sistema operativo guest, esso mantiene comunque il suo indirizzo IP.If you shut down the VM or role instance from the guest operating system, it retains the IP address it had.

In alcuni casi, si desidera che una macchina virtuale o istanza del ruolo disponga di un indirizzo IP statico, ad esempio, se la macchina virtuale eseguirà DNS o sarà un controller di dominio.In certain cases, you want a VM or role instance to have a static IP address, for example, if your VM is going to run DNS or will be a domain controller. È possibile farlo impostando un indirizzo IP statico privato.You can do so by setting a static private IP address.

Azure offre due modelli di distribuzione, ovvero Azure Resource Manager e la distribuzione classica.Azure has two deployment models: Azure Resource Manager and classic. Microsoft consiglia di creare le risorse tramite il modello di distribuzione Resource Manager.Microsoft recommends creating resources through the Resource Manager deployment model. Per altre informazioni sulle differenze tra i due modelli, leggere l'articolo Understand Azure deployment models (Informazioni sui modelli di distribuzione di Azure).To learn more about the differences between the two models, read the Understand Azure deployment models article. Questo articolo illustra il modello di distribuzione Gestione risorse.This article covers the Resource Manager deployment model. È anche possibile gestire un indirizzo IP statico privato nel modello di distribuzione classico.You can also manage static private IP address in the classic deployment model.

ScenarioScenario

Per illustrare meglio come configurare un indirizzo IP statico per una macchina virtuale, in questo documento verrà utilizzato lo scenario seguente.To better illustrate how to configure a static IP address for a VM, this document will use the scenario below.

Scenario di una rete virtuale

In questo scenario si creerà una macchina virtuale denominata DNS01 nella subnet FrontEnd e la si imposterà in modo che usi l'indirizzo IP statico 192.168.1.101.In this scenario you will create a VM named DNS01 in the FrontEnd subnet, and set it to use a static IP address of 192.168.1.101.

I comandi di esempio PowerShell riportati di seguito prevedono un ambiente semplice già creato in base allo scenario precedente.The sample PowerShell commands below expect a simple environment already created based on the scenario above. Se si desidera eseguire i comandi illustrati in questo documento, creare innanzitutto l'ambiente di prova descritto in creare una rete virtuale.If you want to run the commands as they are displayed in this document, first build the test environment described in create a vnet.

Creare una VM con un indirizzo IP privato staticoCreate a VM with a static private IP address

Per creare una VM denominata DNS01 nella subnet FrontEnd di una rete virtuale denominata TestVNet con un indirizzo IP statico privato di 192.168.1.101, seguire la procedura seguente:To create a VM named DNS01 in the FrontEnd subnet of a VNet named TestVNet with a static private IP of 192.168.1.101, follow the steps below:

  1. Impostare le variabili per l'account di archiviazione, il percorso, il gruppo di risorse e le credenziali da utilizzare.Set variables for the storage account, location, resource group, and credentials to be used. È necessario immettere un nome utente e una password per la macchina virtuale.You will need to enter a user name and password for the VM. L’account di archiviazione e il gruppo di risorse deve esistere già.The storage account and resource group must already exist.

    $stName  = "vnetstorage"
    $locName = "Central US"
    $rgName  = "TestRG"
    $cred    = Get-Credential -Message "Type the name and password of the local administrator account."
    
  2. Recuperare la rete virtuale e la subnet che si desidera creare nella macchina virtuale.Retrieve the virtual network and subnet you want to create the VM in.

    $vnet   = Get-AzureRmVirtualNetwork -ResourceGroupName TestRG -Name TestVNet
    $subnet = $vnet.Subnets[0].Id
    
  3. Se necessario, creare un indirizzo IP pubblico per accedere alla macchina virtuale da Internet.If necessary, create a public IP address to access the VM from the Internet.

    $pip = New-AzureRmPublicIpAddress -Name TestPIP -ResourceGroupName $rgName `
    -Location $locName -AllocationMethod Dynamic
    
  4. Creare una scheda di rete utilizzando l'indirizzo IP privato statico da assegnare alla macchina virtuale.Create a NIC using the static private IP address you want to assign to the VM. Assicurarsi che l'indirizzo IP venga dall'intervallo di subnet che si aggiunge alla macchina virtuale.Make sure the IP is from the subnet range you are adding the VM to. Questo è il passaggio principale di questo articolo, in cui si imposta l’IP privato che deve essere statico.This is the main step for this article, where you set the private IP to be static.

    $nic = New-AzureRmNetworkInterface -Name TestNIC -ResourceGroupName $rgName `
    -Location $locName -SubnetId $vnet.Subnets[0].Id -PublicIpAddressId $pip.Id `
    -PrivateIpAddress 192.168.1.101
    
  5. Creare la macchina virtuale utilizzando la scheda di rete creata in precedenza.Create the VM using the NIC created above.

    $vm = New-AzureRmVMConfig -VMName DNS01 -VMSize "Standard_A1"
    $vm = Set-AzureRmVMOperatingSystem -VM $vm -Windows -ComputerName DNS01 `
    -Credential $cred -ProvisionVMAgent -EnableAutoUpdate
    $vm = Set-AzureRmVMSourceImage -VM $vm -PublisherName MicrosoftWindowsServer `
    -Offer WindowsServer -Skus 2012-R2-Datacenter -Version "latest"
    $vm = Add-AzureRmVMNetworkInterface -VM $vm -Id $nic.Id
    $osDiskUri = $storageAcc.PrimaryEndpoints.Blob.ToString() + "vhds/WindowsVMosDisk.vhd"
    $vm = Set-AzureRmVMOSDisk -VM $vm -Name "windowsvmosdisk" -VhdUri $osDiskUri `
    -CreateOption fromImage
    New-AzureRmVM -ResourceGroupName $rgName -Location $locName -VM $vm 
    

    Output previsto:Expected output:

     EndTime             : [Date and time]
     Error               : 
     Output              : 
     StartTime           : [Date and time]
     Status              : Succeeded
     TrackingOperationId : [Id]
     RequestId           : [Id]
     StatusCode          : OK 
    

Recuperare le informazioni relative all'indirizzo IP privato statico per un'interfaccia di reteRetrieve static private IP address information for a network interface

Per visualizzare le informazioni relative all'indirizzo IP privato statico per la macchina virtuale creata con lo script precedente, eseguire il comando PowerShell seguente e osservare i valori per PrivateIpAddress e PrivateIpAllocationMethod:To view the static private IP address information for the VM created with the script above, run the following PowerShell command and observe the values for PrivateIpAddress and PrivateIpAllocationMethod:

Get-AzureRmNetworkInterface -Name TestNIC -ResourceGroupName TestRG

Output previsto:Expected output:

Name                 : TestNIC
ResourceGroupName    : TestRG
Location             : centralus
Id                   : /subscriptions/[Id]/resourceGroups/TestRG/providers/Microsoft.Network/networkInterfaces/TestNIC
Etag                 : W/"[Id]"
ProvisioningState    : Succeeded
Tags                 : 
VirtualMachine       : {
                         "Id": "/subscriptions/[Id]/resourceGroups/TestRG/providers/Microsoft.Compute/virtualMachines/DNS01"
                       }
IpConfigurations     : [
                         {
                           "Name": "ipconfig1",
                           "Etag": "W/\"[Id]\"",
                           "Id": "/subscriptions/[Id]/resourceGroups/TestRG/providers/Microsoft.Network/networkInterfaces/TestNIC/ipConfigurations/ipconfig1",
                           "PrivateIpAddress": "192.168.1.101",
                           "PrivateIpAllocationMethod": "Static",
                           "Subnet": {
                             "Id": "/subscriptions/[Id]/resourceGroups/TestRG/providers/Microsoft.Network/virtualNetworks/TestVNet/subnets/FrontEnd"
                           },
                           "PublicIpAddress": {
                             "Id": "/subscriptions/[Id]/resourceGroups/TestRG/providers/Microsoft.Network/publicIPAddresses/TestPIP"
                           },
                           "LoadBalancerBackendAddressPools": [],
                           "LoadBalancerInboundNatRules": [],
                           "ProvisioningState": "Succeeded"
                         }
                       ]
DnsSettings          : {
                         "DnsServers": [],
                         "AppliedDnsServers": [],
                         "InternalDnsNameLabel": null,
                         "InternalFqdn": null
                       }
EnableIPForwarding   : False
NetworkSecurityGroup : null
Primary              : True

Rimuovere un indirizzo IP privato statico da un'interfaccia di reteRemove a static private IP address from a network interface

Per rimuovere l'indirizzo IP privato statico aggiunto alla macchina virtuale nello script precedente, eseguire il comando PowerShell seguente:To remove the static private IP address added to the VM in the script above, run the following PowerShell commands:

$nic=Get-AzureRmNetworkInterface -Name TestNIC -ResourceGroupName TestRG
$nic.IpConfigurations[0].PrivateIpAllocationMethod = "Dynamic"
Set-AzureRmNetworkInterface -NetworkInterface $nic

Output previsto:Expected output:

Name                 : TestNIC
ResourceGroupName    : TestRG
Location             : centralus
Id                   : /subscriptions/[Id]/resourceGroups/TestRG/providers/Microsoft.Network/networkInterfaces/TestNIC
Etag                 : W/"[Id]"
ProvisioningState    : Succeeded
Tags                 : 
VirtualMachine       : {
                         "Id": "/subscriptions/[Id]/resourceGroups/TestRG/providers/Microsoft.Compute/virtualMachines/WindowsVM"
                       }
IpConfigurations     : [
                         {
                           "Name": "ipconfig1",
                           "Etag": "W/\"[Id]\"",
                           "Id": "/subscriptions/[Id]/resourceGroups/TestRG/providers/Microsoft.Network/networkInterfaces/TestNIC/ipConfigurations/ipconfig1",
                           "PrivateIpAddress": "192.168.1.101",
                           "PrivateIpAllocationMethod": "Dynamic",
                           "Subnet": {
                             "Id": "/subscriptions/[Id]/resourceGroups/TestRG/providers/Microsoft.Network/virtualNetworks/TestVNet/subnets/FrontEnd"
                           },
                           "PublicIpAddress": {
                             "Id": "/subscriptions/[Id]/resourceGroups/TestRG/providers/Microsoft.Network/publicIPAddresses/TestPIP"
                           },
                           "LoadBalancerBackendAddressPools": [],
                           "LoadBalancerInboundNatRules": [],
                           "ProvisioningState": "Succeeded"
                         }
                       ]
DnsSettings          : {
                         "DnsServers": [],
                         "AppliedDnsServers": [],
                         "InternalDnsNameLabel": null,
                         "InternalFqdn": null
                       }
EnableIPForwarding   : False
NetworkSecurityGroup : null
Primary              : True

Aggiungere un indirizzo IP privato statico a un'interfaccia di reteAdd a static private IP address to a network interface

Per aggiungere un indirizzo IP privato statico alla macchina virtuale creata usando lo script precedente, eseguire i comandi seguenti:To add a static private IP address to the VM created using the script above, run the following commands:

$nic=Get-AzureRmNetworkInterface -Name TestNIC -ResourceGroupName TestRG
$nic.IpConfigurations[0].PrivateIpAllocationMethod = "Static"
$nic.IpConfigurations[0].PrivateIpAddress = "192.168.1.101"
Set-AzureRmNetworkInterface -NetworkInterface $nic

Modificare il metodo di allocazione per un indirizzo IP privato assegnato a un'interfaccia di reteChange the allocation method for a private IP address assigned to a network interface

Un indirizzo IP privato viene assegnato a una scheda di interfaccia di rete con il metodo di allocazione statico o dinamico.A private IP address is assigned to a NIC with the static or dynamic allocation method. Gli indirizzi IP dinamici possono cambiare dopo l'avvio di una VM che in precedenza era in stato di arresto (deallocazione).Dynamic IP addresses can change after starting a VM that was previously in the stopped (deallocated) state. Questo può causare problemi se la VM ospita un servizio che richiede lo stesso indirizzo IP, anche dopo il riavvio da uno stato di arresto (deallocazione).This can potentially cause issues if the VM is hosting a service that requires the same IP address, even after restarts from a stopped (deallocated) state. Gli indirizzi IP statici vengono mantenuti fino a quando non viene eliminata la VM.Static IP addresses are retained until the VM is deleted. Per cambiare il metodo di allocazione di un indirizzo IP, eseguire lo script seguente, che cambia il metodo di allocazione da dinamico in statico.To change the allocation method of an IP address, run the following script, which changes the allocation method from dynamic to static. Se il metodo di allocazione per l'indirizzo IP privato corrente è statico, cambiare Static in Dynamic prima di eseguire lo script.If the allocation method for the current private IP address is static, change Static to Dynamic before executing the script.

$RG = "TestRG"
$NIC_name = "testnic1"

$nic = Get-AzureRmNetworkInterface -ResourceGroupName $RG -Name $NIC_name
$nic.IpConfigurations[0].PrivateIpAllocationMethod = 'Static'
Set-AzureRmNetworkInterface -NetworkInterface $nic 
$IP = $nic.IpConfigurations[0].PrivateIpAddress

Write-Host "The allocation method is now set to"$nic.IpConfigurations[0].PrivateIpAllocationMethod"for the IP address" $IP"." -NoNewline

Se non si conosce il nome della scheda di interfaccia di rete, è possibile visualizzare un elenco delle schede di rete all'interno di un gruppo di risorse immettendo il comando seguente:If you don't know the name of the NIC, you can view a list of NICs within a resource group by entering the following command:

Get-AzureRmNetworkInterface -ResourceGroupName $RG | Where-Object {$_.ProvisioningState -eq 'Succeeded'} 

Passaggi successiviNext steps