Diagnosticare un problema di routing di una macchina virtuale

Questo articolo illustra come diagnosticare un problema relativo al routing visualizzando le route valide per un'interfaccia di rete in una macchina virtuale (VM). Azure crea diverse route predefinite per ogni subnet della rete virtuale. È possibile eseguire l'override delle route predefinite di Azure definendo route personalizzate in una tabella di route e quindi associando la tabella a una subnet. La combinazione di route create dall'utente, route predefinite di Azure e route propagate dalla rete locale tramite un gateway VPN di Azure (se la rete virtuale è connessa alla rete locale) con BGP (Border Gateway Protocol), rappresenta le route valide per tutte le interfacce di rete in una subnet. Se non si ha familiarità con le rete virtuali, le interfacce di rete o i concetti di routing, vedere Panoramica di Rete virtuale, Interfaccia di rete e Panoramica sul routing.

Scenario

Si prova a connettersi a una macchina virtuale, ma la connessione non riesce. Per determinare perché non è possibile connettersi alla macchina virtuale, è possibile visualizzare le route valide per un'interfaccia di rete usando il portale di Azure, PowerShell o l'interfaccia della riga di comando di Azure.

I passaggi che seguono presuppongono la disponibilità di una macchina virtuale per visualizzarne le route valide. In mancanza di una VM esistente, distribuire prima una VM Linux o Windows con cui completare le attività descritte in questo articolo. Gli esempi in questo articolo sono destinati a una macchina virtuale denominata myVM con un'interfaccia di rete denominata myVMNic1. La macchina virtuale e l'interfaccia di rete si trovano in un gruppo di risorse denominato myResourceGroup e si trovano nell'area Stati Uniti orientali . Modificare i valori nei passaggi come appropriato per la VM per cui si sta diagnosticando il problema.

Diagnosi tramite il portale di Azure

  1. Accedere al portale di Azure con un account Azure con le autorizzazioni necessarie.

  2. Nella parte superiore del portale di Azure immettere nella casella di ricerca il nome di una macchina virtuale in stato di esecuzione. Quando il nome della VM viene visualizzato nei risultati della ricerca, selezionarlo.

  3. In Impostazioni a sinistra selezionare Rete e passare alla risorsa dell'interfaccia di rete selezionandone il nome. Visualizzare le interfacce di rete

  4. A sinistra selezionare Route valide. Le route valide per un'interfaccia di rete denominata myVMNic1 sono illustrate nell'immagine seguente: Visualizzare le route valide

    Se sono presenti più interfacce di rete collegate alla macchina virtuale, è possibile visualizzare le route valide per qualsiasi interfaccia di rete selezionandola. Poiché ogni interfaccia di rete può trovarsi in una subnet diversa, ogni interfaccia di rete può avere route valide differenti.

    Nell'esempio illustrato nell'immagine precedente, le route elencate sono route predefinite che Azure crea per ogni subnet. L'elenco conterrà almeno queste route, ma potrebbe contenerne altre in base alle funzionalità abilitate per la rete virtuale, ad esempio il peering con un'altra rete virtuale o la connessione alla rete locale tramite un gateway VPN di Azure. Per altre informazioni su ognuna di queste route e sulle altre che possono essere visualizzate per l'interfaccia di rete, vedere Routing del traffico di rete virtuale. Se l'elenco contiene un numero elevato di route, può risultare più semplice selezionare Scarica per scaricarlo in formato CSV.

Anche se nei passaggi precedenti le route valide sono state visualizzate tramite la macchina virtuale, è possibile visualizzarle anche tramite:

Diagnosi tramite PowerShell

Nota

È consigliabile usare il modulo Azure Az PowerShell per interagire con Azure. Per iniziare, vedere Installare Azure PowerShell. Per informazioni su come eseguire la migrazione al modulo AZ PowerShell, vedere Eseguire la migrazione di Azure PowerShell da AzureRM ad Az.

È possibile eseguire i comandi seguenti in Azure Cloud Shell oppure in PowerShell dal computer. Azure Cloud Shell è una shell interattiva gratuita. Include strumenti comuni di Azure preinstallati e configurati per l'uso con l'account. Se si esegue PowerShell dal computer, è necessario il modulo Azure PowerShell versione 1.0.0 o successiva. Per trovare la versione installata, eseguire Get-Module -ListAvailable Az nel computer. Se è necessario eseguire l'aggiornamento, vedere Installare e configurare Azure PowerShell. Se si esegue PowerShell in locale, è necessario eseguire Connect-AzAccount anche per accedere ad Azure con un account con le autorizzazioni necessarie.

Ottenere le route valide per un'interfaccia di rete con Get-AzEffectiveRouteTable. L'esempio seguente ottiene le route valide per un'interfaccia di rete denominata myVMNic1, che si trova in un gruppo di risorse denominato myResourceGroup:

Get-AzEffectiveRouteTable `
  -NetworkInterfaceName myVMNic1 `
  -ResourceGroupName myResourceGroup `
  | Format-Table

Per comprendere le informazioni restituite nell'output, vedere Panoramica sul routing. L'output viene restituito solo se la macchina virtuale è nello stato di esecuzione. Se alla macchina virtuale sono collegate più interfacce di rete, è possibile esaminare le route valide per ognuna delle interfacce. Poiché ogni interfaccia di rete può trovarsi in una subnet diversa, ogni interfaccia di rete può avere route valide differenti. Se si verificano ancora problemi di comunicazione, vedere Diagnosi aggiuntiva e Considerazioni.

Se non si conosce il nome di un'interfaccia di rete, ma si conosce il nome della VM a cui l'interfaccia di rete è collegata, i comandi seguenti restituiscono gli ID di tutte le interfacce di rete collegate alla VM:

$VM = Get-AzVM -Name myVM `
  -ResourceGroupName myResourceGroup
$VM.NetworkProfile

L'output che si riceve è simile all'esempio seguente:

NetworkInterfaces
-----------------
{/subscriptions/<ID>/resourceGroups/myResourceGroup/providers/Microsoft.Network/networkInterfaces/myVMNic1

Nell'output precedente il nome dell'interfaccia di rete è myVMNic1.

Diagnosi tramite l'interfaccia della riga di comando di Azure

È possibile eseguire i comandi seguenti nel Cloud Shell di Azure o eseguendo l'interfaccia della riga di comando dal computer. Questo articolo richiede l'interfaccia della riga di comando di Azure 2.0.32 o versioni successive. Eseguire az --version per trovare la versione installata. Se è necessario eseguire l'installazione o l'aggiornamento, vedere Installare l'interfaccia della riga di comando di Azure. Se si esegue l'interfaccia della riga di comando di Azure in locale, è necessario eseguire anche az login e accedere ad Azure con un account dotato delle autorizzazioni necessarie.

Ottenere le route valide per un'interfaccia di rete con az network nic show-effective-route-table. L'esempio seguente ottiene le route valide per un'interfaccia di rete denominata myVMNic1 che si trova in un gruppo di risorse denominato myResourceGroup:

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

Per comprendere le informazioni restituite nell'output, vedere Panoramica sul routing. L'output viene restituito solo se la macchina virtuale è nello stato di esecuzione. Se alla macchina virtuale sono collegate più interfacce di rete, è possibile esaminare le route valide per ognuna delle interfacce. Poiché ogni interfaccia di rete può trovarsi in una subnet diversa, ogni interfaccia di rete può avere route valide differenti. Se si verificano ancora problemi di comunicazione, vedere Diagnosi aggiuntiva e Considerazioni.

Se non si conosce il nome di un'interfaccia di rete, ma si conosce il nome della VM a cui l'interfaccia di rete è collegata, i comandi seguenti restituiscono gli ID di tutte le interfacce di rete collegate alla VM:

az vm show \
  --name myVM \
  --resource-group myResourceGroup

Risolvere il problema

La risoluzione dei problemi di routing in genere comporta:

  • Aggiunta di una route personalizzata per eseguire l'override di una delle route predefinite di Azure. Informazioni su come aggiungere una route personalizzata.
  • Modifica o rimozione di una route personalizzata che può causare il routing a una posizione indesiderata. Informazioni su come modificare oppure eliminare una route personalizzata.
  • Verifica che la tabella di route che contiene le route personalizzate eventualmente definite sia associata alla subnet in cui si trova l'interfaccia di rete. Informazioni su come associare una route a una subnet.
  • Verifica del corretto funzionamento dei dispositivi distribuiti, ad esempio gateway VPN di Azure VPN o appliance di rete virtuali. Usare la funzionalità di diagnostica VPN di Network Watcher per individuare eventuali problemi con un gateway VPN di Azure.

Se si verificano ancora problemi di comunicazione, vedere Considerazioni e Diagnosi aggiuntiva.

Considerazioni

Durante la risoluzione dei problemi di comunicazione, tenere presente quanto segue:

  • Il routing è basato sulla corrispondenza del prefisso più lunga (LPM) tra le route definite dall'utente, BGP e di sistema. Se è presente più di una route con la stessa corrispondenza LPM, la route viene selezionata in base alla sua origine nell'ordine elencato in Panoramica sul routing. Cercando le route valide, è possibile vedere solo le route valide con corrispondenza LPM basata su tutte le route disponibili. Vedendo il modo in cui vengono effettivamente valutate le route per un'interfaccia di rete, è molto più semplice risolvere i problemi delle route specifiche che potrebbero influire sulle comunicazioni dalla VM.
  • Se l'utente ha definito route personalizzate verso un'appliance virtuale di rete, con Appliance virtuale come tipo di hop successivo, assicurarsi che l'inoltro IP sia abilitato nell'appliance virtuale di rete che riceve il traffico o che i pacchetti vengano eliminati. Altre informazioni su come abilitare l'inoltro IP per un'interfaccia di rete. Inoltre, è necessario che il sistema operativo o l'applicazione all'interno dell'appliance virtuale di rete sia in grado di inoltrare il traffico di rete e configurato a questo scopo.
  • Se si crea una route per 0.0.0.0/0, tutto il traffico Internet in uscita viene instradato all'hop successivo specificato, ad esempio un'appliance virtuale di rete o un gateway VPN. La creazione di una route di questo tipo viene spesso definita tunneling forzato. Le connessioni remote che usano i protocolli RDP o SSH da Internet alla macchina virtuale potrebbero non funzionare con questa route, a seconda del modo in cui l'hop successivo gestisce il traffico. Il tunneling forzato può essere abilitato:
    • Quando si usa la VPN da sito a sito, creando una route con un tipo di hop successivo Gateway VPN. Altre informazioni sulla configurazione del tunneling forzato.
    • Se una route predefinita 0.0.0.0/0 viene annunciata su BGP tramite un gateway di rete virtuale quando si usa una VPN da sito a sito o un circuito ExpressRoute. Altre informazioni sull'uso di BGP con una VPN da sito a sito o con ExpressRoute.
  • Per il corretto funzionamento del traffico peering di rete virtuale deve esistere una route di sistema con un tipo di hop successivo Peering reti virtuali per l'intervallo di prefissi della rete virtuale con peering. Se tale route non esiste e il collegamento di peering di rete virtuale è Connesso:
  • Anche se Azure assegna route predefinite a ogni sua interfaccia di rete, se alla macchina virtuale sono collegate più interfacce di rete solo all'interfaccia di rete primaria vengono assegnati un gateway o una route predefinita (0.0.0.0/0), all'interno del sistema operativo della VM. Informazioni su come creare una route predefinita per le interfacce di rete secondarie collegate a una VM Windows o Linux. Altre informazioni sulle interfacce di rete primaria e secondaria.

Diagnosi aggiuntiva

  • Per eseguire un rapido test per determinare il tipo di hop successivo per il traffico destinato a una posizione, usare la funzionalità Hop successivo di Azure Network Watcher. Questa funzionalità identifica il tipo di hop successivo per il traffico destinato a una posizione specificata.
  • Se non vengono individuate route che causano errori nelle comunicazioni di rete di una macchina virtuale, il problema potrebbe essere dovuto al software firewall in esecuzione nel sistema operativo della VM
  • Se si forza il tunneling del traffico a un dispositivo locale tramite un gateway VPN o un'appliance virtuale di rete, potrebbe essere impossibile connettersi a una macchina virtuale da Internet, a seconda del modo in cui si è configurato il routing per i dispositivi. Verificare che il routing configurato per il dispositivo instradi il traffico verso un indirizzo IP pubblico o privato per la macchina virtuale.
  • Usare la funzionalità di risoluzione dei problemi di connessione di Network Watcher per determinare le cause associate a routing, filtro e sistema operativo dei problemi di comunicazione in uscita.

Passaggi successivi