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 routetabel 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 routetabel 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 myResourceGroup \
  --location eastus

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

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

Een route maken

Maak een route in de routetabel met 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

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 myVirtualNetwork \
  --resource-group myResourceGroup \
  --address-prefix 10.0.0.0/16 \
  --subnet-name Public \
  --subnet-prefix 10.0.0.0/24

Maak twee extra subnetten met 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

Koppel de routetabel myRouteTablePublic aan het openbare subnet met az network vnet subnet update.

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

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 DMZ-subnet met az vm create. Wanneer u een virtuele machine maakt, maakt en wijst Azure standaard een netwerkinterface myVmNvaVMNic en een openbaar IP-adres toe aan de virtuele machine. Met --public-ip-address "" de parameter wordt Azure geïnstrueerd om geen openbaar IP-adres te maken en toe te wijzen aan de VIRTUELE machine, omdat de VIRTUELE machine niet hoeft te worden verbonden met internet. Als SSH-sleutels niet al bestaan op de standaardlocatie van de sleutel, worden ze met deze opdracht gemaakt. Als u een specifieke set sleutels wilt gebruiken, gebruikt u de optie --ssh-key-value.

az vm create \
  --resource-group myResourceGroup \
  --name myVmNva \
  --image Ubuntu2204 \
  --public-ip-address "" \
  --subnet DMZ \
  --vnet-name myVirtualNetwork \
  --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 myVmNvaVMNic om netwerkverkeer dat naar de netwerkinterface is verzonden, door te sturen, dat niet is bestemd voor een eigen IP-adres, 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 myVmNvaVMNic \
  --resource-group myResourceGroup \
  --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 om pakketten door te sturen. Als u deze opdracht wilt uitvoeren zonder u aan te melden bij de virtuele machine, gebruiken we de aangepaste scriptextensieaz 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"}'

Het uitvoeren van de opdracht kan een minuut duren. Houd er rekening mee dat deze wijziging niet blijft bestaan nadat een VM 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 subnet wordt doorgestuurd naar het privésubnet via de NVA.

Maak een virtuele machine in het 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. Om dit artikel te stroomlijnen, wordt een wachtwoord gebruikt. Sleutels worden doorgaans gebruikt in productie-implementaties. Als u sleutels gebruikt, moet u ook het doorsturen van de SSH-agent configureren. Zie de documentatie voor uw SSH-client voor meer informatie. Vervang <replace-with-your-password> in de volgende opdracht door een wachtwoord van uw keuze.

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

Maak een VIRTUELE machine in het privésubnet .

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

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/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"
}

Let op het openbare IP-adres. Dit adres wordt in een latere stap gebruikt voor toegang tot de virtuele machine vanaf internet.

Verkeer routeren via een NVA

Maak met behulp van een SSH-client van uw keuze verbinding met de vm's die hierboven zijn gemaakt. De volgende opdracht kan bijvoorbeeld worden gebruikt vanuit een opdrachtregelinterface zoals WSL om een SSH-sessie te maken met de myVmPrivate-VM . Vervang <publicIpAddress> door het openbare IP-adres van uw VIRTUELE machine. In het bovenstaande voorbeeld is het IP-adres 13.90.242.231.

ssh azureuser@<publicIpAddress>

Wanneer u om een wachtwoord wordt gevraagd, voert u het wachtwoord in dat u hebt geselecteerd in Virtuele machines maken.

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

sudo apt update
sudo apt install traceroute

Gebruik de volgende opdracht om routering voor netwerkverkeer naar de myVmPublic-VM te testen vanaf de myVmPrivate-VM .

traceroute myVmPublic

Het antwoord is vergelijkbaar met het volgende voorbeeld:

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

U ziet dat verkeer rechtstreeks vanuit myVmPrivate naar myVmPublic wordt geleid. De standaardroutes van Azure routeren verkeer rechtstreeks tussen subnetten.

Gebruik de volgende opdracht om SSH te gebruiken voor de myVmPublic-VM vanaf de myVmPrivate-VM :

ssh azureuser@myVmPublic

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

sudo apt-get install traceroute

Gebruik de volgende opdracht om routering voor netwerkverkeer naar de myVmPrivate-VM te testen vanaf de myVmPublic-VM .

traceroute myVmPrivate

Het antwoord is vergelijkbaar met het volgende voorbeeld:

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

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 myVmPrivate. Door de route die is toegevoegd aan de routetabel myRouteTablePublic en gekoppeld aan het Openbare subnet leidt Azure het verkeer via het NVA in plaats van rechtstreeks naar het Privé-subnet.

Sluit de SSH-sessies op zowel de myVmPublic - als myVmPrivate-VM's .

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 myResourceGroup --yes

Volgende stappen

In dit artikel hebt u een routetabel gemaakt en gekoppeld aan een subnet. U hebt een eenvoudig NVA gemaakt dat verkeer van een openbaar subnet naar een privé-subnet heeft geleid. U kunt allerlei vooraf geconfigureerde NVA's die netwerkfuncties uitvoeren zoals firewalls en WAN-optimalisatie, implementeren 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-diensten niet in een virtueel netwerk worden geïmplementeerd. 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.