Instradare il traffico di rete con una tabella di route usando l'interfaccia della riga di comando di Azure

Per impostazione predefinita, Azure indirizza automaticamente il traffico tra tutte le subnet di una rete virtuale. È possibile creare le proprie route per eseguire l'override del routing predefinito di Azure. La possibilità di creare route personalizzate è utile se, ad esempio, si vuole indirizzare il traffico tra subnet attraverso un'appliance virtuale di rete. In questo articolo vengono illustrate le operazioni seguenti:

  • Creare una tabella di route
  • Creare una route
  • Creare una rete virtuale con più subnet
  • Associare una tabella di routing a una subnet
  • Creare un'appliance virtuale di rete di base che instrada il traffico da una macchina virtuale Ubuntu
  • Distribuire le macchine virtuali in subnet diverse
  • Indirizzare il traffico da una subnet a un'altra attraverso un'appliance virtuale di rete

Se non si ha una sottoscrizione di Azure, creare un account Azure gratuito prima di iniziare.

Prerequisiti

  • Questo articolo richiede l'interfaccia della riga di comando di Azure versione 2.0.28 o successiva. Se si usa Azure Cloud Shell, la versione più recente è già installata.

Creare una tabella di route

Prima di poter creare una tabella di route, creare un gruppo di risorse con az group create per tutte le risorse create in questo articolo.

# Create a resource group.
az group create \
  --name myResourceGroup \
  --location eastus

Creare una tabella di route con az network route-table create. L'esempio seguente crea una tabella di route denominata myRouteTablePublic.

# Create a route table
az network route-table create \
  --resource-group myResourceGroup \
  --name myRouteTablePublic

Creare una route

Creare una route nella tabella di route con az network route-table route create.

az network route-table route create \
  --name ToPrivateSubnet \
  --resource-group myResourceGroup \
  --route-table-name myRouteTablePublic \
  --address-prefix 10.0.1.0/24 \
  --next-hop-type VirtualAppliance \
  --next-hop-ip-address 10.0.2.4

Associare una tabella di routing a una subnet

Prima di poter associare una tabella di route a una subnet, è necessario creare una rete virtuale e una subnet. Creare una rete virtuale con una subnet con az network vnet create.

az network vnet create \
  --name myVirtualNetwork \
  --resource-group myResourceGroup \
  --address-prefix 10.0.0.0/16 \
  --subnet-name Public \
  --subnet-prefix 10.0.0.0/24

Creare due subnet aggiuntive con az network vnet subnet create.

# Create a private subnet.
az network vnet subnet create \
  --vnet-name myVirtualNetwork \
  --resource-group myResourceGroup \
  --name Private \
  --address-prefix 10.0.1.0/24

# Create a DMZ subnet.
az network vnet subnet create \
  --vnet-name myVirtualNetwork \
  --resource-group myResourceGroup \
  --name DMZ \
  --address-prefix 10.0.2.0/24

Associare la tabella di route myRouteTablePublic alla subnet Public con az network vnet subnet update.

az network vnet subnet update \
  --vnet-name myVirtualNetwork \
  --name Public \
  --resource-group myResourceGroup \
  --route-table myRouteTablePublic

Creare un'appliance virtuale di rete

Un'appliance virtuale di rete è una macchina virtuale che svolge una funzione di rete, ad esempio il routing, la protezione tramite firewall o l'ottimizzazione della WAN. Verrà creata un'appliance virtuale di rete di base da una macchina virtuale Ubuntu per utilizzo generico, a scopo dimostrativo.

Creare una macchina virtuale da usare come appliance virtuale di rete nella subnet dellarete perimetrale con az vm create. Quando si crea una macchina virtuale, Azure crea e assegna un'interfaccia di rete myVmNvaVMNic e un indirizzo IP pubblico alla macchina virtuale, per impostazione predefinita. Il parametro --public-ip-address "" indica ad Azure di non creare e assegnare un indirizzo IP pubblico alla macchina virtuale, perché non è necessario connettersi alla macchina virtuale da Internet. 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.

az vm create \
  --resource-group myResourceGroup \
  --name myVmNva \
  --image Ubuntu2204 \
  --public-ip-address "" \
  --subnet DMZ \
  --vnet-name myVirtualNetwork \
  --generate-ssh-keys

La creazione della VM richiede alcuni minuti. Prima di continuare con il passaggio successivo, attendere che Azure finisca di creare la macchina virtuale e restituisca il relativo output.

Affinché un'interfaccia di rete myVmNvaVMNic sia in grado di inoltrare il traffico di rete inviato, che non è destinato al proprio indirizzo IP, l'inoltro IP deve essere abilitato per l'interfaccia di rete. Abilitare l'inoltro IP per l'interfaccia di rete con az network nic update.

az network nic update \
  --name myVmNvaVMNic \
  --resource-group myResourceGroup \
  --ip-forwarding true

All'interno della macchina virtuale è necessario che il sistema operativo o un'applicazione in esecuzione nella macchina virtuale sia anche in grado di inoltrare il traffico di rete. Verrà usato il sysctl comando per consentire al kernel Linux di inoltrare i pacchetti. Per eseguire questo comando senza accedere alla macchina virtuale, si userà l'estensione script personalizzato az vm extension set:

az vm extension set \
  --resource-group myResourceGroup \
  --vm-name myVmNva \
  --name customScript \
  --publisher Microsoft.Azure.Extensions \
  --settings '{"commandToExecute":"sudo sysctl -w net.ipv4.ip_forward=1"}'

L'esecuzione del comando può richiedere fino a un minuto. Si noti che questa modifica non verrà mantenuta dopo il riavvio di una macchina virtuale, quindi se la macchina virtuale di appliance virtuale di rete viene riavviata per qualsiasi motivo, lo script dovrà essere ripetuto.

Creare macchine virtuali

Creare due macchine virtuali nella rete virtuale per poter verificare che il traffico dalla subnet Public venga indirizzato alla subnet Private attraverso l'appliance virtuale di rete in un passaggio successivo.

Creare una macchina virtuale nella subnet Public con az vm create. Il parametro --no-wait consente ad Azure di eseguire il comando in background, pertanto è possibile continuare con il comando successivo. Per semplificare questo articolo, viene usata una password. Le chiavi in genere vengono usate per le distribuzioni di produzione. Se si usano chiavi, occorre configurare anche l'inoltro dell'agente SSH. Per altre informazioni, vedere la documentazione del client SSH. Sostituire <replace-with-your-password> nel comando seguente con una password a scelta.

adminPassword="<replace-with-your-password>"

az vm create \
  --resource-group myResourceGroup \
  --name myVmPublic \
  --image Ubuntu2204 \
  --vnet-name myVirtualNetwork \
  --subnet Public \
  --admin-username azureuser \
  --admin-password $adminPassword \
  --no-wait

Creare una macchina virtuale nella subnet Private.

az vm create \
  --resource-group myResourceGroup \
  --name myVmPrivate \
  --image Ubuntu2204 \
  --vnet-name myVirtualNetwork \
  --subnet Private \
  --admin-username azureuser \
  --admin-password $adminPassword

La creazione della VM richiede alcuni minuti. Dopo aver creato la macchina virtuale, l'interfaccia della riga di comando di Azure mostra informazioni simili all'esempio seguente:

{
  "fqdns": "",
  "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVmPrivate",
  "location": "eastus",
  "macAddress": "00-0D-3A-23-9A-49",
  "powerState": "VM running",
  "privateIpAddress": "10.0.1.4",
  "publicIpAddress": "13.90.242.231",
  "resourceGroup": "myResourceGroup"
}

Prendere nota di publicIpAddress. Questo indirizzo viene usato per accedere alla VM da Internet in un passaggio successivo.

Indirizzare il traffico attraverso un'appliance virtuale di rete

Usando un client SSH di propria scelta, connettersi alle macchine virtuali create in precedenza. Ad esempio, il comando seguente può essere usato da un'interfaccia della riga di comando, ad esempio WSL , per creare una sessione SSH con la macchina virtuale myVmPrivate . Sostituire <publicIpAddress> con l'indirizzo IP pubblico della macchina virtuale. Nell'esempio precedente l'indirizzo IP è 13.90.242.231.

ssh azureuser@<publicIpAddress>

Quando viene richiesto di immettere una password, specificare la password selezionata in Creare macchine virtuali.

Usare il comando seguente per installare il traceroute nella macchina virtuale myVmPrivate:

sudo apt update
sudo apt install traceroute

Usare il comando seguente per testare il routing del traffico di rete alla macchina virtuale myVmPublic dalla macchina virtuale myVmPrivate.

traceroute myVmPublic

La risposta restituita è simile all'esempio seguente:

traceroute to myVmPublic (10.0.0.4), 30 hops max, 60 byte packets
1  10.0.0.4 (10.0.0.4)  1.404 ms  1.403 ms  1.398 ms

Come si può osservare, il traffico viene indirizzato direttamente dalla macchina virtuale myVmPrivate alla macchina virtuale myVmPublic. Le route predefinite di Azure indirizzano il traffico direttamente tra subnet.

Usare il comando seguente per stabilire una connessione SSH alla macchina virtuale myVmPublic dalla macchina virtuale myVmPrivate:

ssh azureuser@myVmPublic

Usare il comando seguente per installare il traceroute nella macchina virtuale myVmPublic:

sudo apt-get install traceroute

Usare il comando seguente per testare il routing del traffico di rete alla macchina virtuale myVmPrivate dalla macchina virtuale myVmPublic.

traceroute myVmPrivate

La risposta restituita è simile all'esempio seguente:

traceroute to myVmPrivate (10.0.1.4), 30 hops max, 60 byte packets
1  10.0.2.4 (10.0.2.4)  0.781 ms  0.780 ms  0.775 ms
2  10.0.1.4 (10.0.0.4)  1.404 ms  1.403 ms  1.398 ms

Come si può notare, il primo hop è 10.0.2.4, cioè l'indirizzo IP privato dell'appliance virtuale di rete. Il secondo hop è 10.0.1.4, ossia l'indirizzo IP privato della macchina virtuale myVmPrivate. A causa della route aggiunta alla tabella di route myRouteTablePublic e associata alla subnet Public, Azure ha indirizzato il traffico di Azure attraverso l'appliance virtuale di rete, invece che direttamente alla subnet Private.

Chiudere le sessioni SSH a entrambe le macchine virtuali myVmPublic e myVmPrivate.

Pulire le risorse

Quando il gruppo di risorse e tutte le risorse in esso contenute non sono più necessari, usare az group delete per rimuoverli.

az group delete --name myResourceGroup --yes

Passaggi successivi

In questo articolo è stata creata una tabella di route per poi associarla a una subnet. È stata creata una semplice appliance virtuale di rete che ha indirizzato il traffico da una subnet pubblica a una subnet privata. Distribuire una varietà di appliance virtuali di rete preconfigurate che svolgono funzioni di rete come la protezione tramite firewall e l'ottimizzazione della WAN da Azure Marketplace. Per altre informazioni sul routing, vedere Panoramica del routing e Gestire una tabella di route.

Benché sia possibile distribuire molte risorse di Azure all'interno di una rete virtuale, non è possibile distribuire le risorse per alcuni servizi PaaS di Azure in una rete virtuale. È comunque possibile limitare l'accesso alle risorse di alcuni servizi PaaS di Azure al traffico da una sola subnet della rete virtuale. Per informazioni su come fare, vedere Limitare l'accesso alla rete alle risorse PaaS.