Kierowanie ruchu sieciowego za pomocą tabeli tras przy użyciu interfejsu wiersza polecenia platformy Azure

Platforma Azure automatycznie domyślnie kieruje ruchem między wszystkimi podsieciami w sieci wirtualnej. Możesz tworzyć własne trasy zastępujące domyślne trasy platformy Azure. Możliwość tworzenia niestandardowych tras jest przydatna, jeśli na przykład chcesz kierować ruchem między podsieciami za pomocą wirtualnego urządzenia sieciowego (NVA). W tym artykule omówiono sposób wykonywania następujących zadań:

  • Tworzenie tabeli tras
  • Tworzenie trasy
  • Tworzenie sieci wirtualnej z wieloma podsieciami
  • Kojarzenie tabeli tras z podsiecią
  • Tworzenie podstawowego urządzenia WUS, które kieruje ruch z maszyny wirtualnej z systemem Ubuntu
  • Wdrażanie maszyn wirtualnych w różnych podsieciach
  • Kierowanie ruchem z jednej podsieci do drugiej za pomocą urządzenia NVA

Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto platformy Azure.

Wymagania wstępne

  • Ten artykuł wymaga wersji 2.0.28 lub nowszej interfejsu wiersza polecenia platformy Azure. W przypadku korzystania z usługi Azure Cloud Shell najnowsza wersja jest już zainstalowana.

Tworzenie tabeli tras

Przed utworzeniem tabeli tras utwórz grupę zasobów za pomocą polecenia az group create dla wszystkich zasobów utworzonych w tym artykule.

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

Utwórz tabelę tras za pomocą polecenia az network route-table create. Poniższy przykład tworzy tabelę tras o nazwie myRouteTablePublic.

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

Tworzenie trasy

Utwórz trasę w tabeli tras za pomocą polecenia 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

Kojarzenie tabeli tras z podsiecią

Zanim skojarzysz tabelę tras z podsiecią, musisz utworzyć sieć wirtualną i podsieć. Utwórz sieć wirtualną z jedną podsiecią za pomocą polecenia 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

Utwórz dwie dodatkowe podsieci za pomocą polecenia 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

Skojarz tabelę tras myRouteTablePublic z podsiecią Publiczną za pomocą polecenia az network vnet subnet update.

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

Tworzenie urządzenia NVA

Urządzenie NVA jest maszyną wirtualną, która realizuje funkcje sieci, takie jak routing, zapora lub optymalizacja sieci WAN. W celach demonstracyjnych utworzymy podstawowe urządzenie WUS na podstawie maszyny wirtualnej z systemem Ubuntu ogólnego przeznaczenia.

Utwórz maszynę wirtualną do użycia jako urządzenie WUS w podsieci DMZ za pomocą polecenia az vm create. Podczas tworzenia maszyny wirtualnej platforma Azure domyślnie tworzy i przypisuje interfejs sieciowy myVmNvaVMNic oraz publiczny adres IP do maszyny wirtualnej. Parametr --public-ip-address "" instruuje platformę Azure, aby nie tworzyć i przypisywać publicznego adresu IP do maszyny wirtualnej, ponieważ maszyna wirtualna nie musi być połączona z Internetem. Jeśli klucze SSH nie istnieją jeszcze w domyślnej lokalizacji kluczy, to polecenie je utworzy. Aby użyć określonego zestawu kluczy, użyj opcji --ssh-key-value.

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

W ciągu kilku minut zostanie utworzona maszyna wirtualna. Nie przechodzij do następnego kroku, dopóki platforma Azure nie zakończy tworzenia maszyny wirtualnej i zwraca dane wyjściowe dotyczące maszyny wirtualnej.

Aby interfejs sieciowy myVmNvaVMNic mógł przekazywać do niego ruch sieciowy, który nie jest przeznaczony dla własnego adresu IP, należy włączyć przekazywanie adresów IP dla interfejsu sieciowego. Włącz przekazywanie adresów IP dla interfejsu sieciowego za pomocą polecenia az network nic update.

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

W ramach maszyny wirtualnej system operacyjny lub aplikacja działająca na maszynie wirtualnej musi także móc przekazywać dalej ruch sieciowy. Użyjemy sysctl polecenia , aby umożliwić jądro systemu Linux do przekazywania pakietów. Aby uruchomić to polecenie bez logowania się na maszynie wirtualnej, użyjemy rozszerzenianiestandardowego skryptu 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"}'

Wykonanie polecenia może potrwać do minuty. Należy pamiętać, że ta zmiana nie będzie trwała po ponownym uruchomieniu maszyny wirtualnej, więc jeśli maszyna wirtualna urządzenia WUS zostanie ponownie uruchomiona z jakiegokolwiek powodu, skrypt będzie musiał zostać powtórzony.

Tworzenie maszyn wirtualnych

Utwórz dwie maszyny wirtualne w sieci wirtualnej, aby można było sprawdzić, czy ruch z podsieci Publicznej jest kierowany do podsieci Prywatnej za pośrednictwem urządzenia WUS w późniejszym kroku.

Utwórz maszynę wirtualną w podsieci Publicznej za pomocą polecenia az vm create. Parametr --no-wait umożliwia platformie Azure wykonanie polecenia w tle, dzięki czemu można przejść do następnego polecenia. Aby usprawnić ten artykuł, używane jest hasło. Klucze są zwykle używane we wdrożeniach produkcyjnych. Jeśli używasz kluczy, musisz również skonfigurować przekazywanie agenta SSH. Aby uzyskać więcej informacji, zobacz dokumentację klienta SSH. Zastąp <replace-with-your-password> ciąg w poniższym poleceniu wybranym hasłem.

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

Utwórz maszynę wirtualną w podsieci Private .

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

W ciągu kilku minut zostanie utworzona maszyna wirtualna. Po utworzeniu maszyny wirtualnej interfejs wiersza polecenia platformy Azure wyświetla informacje podobne do następującego przykładu:

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

Zanotuj wartość adresu publicIpAddress. Ten adres jest używany do uzyskiwania dostępu do maszyny wirtualnej z Internetu w późniejszym kroku.

Kierowanie ruchem za pośrednictwem urządzenia NVA

Korzystając z wybranego klienta SSH, połącz się z maszynami wirtualnymi utworzonymi powyżej. Na przykład następujące polecenie można użyć z poziomu interfejsu wiersza polecenia, takiego jak WSL , w celu utworzenia sesji SSH z maszyną wirtualną myVmPrivate . Zastąp <ciąg publicIpAddress> publicznym adresem IP maszyny wirtualnej. W powyższym przykładzie adres IP to 13.90.242.231.

ssh azureuser@<publicIpAddress>

Po wyświetleniu monitu o hasło wprowadź hasło wybrane w obszarze Tworzenie maszyn wirtualnych.

Użyj następującego polecenia, aby zainstalować trasę śledzenia na maszynie wirtualnej myVmPrivate :

sudo apt update
sudo apt install traceroute

Użyj następującego polecenia, aby przetestować routing ruchu sieciowego do maszyny wirtualnej myVmPublic z maszyny wirtualnej myVmPrivate .

traceroute myVmPublic

Odpowiedź jest podobna do poniższego przykładu:

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

Widać, że ruch jest kierowany bezpośrednio z maszyny wirtualnej myVmPrivate do maszyny wirtualnej myVmPublic. Domyślne trasy platformy Azure kierują ruch bezpośrednio między podsieciami.

Użyj następującego polecenia, aby za pomocą protokołu SSH połączyć się z maszyną wirtualną myVmPublic z maszyny wirtualnej myVmPrivate :

ssh azureuser@myVmPublic

Użyj następującego polecenia, aby zainstalować trasę śledzenia na maszynie wirtualnej myVmPublic :

sudo apt-get install traceroute

Użyj następującego polecenia, aby przetestować routing ruchu sieciowego do maszyny wirtualnej myVmPrivate z maszyny wirtualnej myVmPublic .

traceroute myVmPrivate

Odpowiedź jest podobna do poniższego przykładu:

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

Teraz możesz zobaczyć, że pierwszym przeskokiem jest 10.0.2.4, czyli prywatny adres IP urządzenia NVA. Drugim przeskokiem jest 10.0.1.4, prywatny adres IP maszyny wirtualnej myVmPrivate. Trasa dodana do tabeli tras myRouteTablePublic i powiązana z podsiecią Public spowodowała, że platforma Azure skierowała ruch przez urządzenie NVA, a nie bezpośrednio do podsieci Private.

Zamknij sesje SSH zarówno dla maszyn wirtualnych myVmPublic , jak i myVmPrivate .

Czyszczenie zasobów

Gdy grupa zasobów nie jest już potrzebna, użyj polecenia az group delete , aby usunąć grupę zasobów i wszystkie zawarte w niej zasoby.

az group delete --name myResourceGroup --yes

Następne kroki

W tym artykule utworzono tabelę tras i skojarzyliśmy ją z podsiecią. Utworzono proste urządzenie NVA, które kierowało ruch z podsieci publicznej do podsieci prywatnej. Wdrożono różne wstępnie skonfigurowane urządzenia NVA wykonujące funkcje sieciowe, takie jak zapora i optymalizacja sieci WAN, z witryny Azure Marketplace. Aby dowiedzieć się więcej na temat routingu, zobacz Routing overview (Omówienie routingu) i Manage a route table (Zarządzanie tabelą tras).

Chociaż możesz wdrożyć wiele zasobów platformy Azure w ramach sieci wirtualnej, zasobów dla niektórych usług PaaS platformy Azure nie można wdrożyć w sieci wirtualnej. Nadal możesz ograniczyć dostęp do zasobów niektórych usług PaaS platformy Azure tylko do ruchu z podsieci sieci wirtualnej. Aby dowiedzieć się, jak to zrobić, zobacz Ograniczanie dostępu sieciowego do zasobów PaaS.