Diagnosticare un problema di routing di rete della macchina virtuale usando l'interfaccia della riga di comando di Azure

Questo articolo illustra come usare lo strumento hop successivo di Azure Network Watcher per risolvere e diagnosticare un problema di routing delle macchine virtuali che impedisce la corretta comunicazione con altre risorse.

Prerequisiti

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

  • Azure Cloud Shell o interfaccia della riga di comando di Azure.

    I passaggi descritti in questo articolo eseguono i comandi dell'interfaccia della riga di comando di Azurel in modo interattivo in Azure Cloud Shell. Per eseguire i comandi 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 l'interfaccia della riga di comando di Azure in locale per eseguire i comandi. Questo articolo richiede l'interfaccia della riga di comando di Azure 2.0 o versione successiva. Eseguire il comando az --version per trovare la versione installata. Se si esegue l'interfaccia della riga di comando di Azure in locale, accedere ad Azure usando il comando az login.

Creare una macchina virtuale

Prima di poter creare una macchina virtuale, è necessario creare un gruppo di risorse per contenerla. Come prima cosa creare un gruppo di risorse con az group create. L'esempio seguente crea un gruppo di risorse denominato myResourceGroup nella posizione eastus:

az group create --name myResourceGroup --location eastus

Creare una VM con il comando az vm create. Il comando crea le chiavi SSH, se non esistono già in una posizione predefinita. Per usare un set specifico di chiavi, utilizzare l'opzione --ssh-key-value. L'esempio seguente crea una macchina virtuale denominata myVM:

az vm create \
  --resource-group myResourceGroup \
  --name myVm \
  --image Ubuntu2204 \
  --generate-ssh-keys

La creazione della VM richiede alcuni minuti. Non continuare con i passaggi rimanenti fino a quando non viene creata la macchina virtuale e l'interfaccia della riga di comando di Azure 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 dispone già di un Network Watcher abilitato nell'area Stati Uniti orientali, passare al paragrafo Usare la funzionalità Hop successivo. Usare il comando az network watcher configure per creare un Network Watcher nell'area degli Stati Uniti orientali:

az network watcher configure \
  --resource-group NetworkWatcherRG \
  --locations eastus \
  --enabled

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 az network watcher show-next-hop per determinare l'hop 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:

az network watcher show-next-hop \
  --dest-ip 13.107.21.200 \
  --resource-group myResourceGroup \
  --source-ip 10.0.0.4 \
  --vm myVm \
  --nic myVmVMNic \
  --out table

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:

az network watcher show-next-hop \
  --dest-ip 172.31.0.100 \
  --resource-group myResourceGroup \
  --source-ip 10.0.0.4 \
  --vm myVm \
  --nic myVmVMNic \
  --out table

L'output indica che Nessuno è 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 az network nic show-effective-route-table:

az network nic show-effective-route-table \
  --resource-group myResourceGroup \
  --name myVmVMNic

Nell'output restituito è incluso il testo seguente:

{
  "additionalProperties": {
    "disableBgpRoutePropagation": false
  },
  "addressPrefix": [
    "0.0.0.0/0"
  ],
  "name": null,
  "nextHopIpAddress": [],
  "nextHopType": "Internet",
  "source": "Default",
  "state": "Active"
},

Quando è stato usato il comando az network watcher show-next-hop per testare le comunicazioni in uscita verso 13.107.21.200 in Usare la funzionalità Hop successivo, è stata usata la route con addressPrefix 0.0.0.0/0** per instradare il traffico all'indirizzo poiché nessun'altra route nell'output include l'indirizzo. Per impostazione predefinita, tutti gli indirizzi non specificati entro il prefisso dell'indirizzo di un'altra route vengono instradati su internet.

Quando è stato usato il comando az network watcher show-next-hop per testare le comunicazioni in uscita verso 172.31.0.100, tuttavia, il risultato ha indicato che non è presente alcun hop successivo. Nell'output restituito è visualizzato anche il testo seguente:

{
  "additionalProperties": {
    "disableBgpRoutePropagation": false
      },
  "addressPrefix": [
    "172.16.0.0/12"
  ],
  "name": null,
  "nextHopIpAddress": [],
  "nextHopType": "None",
  "source": "Default",
  "state": "Active"
},

Come si può notare nell'output del comando az network watcher nic show-effective-route-table, benché 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 è Nessuno. 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 az group delete per rimuoverli:

az group delete --name myResourceGroup --yes

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.