Esercizio - Instradare il traffico attraverso l'appliance virtuale di rete
Ora che sono state create l'appliance virtuale di rete e le macchine virtuali, il traffico verrà instradato attraverso l'appliance virtuale di rete.
Creare le macchine virtuali pubblica e privata
I passaggi successivi consistono nel distribuire una macchina virtuale nelle subnet pubblica e privata.
Aprire l'editor Cloud Shell e creare un file denominato cloud-init.txt.
code cloud-init.txt
Aggiungere al file le informazioni di configurazione seguenti. Con questa configurazione viene installato il pacchetto
inetutils-traceroute
quando si crea una nuova macchina virtuale. Il pacchetto contiene l'utilitàtraceroute
, che verrà usata più avanti in questo esercizio.#cloud-config package_upgrade: true packages: - inetutils-traceroute
Premere CTRL+S per salvare il file e quindi CTRL+Q per chiudere l'editor.
In Cloud Shell eseguire il comando seguente per creare la macchina virtuale public. Sostituire
<password>
con una password appropriata per l'account azureuser.az vm create \ --resource-group "<rgn>[sandbox resource group name]</rgn>" \ --name public \ --vnet-name vnet \ --subnet publicsubnet \ --image Ubuntu2204 \ --admin-username azureuser \ --no-wait \ --custom-data cloud-init.txt \ --admin-password <password>
Eseguire il comando seguente per creare la macchina virtuale private. Sostituire
<password>
con una password appropriata.az vm create \ --resource-group "<rgn>[sandbox resource group name]</rgn>" \ --name private \ --vnet-name vnet \ --subnet privatesubnet \ --image Ubuntu2204 \ --admin-username azureuser \ --no-wait \ --custom-data cloud-init.txt \ --admin-password <password>
Eseguire il comando
watch
di Linux seguente per controllare se le macchine virtuali sono in esecuzione. Il comandowatch
esegue periodicamente il comandoaz vm list
in modo da poter monitorare lo stato di avanzamento delle macchine virtuali.watch -d -n 5 "az vm list \ --resource-group "<rgn>[sandbox resource group name]</rgn>" \ --show-details \ --query '[*].{Name:name, ProvisioningState:provisioningState, PowerState:powerState}' \ --output table"
Il valore Succeeded (Completato) per ProvisioningState e il valore VM running (Macchina virtuale in esecuzione) per PowerState indicano che la distribuzione è stata eseguita correttamente. Quando tutte le macchine virtuali sono in esecuzione, è possibile passare alla fase successiva. Premere CTRL+C per arrestare il comando e continuare con l'esercizio.
Eseguire il comando seguente per salvare l'indirizzo IP pubblico della macchina virtuale public in una variabile denominata
PUBLICIP
.PUBLICIP="$(az vm list-ip-addresses \ --resource-group "<rgn>[sandbox resource group name]</rgn>" \ --name public \ --query "[].virtualMachine.network.publicIpAddresses[*].ipAddress" \ --output tsv)" echo $PUBLICIP
Eseguire il comando seguente per salvare l'indirizzo IP pubblico della macchina virtuale private in una variabile denominata
PRIVATEIP
.PRIVATEIP="$(az vm list-ip-addresses \ --resource-group "<rgn>[sandbox resource group name]</rgn>" \ --name private \ --query "[].virtualMachine.network.publicIpAddresses[*].ipAddress" \ --output tsv)" echo $PRIVATEIP
Testare il routing del traffico attraverso l'appliance virtuale di rete
I passaggi finali consistono nell'usare l'utilità traceroute
Linux per vedere come viene instradato il traffico. Si userà il comando ssh
per eseguire traceroute
in ogni macchina virtuale. Il primo test mostrerà la route seguita dai pacchetti ICMP inviati dalla macchina virtuale public alla macchina virtuale private. Il secondo test mostrerà la route seguita dai pacchetti ICMP inviati dalla macchina virtuale private alla macchina virtuale public.
Eseguire il comando seguente per tracciare la route da public a private. Quando richiesto, immettere la password per l'account azureuser specificato in precedenza.
ssh -t -o StrictHostKeyChecking=no azureuser@$PUBLICIP 'traceroute private --type=icmp; exit'
Se viene visualizzato il messaggio di errore
bash: traceroute: command not found
, attendere un minuto ed eseguire di nuovo il comando. L'installazione automatica ditraceroute
può richiedere uno o due minuti dopo la distribuzione della macchina virtuale. Al termine, l'output dovrebbe essere simile all'esempio seguente:traceroute to private.kzffavtrkpeulburui2lgywxwg.gx.internal.cloudapp.net (10.0.1.4), 64 hops max 1 10.0.2.4 0.710ms 0.410ms 0.536ms 2 10.0.1.4 0.966ms 0.981ms 1.268ms Connection to 52.165.151.216 closed.
Si noti che il primo hop è 10.0.2.4. Questo indirizzo è l'indirizzo IP privato di nva. Il secondo hop è 10.0.1.4, ovvero l'indirizzo di private. Nel primo esercizio questa route è stata aggiunta alla tabella di route e la tabella è stata collegata alla subnet publicsubnet. Tutto il traffico da public a private, quindi, viene ora instradato attraverso l'appliance virtuale di rete.
Eseguire il comando seguente per tracciare la route da private a public. Quando richiesto, immettere la password per l'account azureuser.
ssh -t -o StrictHostKeyChecking=no azureuser@$PRIVATEIP 'traceroute public --type=icmp; exit'
Si noterà che il traffico passa direttamente a public (10.0.0.4) senza attraversare l'appliance virtuale di rete, come illustrato nell'output di comando seguente.
traceroute to public.kzffavtrkpeulburui2lgywxwg.gx.internal.cloudapp.net (10.0.0.4), 64 hops max 1 10.0.0.4 1.095ms 1.610ms 0.812ms Connection to 52.173.21.188 closed.
La macchina virtuale private usa le route predefinite e il traffico viene instradato direttamente tra le subnet.
A questo punto, è stato configurato il routing tra subnet per indirizzare il traffico dalla rete Internet pubblica attraverso la subnet dmzsubnet prima che raggiunga la subnet privata. Nella subnet dmzsubnet è stata aggiunta una macchina virtuale che funge da appliance virtuale di rete. È possibile configurare questa appliance virtuale di rete per rilevare le richieste potenzialmente dannose e bloccarle prima che raggiungano le destinazioni previste.