Share via


Netwerkverkeer routeren met een routetabel met behulp van de Azure CLI

Azure routeert standaard automatisch verkeer tussen alle subnetten in een virtueel netwerk. U kunt uw eigen routes maken om de standaardroutering van Azure te overschrijven. De mogelijkheid voor het maken van aangepaste routes is handig als u bijvoorbeeld verkeer tussen subnetten wilt routeren via een NVA (virtueel netwerkapparaat). In dit artikel leert u het volgende:

  • Een routeringstabel maken
  • Een route maken
  • Een virtueel netwerk met meerdere subnetten maken
  • Een routetabel aan een subnet koppelen
  • Een eenvoudige NVA maken waarmee verkeer van een Ubuntu-VM wordt gerouteerd
  • Virtuele machines (VM's) implementeren in verschillende subnetten
  • Verkeer van het ene subnet naar het andere leiden via een NVA

Als u geen Azure-abonnement hebt, kunt u een gratis Azure-account maken voordat u begint.

Vereisten

  • Voor dit artikel is versie 2.0.28 of hoger van Azure CLI vereist. Als u Azure Cloud Shell gebruikt, is de nieuwste versie al geïnstalleerd.

Een routeringstabel maken

Voordat u een routetabel kunt maken, maakt u een resourcegroep met az group create voor alle resources die in dit artikel zijn gemaakt.

# Create a resource group.
az group create \
  --name test-rg \
  --location westus2

Maak een routetabel met az network route-table create. In het volgende voorbeeld wordt een routetabel gemaakt met de naam route-table-public.

# Create a route table
az network route-table create \
  --resource-group test-rg \
  --name route-table-public

Een route maken

Maak een route in de routetabel met az network route-table route create.

az network route-table route create \
  --name to-private-subnet \
  --resource-group test-rg \
  --route-table-name route-table-public \
  --address-prefix 10.0.1.0/24 \
  --next-hop-type VirtualAppliance \
  --next-hop-ip-address 10.0.2.4

Een routetabel aan een subnet koppelen

Voordat u een routetabel aan een subnet kunt koppelen, moet u een virtueel netwerk en subnet maken. Maak een virtueel netwerk met één subnet met az network vnet create.

az network vnet create \
  --name vnet-1 \
  --resource-group test-rg \
  --address-prefix 10.0.0.0/16 \
  --subnet-name subnet-public \
  --subnet-prefix 10.0.0.0/24

Maak nog twee subnetten met az network vnet subnet create.

# Create a private subnet.
az network vnet subnet create \
  --vnet-name vnet-1 \
  --resource-group test-rg \
  --name subnet-private \
  --address-prefix 10.0.1.0/24

# Create a DMZ subnet.
az network vnet subnet create \
  --vnet-name vnet-1 \
  --resource-group test-rg \
  --name subnet-dmz \
  --address-prefix 10.0.2.0/24

Koppel de route-table-subnet-public route table aan het subnet-public subnet met az network vnet subnet update.

az network vnet subnet update \
  --vnet-name vnet-1 \
  --name subnet-public \
  --resource-group test-rg \
  --route-table route-table-public

Een NVA maken

Een NVA is een VM die een netwerkfunctie uitvoert, zoals routering, firewall of WAN-optimalisatie. We maken een eenvoudige NVA op basis van een Ubuntu-VM voor algemeen gebruik, voor demonstratiedoeleinden.

Maak een VIRTUELE machine die moet worden gebruikt als de NVA in het subnet-dmz-subnet met az vm create. Wanneer u een virtuele machine maakt, maakt en wijst Azure standaard een netwerkinterface vm-nvaVMNic en een openbaar subnet-IP-adres toe aan de virtuele machine. Met --public-ip-address "" de parameter wordt Azure geïnstrueerd om geen openbaar IP-adres van een subnet te maken en toe te wijzen aan de virtuele machine, omdat de VIRTUELE machine niet hoeft te worden verbonden met internet.

In het volgende voorbeeld wordt een virtuele machine gemaakt en wordt een gebruikersaccount toegevoegd. De --generate-ssh-keys parameter zorgt ervoor dat de CLI zoekt naar een beschikbare ssh-sleutel in ~/.ssh. Als er een wordt gevonden, wordt die sleutel gebruikt. Zo niet, dan wordt er een gegenereerd en opgeslagen in ~/.ssh. Ten slotte implementeren we de nieuwste Ubuntu 22.04 installatiekopieën.

az vm create \
  --resource-group test-rg \
  --name vm-nva \
  --image Ubuntu2204 \
  --public-ip-address "" \
  --subnet subnet-dmz \
  --vnet-name vnet-1 \
  --generate-ssh-keys

Het maken van de virtuele machine duurt een paar minuten. Ga niet verder met de volgende stap totdat Azure klaar is met het maken van de virtuele machine en retourneert uitvoer over de virtuele machine.

Voor een netwerkinterface vm-nvaVMNic om netwerkverkeer dat naar de netwerkinterface is verzonden, door te sturen, moet doorsturen via IP zijn ingeschakeld voor de netwerkinterface. Schakel doorsturen via IP in voor de netwerkinterface met az network nic update.

az network nic update \
  --name vm-nvaVMNic \
  --resource-group test-rg \
  --ip-forwarding true

In de VM moet het besturingssysteem of een toepassing die wordt uitgevoerd op de virtuele machine, ook netwerkverkeer kunnen doorsturen. We gebruiken de sysctl opdracht om de Linux-kernel in te schakelen voor het doorsturen van pakketten. Als u deze opdracht wilt uitvoeren zonder u aan te melden bij de virtuele machine, gebruiken we de aangepaste scriptextensie az vm extension set:

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

Het kan een minuut duren voordat de opdracht wordt uitgevoerd. Deze wijziging blijft niet behouden nadat een virtuele machine opnieuw is opgestart. Als de NVA-VM om welke reden dan ook opnieuw wordt opgestart, moet het script worden herhaald.

Virtuele machines maken

Maak twee VM's in het virtuele netwerk, zodat u in een latere stap kunt valideren dat verkeer van het openbare subnetnet naar het privésubnetnet wordt gerouteerd via de NVA.

Maak een VIRTUELE machine in het subnet-openbare subnet met az vm create. Met --no-wait de parameter kan Azure de opdracht op de achtergrond uitvoeren, zodat u verder kunt gaan met de volgende opdracht.

In het volgende voorbeeld wordt een virtuele machine gemaakt en wordt een gebruikersaccount toegevoegd. De --generate-ssh-keys parameter zorgt ervoor dat de CLI zoekt naar een beschikbare ssh-sleutel in ~/.ssh. Als er een wordt gevonden, wordt die sleutel gebruikt. Zo niet, dan wordt er een gegenereerd en opgeslagen in ~/.ssh. Ten slotte implementeren we de nieuwste Ubuntu 22.04 installatiekopieën.

az vm create \
  --resource-group test-rg \
  --name vm-public \
  --image Ubuntu2204 \
  --vnet-name vnet-1 \
  --subnet subnet-public \
  --admin-username azureuser \
  --generate-ssh-keys \
  --no-wait

Maak een virtuele machine in het subnet-privésubnet .

az vm create \
  --resource-group test-rg \
  --name vm-private \
  --image Ubuntu2204 \
  --vnet-name vnet-1 \
  --subnet subnet-private \
  --admin-username azureuser \
  --generate-ssh-keys

Het maken van de virtuele machine duurt een paar minuten. Nadat de VIRTUELE machine is gemaakt, toont de Azure CLI informatie die vergelijkbaar is met het volgende voorbeeld:

{
  "fqdns": "",
  "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test-rg/providers/Microsoft.Compute/virtualMachines/vm-private",
  "location": "westus2",
  "macAddress": "00-0D-3A-23-9A-49",
  "powerState": "VM running",
  "privateIpAddress": "10.0.1.4",
  "publicIpAddress": "203.0.113.24",
  "resourceGroup": "test-rg"
}

Microsoft Entra ID-aanmelding inschakelen voor de virtuele machines

In het volgende codevoorbeeld wordt de extensie geïnstalleerd om een Microsoft Entra ID-aanmelding in te schakelen voor een Virtuele Linux-machine. Extensies van virtuele Azure-machines (VM's) zijn kleine toepassingen die configuratie na de implementatie en automatiseringstaken voor Azure-VM's bieden.

az vm extension set \
    --publisher Microsoft.Azure.ActiveDirectory \
    --name AADSSHsign-inForLinux \
    --resource-group test-rg \
    --vm-name vm-private
az vm extension set \
    --publisher Microsoft.Azure.ActiveDirectory \
    --name AADSSHsign-inForLinux \
    --resource-group test-rg \
    --vm-name vm-public

Verkeer routeren via een NVA

Maak met behulp van een SSH-client van uw keuze verbinding met de vm's die u eerder hebt gemaakt. De volgende opdracht kan bijvoorbeeld worden gebruikt vanuit een opdrachtregelinterface zoals Windows-subsysteem voor Linux om een SSH-sessie te maken met de vm-privé-VM. In de vorige stappen hebben we aanmelding via Microsoft Entra ID ingeschakeld voor de VM's. U kunt zich aanmelden bij de virtuele machines met behulp van uw Microsoft Entra ID-referenties of u kunt de SSH-sleutel gebruiken die u hebt gebruikt om de VIRTUELE machines te maken. In het volgende voorbeeld gebruiken we de SSH-sleutel om u aan te melden bij de VM's.

Zie Aanmelden bij een virtuele Linux-machine in Azure met behulp van Microsoft Entra ID en OpenSSH voor meer informatie over het aanmelden bij een virtuele Linux-machine in Azure.


### Store IP address of VM in order to SSH

Run the following command to store the IP address of the VM as an environment variable:

```bash
export IP_ADDRESS=$(az vm show --show-details --resource-group test-rg --name vm-private --query publicIps --output tsv)
ssh -o StrictHostKeyChecking=no azureuser@$IP_ADDRESS

Gebruik de volgende opdracht om traceringsroute te installeren op de vm-privé-VM :

sudo apt update
sudo apt install traceroute

Gebruik de volgende opdracht om routering voor netwerkverkeer naar de openbare VM van de vm-privé-VM te testen.

traceroute vm-public

Het antwoord is vergelijkbaar met het volgende voorbeeld:

azureuser@vm-private:~$ traceroute vm-public
traceroute to vm-public (10.0.0.4), 30 hops max, 60 byte packets
 1  vm-public.internal.cloudapp.net (10.0.0.4)  2.613 ms  2.592 ms  2.553 ms

U kunt zien dat verkeer rechtstreeks van de vm-privé-VM naar de openbare VM wordt gerouteerd. De standaardroutes van Azure routeren verkeer rechtstreeks tussen subnetten. Sluit de SSH-sessie met de vm-privé-VM .

IP-adres van de VIRTUELE machine opslaan in SSH

Voer de volgende opdracht uit om het IP-adres van de VIRTUELE machine op te slaan als een omgevingsvariabele:

export IP_ADDRESS=$(az vm show --show-details --resource-group test-rg --name vm-public --query publicIps --output tsv)
ssh -o StrictHostKeyChecking=no azureuser@$IP_ADDRESS

Gebruik de volgende opdracht om traceringsroute te installeren op de vm-openbare VM:

sudo apt update
sudo apt install traceroute

Gebruik de volgende opdracht om routering voor netwerkverkeer naar de vm-privé-VM van de openbare VM te testen.

traceroute vm-private

Het antwoord is vergelijkbaar met het volgende voorbeeld:

azureuser@vm-public:~$ traceroute vm-private
traceroute to vm-private (10.0.1.4), 30 hops max, 60 byte packets
 1  vm-nva.internal.cloudapp.net (10.0.2.4)  1.010 ms  1.686 ms  1.144 ms
 2  vm-private.internal.cloudapp.net (10.0.1.4)  1.925 ms  1.911 ms  1.898 ms

U ziet dat de eerste hop 10.0.2.4 is, het privé IP-adres van het NVA. De tweede hop is 10.0.1.4, het privé-IP-adres van de vm-privé-VM . De route die is toegevoegd aan de routetabel- openbare routetabel en die is gekoppeld aan het openbare subnetnet, heeft Azure ertoe geleid dat het verkeer via de NVA wordt gerouteerd, in plaats van rechtstreeks naar het subnet-privésubnet .

Sluit de SSH-sessie met de vm-openbare VM.

Resources opschonen

Wanneer u deze niet meer nodig hebt, gebruikt u az group delete om de resourcegroep en alle resources die deze bevat te verwijderen.

az group delete \
    --name test-rg \
    --yes \
    --no-wait

Volgende stappen

In dit artikel hebt u een routetabel gemaakt en gekoppeld aan een subnet. U hebt een eenvoudige NVA gemaakt die verkeer van een subnet-openbaar subnet naar een privésubnet heeft gerouteerd. Implementeer verschillende vooraf geconfigureerde NVA's die netwerkfuncties uitvoeren, zoals firewall- en WAN-optimalisatie vanuit Azure Marketplace. Zie Routeringoverzicht en Routetabel beheren voor meer informatie over routeren.

Hoewel u veel Azure-resources binnen een virtueel netwerk kunt implementeren, kunnen resources voor sommige Azure PaaS-services niet worden geïmplementeerd in een virtueel netwerk. U kunt de toegang tot de resources van sommige Azure PaaS-diensten echter nog steeds beperken tot alleen verkeer vanaf een subnet van een virtueel netwerk. Zie Netwerktoegang tot PaaS-resources beperken voor meer informatie.