Diagnosticare un problema di routing di rete di una macchina virtuale con PowerShell

Questo articolo illustra come usare lo strumento hop successivo di Azure Network Watcher per risolvere e diagnosticare un problema di routing di una macchina virtuale (VM) che impedisce la corretta comunicazione con altre risorse.

Prerequisiti

  • Un account Azure con una sottoscrizione attiva. Creare un account gratuitamente.

  • Azure Cloud Shell o Azure PowerShell.

    I passaggi descritti in questo articolo eseguono i cmdlet di Azure PowerShell in modo interattivo in Azure Cloud Shell. Per eseguire i cmdlet in Cloud Shell, selezionare Apri Cloud Shell nell'angolo superiore destro di un blocco di codice. Selezionare Copia per copiare il codice e incollarlo in Cloud Shell per eseguirlo. È anche possibile eseguire Cloud Shell dal portale di Azure.

    È anche possibile installare Azure PowerShell in locale per eseguire i cmdlet. Eseguire Get-Module -ListAvailable Az per trovare la versione installata. Se si esegue PowerShell in locale, accedere ad Azure usando il cmdlet Connect-AzAccount.

Creare una macchina virtuale

Prima di poter creare una macchina virtuale, è necessario creare un gruppo di risorse per contenerla. Creare un gruppo di risorse con New-AzResourceGroup. L'esempio seguente crea un gruppo di risorse denominato myResourceGroup nella località stati uniti orientali.

New-AzResourceGroup -Name myResourceGroup -Location EastUS

Creare la VM con New-AzVM. Quando si esegue questo passaggio vengono chieste le credenziali. I valori immessi sono configurati come nome utente e password per la VM.

$vM = New-AzVm `
    -ResourceGroupName "myResourceGroup" `
    -Name "myVm" `
    -Location "East US"

La creazione della VM richiede alcuni minuti. Non continuare a seguire i passaggi rimanenti fino a quando non viene creata la macchina virtuale e PowerShell non restituisce l'output.

Testare la comunicazione di rete

Per testare la comunicazione di rete con Network Watcher è necessario prima abilitare un network watcher nell'area in cui si trova la macchina virtuale da testare, quindi usare la funzionalità Hop successivo di Network Watcher per testare la comunicazione.

Abilitare Network Watcher

Se si ha già un'istanza di Network Watcher abilitata nell'area Stati Uniti orientali, usare Get-AzNetworkWatcher per recuperare Network Watcher. L'esempio seguente recupera un'istanza di Network Watcher esistente denominata NetworkWatcher_eastus che si trova nel gruppo di risorse NetworkWatcherRG:

$networkWatcher = Get-AzNetworkWatcher `
  -Name NetworkWatcher_eastus `
  -ResourceGroupName NetworkWatcherRG

Se non si ha già un'istanza di Network Watcher abilitata nell'area Stati Uniti orientali, usare New-AzNetworkWatcher per creare un'istanza di Network Watcher in tale area:

$networkWatcher = New-AzNetworkWatcher `
  -Name "NetworkWatcher_eastus" `
  -ResourceGroupName "NetworkWatcherRG" `
  -Location "East US"

Usare la funzionalità Hop successivo

Azure crea automaticamente le route per le destinazioni predefinite. È possibile creare route personalizzate per eseguire l'override delle route predefinite. In alcuni casi, le route personalizzate possono generare un errore di comunicazione. Per testare il routing da una macchina virtuale, usare il comando Get-AzNetworkWatcherNextHop per determinare l'hop di routing successivo quando il traffico è destinato a un indirizzo specifico.

Testare le comunicazioni in uscita dalla macchina virtuale a uno degli indirizzi IP di www.bing.com:

Get-AzNetworkWatcherNextHop `
  -NetworkWatcher $networkWatcher `
  -TargetVirtualMachineId $VM.Id `
  -SourceIPAddress 192.168.1.4 `
  -DestinationIPAddress 13.107.21.200

Dopo alcuni secondi, l'output indica che NextHopType è Internet e che RouteTableId è System Route. Questo risultato informa l'utente che è presente una route valida per la destinazione.

Testare le comunicazioni in uscita dalla macchina virtuale verso 172.31.0.100:

Get-AzNetworkWatcherNextHop `
  -NetworkWatcher $networkWatcher `
  -TargetVirtualMachineId $VM.Id `
  -SourceIPAddress 192.168.1.4 `
  -DestinationIPAddress 172.31.0.100

L'output indica che None è NextHopType e che RouteTableId è System Route. Questo risultato informa che, nonostante sia presente una route di sistema valida per la destinazione, non vi è alcun hop successivo per indirizzare il traffico alla destinazione.

Visualizzare i dettagli di una route

Per analizzare ulteriormente il routing, esaminare le route valide per l'interfaccia di rete con il comando Get-AzEffectiveRouteTable:

Get-AzEffectiveRouteTable `
  -NetworkInterfaceName myVm `
  -ResourceGroupName myResourceGroup |
  Format-table

Viene restituito l'output che include il testo seguente:

Name State  Source  AddressPrefix           NextHopType NextHopIpAddress
---- -----  ------  -------------           ----------- ----------------
     Active Default {192.168.0.0/16}        VnetLocal   {}              
     Active Default {0.0.0.0/0}             Internet    {}              
     Active Default {10.0.0.0/8}            None        {}              
     Active Default {100.64.0.0/10}         None        {}              
     Active Default {172.16.0.0/12}         None        {}              

Come si può osservare nell'output precedente, la route con AddressPrefix0.0.0.0/0 instrada tutto il traffico non destinato agli indirizzi all'interno dei prefissi degli indirizzi dell'altra route con hop successivo Internet. Come si può notare sempre nell'output, nonostante vi sia una route predefinita per il prefisso 172.16.0.0/12, che include l'indirizzo 172.31.0.100, il valore di nextHopType è None. Azure crea una route predefinita per 172.16.0.0/12, ma non specifica alcun tipo di hop successivo fino a quando non c'è un motivo per farlo. Se, ad esempio, è stato aggiunto l'intervallo di indirizzi 172.16.0.0/12 allo spazio di indirizzi della rete virtuale, Azure modifica nextHopType in Rete virtuale per la route. Il segno di spunta indica Rete virtuale come nextHopType.

Pulire le risorse

Quando il gruppo di risorse e tutte le risorse in esso contenute non sono più necessari, è possibile usare Remove-AzResourceGroup per rimuoverli:

Remove-AzResourceGroup -Name myResourceGroup -Force

Passaggi successivi

In questo articolo è stata creata una macchina virtuale ed è stato diagnosticato un problema di routing di rete dalla macchina virtuale. Si è appreso che Azure crea più route predefinite e testa il routing verso due destinazioni diverse. Per altre informazioni, vedere il routing in Azure e come creare route personalizzate.

Per le connessioni delle macchine virtuali in uscita è anche possibile determinare la latenza, il traffico di rete consentito e negato tra la macchina virtuale e un endpoint tramite la funzionalità di risoluzione dei problemi di connessione di Network Watcher. È possibile monitorare la comunicazione nel corso del tempo tra una macchina virtuale e un endpoint, ad esempio un indirizzo IP o un URL, usando la funzionalità di monitoraggio connessione di Network Watcher. Per ulteriori informazioni, vedere Monitorare una connessione di rete.