Weiterleiten von Netzwerkdatenverkehr mithilfe der Azure-Befehlszeilenschnittstelle
Standardmäßig leitet Azure automatisch den Datenverkehr aller Subnetze des virtuellen Netzwerks weiter. Sie können eigene Routen erstellen, um das Azure-Standardrouting außer Kraft zu setzen. Die Möglichkeit zum Erstellen von benutzerdefinierten Routen ist beispielsweise hilfreich, wenn Sie über ein virtuelles Netzwerkgerät (Network Virtual Appliance, NVA) Datenverkehr zwischen Subnetzen weiterleiten möchten. In diesem Artikel werden folgende Vorgehensweisen behandelt:
- Erstellen einer Routingtabelle
- Erstellen einer Route
- Erstellen eines virtuellen Netzwerks mit mehreren Subnetzen
- Zuordnen einer Routingtabelle zu einem Subnetz
- Erstellen einer einfachen NVA, die Datenverkehr von einer Ubuntu-VM weiterleitet
- Bereitstellen von VMs in unterschiedlichen Subnetzen
- Weiterleiten von Datenverkehr aus einem Subnetz zu einem anderen über ein virtuelles Netzwerkgerät
Wenn Sie kein Azure-Abonnement haben, erstellen Sie ein kostenloses Azure-Konto, bevor Sie beginnen.
Voraussetzungen
Verwenden Sie die Bash-Umgebung in Azure Cloud Shell. Weitere Informationen finden Sie unter Schnellstart für Bash in Azure Cloud Shell.
Wenn Sie CLI-Referenzbefehle lieber lokal ausführen, installieren Sie die Azure CLI. Wenn Sie Windows oder macOS ausführen, sollten Sie die Azure CLI in einem Docker-Container ausführen. Weitere Informationen finden Sie unter Ausführen der Azure CLI in einem Docker-Container.
Wenn Sie eine lokale Installation verwenden, melden Sie sich mithilfe des Befehls az login bei der Azure CLI an. Führen Sie die in Ihrem Terminal angezeigten Schritte aus, um den Authentifizierungsprozess abzuschließen. Informationen zu anderen Anmeldeoptionen finden Sie unter Anmelden mit der Azure CLI.
Installieren Sie die Azure CLI-Erweiterung beim ersten Einsatz, wenn Sie dazu aufgefordert werden. Weitere Informationen zu Erweiterungen finden Sie unter Verwenden von Erweiterungen mit der Azure CLI.
Führen Sie az version aus, um die installierte Version und die abhängigen Bibliotheken zu ermitteln. Führen Sie az upgrade aus, um das Upgrade auf die aktuelle Version durchzuführen.
- Für diesen Artikel ist mindestens Version 2.0.28 der Azure CLI erforderlich. Bei Verwendung von Azure Cloud Shell ist die aktuelle Version bereits installiert.
Erstellen einer Routingtabelle
Bevor Sie eine Routingtabelle erstellen können, müssen Sie mit az group create eine Ressourcengruppe für alle in diesem Artikel erstellten Ressourcen erstellen.
# Create a resource group.
az group create \
--name test-rg \
--location westus2
Erstellen Sie mit az network route-table create eine Routingtabelle. Im folgenden Beispiel wird eine Routingtabelle mit dem Namen route-table-public erstellt.
# Create a route table
az network route-table create \
--resource-group test-rg \
--name route-table-public
Erstellen einer Route
Erstellen Sie mit az network route-table route create eine Route in der Routingtabelle.
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
Zuordnen einer Routingtabelle zu einem Subnetz
Bevor Sie eine Routingtabelle einem Subnetz zuordnen können, müssen Sie ein virtuelles Netzwerk und ein Subnetz erstellen. Erstellen Sie mit az network vnet create ein virtuelles Netzwerk mit einem Subnetz.
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
Erstellen Sie mit az network vnet subnet create zwei weitere Subnetze.
# 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
Ordnen Sie mit az network vnet subnet update die Routingtabelle route-table-subnet-public dem Subnetz subnet-public zu.
az network vnet subnet update \
--vnet-name vnet-1 \
--name subnet-public \
--resource-group test-rg \
--route-table route-table-public
Erstellen eines virtuellen Netzwerkgeräts
Ein virtuelles Netzwerkgerät ist eine VM, die eine Netzwerkfunktion wie Routing, Firewall oder WAN-Optimierung ausführt. Zu Demonstrationszwecken erstellen Sie eine einfache NVA aus einer universellen Ubuntu-VM.
Erstellen Sie mit az vm create eine VM, die als NVA im Subnetz subnet-dmz verwendet werden soll. Beim Erstellen einer VM erstellt Azure standardmäßig eine Netzwerkschnittstelle vm-nvaVMNic sowie eine öffentliche IP-Adresse für das Subnetz und weist beides der VM zu. Der --public-ip-address ""
-Parameter weist Azure an, keine öffentliche IP-Adresse für das Subnetz zu erstellen und der VM zuzuweisen, da keine Verbindungen mit der VM über das Internet hergestellt werden müssen.
Im folgenden Beispiel wird eine VM erstellt und ein Benutzerkonto hinzugefügt. Der Parameter --generate-ssh-keys
bewirkt, dass die CLI in ~/.ssh
nach einem verfügbaren SSH-Schlüssel sucht. Wenn ein Schlüssel gefunden wird, wird dieser Schlüssel verwendet. Andernfalls wird einer generiert und in ~/.ssh
gespeichert. Schließlich stellen wir das neueste Ubuntu 22.04
-Image bereit.
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
Die Erstellung des virtuellen Computers dauert einige Minuten. Fahren Sie erst mit dem nächsten Schritt fort, wenn Azure die VM erstellt und Ausgaben über die VM zurückgegeben hat.
Damit Netzwerkdatenverkehr, der nicht für seine eigene IP-Adresse bestimmt ist, an eine Netzwerkschnittstelle vm-nvaVMNic gesendet werden kann, muss die IP-Weiterleitung für die Netzwerkschnittstelle aktiviert sein. Aktivieren Sie mit az network nic update die IP-Weiterleitung für die Netzwerkschnittstelle.
az network nic update \
--name vm-nvaVMNic \
--resource-group test-rg \
--ip-forwarding true
Das Betriebssystem der VM oder eine Anwendung, die auf der VM ausgeführt wird, muss ebenfalls Netzwerkdatenverkehr weiterleiten können. Sie verwenden den Befehl sysctl
, um den Linux-Kernel zum Weiterleiten von Paketen zu aktivieren. Um diesen Befehl auszuführen, ohne sich bei der VM anzumelden, verwenden Sie die benutzerdefinierte Skripterweiterung 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"}'
Die Ausführung des Befehls kann bis zu einer Minute dauern. Diese Änderung wird nach einem VM-Neustart nicht beibehalten. Wenn die NVA-VM also aus irgendeinem Grund neu gestartet wird, muss das Skript wiederholt werden.
Erstellen von virtuellen Computern
Erstellen Sie zwei VMs im virtuellen Netzwerk, damit Sie in einem späteren Schritt diesen Datenverkehr aus dem Subnetz subnet-public über die NVA an das Subnetz subnet-private weiterleiten können.
Erstellen Sie mit az vm create eine VM im Subnetz subnet-public. Der Parameter --no-wait
ermöglicht Azure die Ausführung des Befehls im Hintergrund, sodass Sie mit dem nächsten Befehl fortfahren können.
Im folgenden Beispiel wird eine VM erstellt und ein Benutzerkonto hinzugefügt. Der Parameter --generate-ssh-keys
bewirkt, dass die CLI in ~/.ssh
nach einem verfügbaren SSH-Schlüssel sucht. Wenn ein Schlüssel gefunden wird, wird dieser Schlüssel verwendet. Andernfalls wird einer generiert und in ~/.ssh
gespeichert. Schließlich stellen wir das neueste Ubuntu 22.04
-Image bereit.
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
Erstellen Sie eine VM im Subnetz subnet-private.
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
Die Erstellung des virtuellen Computers dauert einige Minuten. Nach dem Erstellen der VM zeigt die Azure CLI ähnliche Informationen wie im folgenden Beispiel an:
{
"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"
}
Aktivieren der Microsoft Entra ID-Anmeldung für die VMs
Im folgenden Codebeispiel wird die Erweiterung installiert, um eine Microsoft Entra ID-Anmeldung für eine Linux-VM zu aktivieren. VM-Erweiterungen sind kleine Anwendungen, die Konfigurations- und Automatisierungsaufgaben auf virtuellen Azure-Computern nach der Bereitstellung ermöglichen.
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
Weiterleiten von Datenverkehr über ein virtuelles Netzwerkgerät
Stellen Sie mithilfe eines SSH-Clients Ihrer Wahl eine Verbindung mit den zuvor erstellten VMs her. Beispielsweise kann der folgende Befehl über eine Befehlszeilenschnittstelle wie Windows-Subsystem für Linux verwendet werden, um eine SSH-Sitzung mit der VM vm-private zu erstellen. In den vorherigen Schritten haben Sie die Microsoft Entra ID-Anmeldung für die VMs aktiviert. Sie können sich mit Ihren Microsoft Entra ID-Anmeldeinformationen bei den VMs anmelden oder den SSH-Schlüssel verwenden, den Sie zum Erstellen der VMs verwendet haben. Im folgenden Beispiel verwenden Sie den SSH-Schlüssel, um sich bei den VMs anzumelden.
Weitere Informationen dazu, wie Sie per SSH aus eine Linux-VM zugreifen und sich mit Microsoft Entra ID anmelden, finden Sie unter Anmelden auf einer Linux-VM in Azure mithilfe von Microsoft Entra ID und OpenSSH.
### 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
Installieren Sie mit dem folgenden Befehl die Routenverfolgung auf der VM vm-private:
sudo apt update
sudo apt install traceroute
Verwenden Sie den folgenden Befehl, um die Weiterleitung von Netzwerkdatenverkehr von der VM vm-private zur VM vm-public zu testen.
traceroute vm-public
Die Antwort ähnelt dem folgenden Beispiel:
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
Wie Sie sehen, wird Datenverkehr direkt von der VM vm-private zur VM vm-public weitergeleitet. Azure-Standardrouten leiten Datenverkehr direkt zwischen Subnetzen weiter. Beenden Sie die SSH-Sitzung mit der VM vm-private.
Speichern der IP-Adresse der VM für SSH
Führen Sie den folgenden Befehl aus, um die IP-Adresse der VM als Umgebungsvariable zu speichern:
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
Installieren Sie mit dem folgenden Befehl die Routenverfolgung auf der VM vm-public:
sudo apt update
sudo apt install traceroute
Verwenden Sie den folgenden Befehl, um die Weiterleitung von Netzwerkdatenverkehr von der VM vm-public zur VM vm-private zu testen.
traceroute vm-private
Die Antwort ähnelt dem folgenden Beispiel:
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
Wie Sie sehen können, ist der erste Hop 10.0.2.4, die private IP-Adresse des virtuellen Netzwerksgeräts. Der zweite Hop ist 10.0.1.4, die private IP-Adresse der VM vm-private. Die Route, die der Routingtabelle route-table--public hinzugefügt und dem Subnetz subnet-public zugeordnet wurde, hat bewirkt, dass Azure Datenverkehr über das virtuelle Netzwerkgerät weiterleitet und nicht direkt an das Subnetz subnet-private.
Beenden Sie die SSH-Sitzung mit der VM vm-public.
Bereinigen von Ressourcen
Wenn die Ressourcengruppe und alle enthaltenen Ressourcen nicht mehr benötigt werden, können Sie sie mit az group delete entfernen.
az group delete \
--name test-rg \
--yes \
--no-wait
Nächste Schritte
In diesem Artikel haben Sie eine Routingtabelle erstellt und einem Subnetz zugeordnet. Sie haben ein einfaches virtuelles Netzwerkgerät (NVA) erstellt, das Datenverkehr von einem öffentlichen Subnetz an ein privates Subnetz weiterleitet. Über den Azure Marketplace können Sie eine Vielzahl von vorkonfigurierten virtuellen Netzwerkgeräten bereitstellen, die Netzwerkfunktionen wie Firewall und WAN-Optimierung ausführen. Weitere Informationen zum Routing finden Sie unter Routing von Datenverkehr für virtuelle Netzwerke und Erstellen, Ändern oder Löschen einer Routingtabelle.
Sie können zwar in einem virtuellen Netzwerk viele Azure-Ressourcen bereitstellen, für einige Azure-PaaS-Dienste können jedoch keine Ressourcen in einem virtuellen Netzwerk bereitgestellt werden. Allerdings können Sie den Zugriff auf die Ressourcen einiger Azure-PaaS-Dienste nach wie vor auf den Datenverkehr nur eines Subnetzes eines virtuellen Netzwerks beschränken. Weitere Informationen finden Sie unter Einschränken des Netzwerkzugriffs auf PaaS-Ressourcen mit virtuellen Netzwerkdienstendpunkten mithilfe der Azure CLI.